100 万のノードと 1 億のリレーションシップで構成されるグラフを作成します。私は 16 GB の RAM しか持っていないので、すべてのノードと関係オブジェクトをキャッシュすることはできません。gcr cache_type を選択し、ノードと関係をトラバースしてグラフをウォームアップします。私のマシンには 16 コアの CPU が搭載されています。問題は、シングル スレッドによる 1 つのクエリのパフォーマンスが良好 (30 ミリ秒) であることです。ただし、マルチスレッドのパフォーマンスは大幅に低下します。たとえば、1 つのクエリの平均コストは、4 スレッドで約 100 ミリ秒です。NodeManager.lockId() が最も時間がかかることがわかりました。NodeManager のソースは次のとおりです。
ノードまたは関係を取得すると、それらをキャッシュするために何かをしようとするようです。これにより、 ReentrantLock が生成され、スレッドがブロックされます。
ロックを回避する方法や、オーバーヘッドを減らすために何か他のことをする方法がわかりません。マルチスレッドのパフォーマンスを向上させたい。前もって感謝します!