JavaプロセスとC++プロセスが共有メモリセグメントを介して相互に通信しています(Java側の通信にjniを使用)。Javaに1つのスレッドがあり、C ++に1つのスレッドがある場合、コードはまともな速度で実行されますが、プロセスで複数のスレッドを使用するとすぐに、パフォーマンスが大幅に低下します(ほぼ100倍)。
この後、コード(core2duoシステムで実行している)でいくつかの調整を行ったところ、1つのコアにjavaプロセスをマッピングすると(sched_affinity()を使用)、core1にcppプロセスをマッピングしたときにパフォーマンスが向上することがわかりました。回復します。
なぜこうなった?問題は共有メモリセグメントでのキャッシュの競合である可能性があると思いましたが、このコアマッピングによりパフォーマンスが向上します。また、この動作は、複数のスレッドが使用されている場合にのみ観察されます。両方のプロセスでシングルスレッドを使用する場合、速度は通常です。