Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在Neo4j中使用多线程进行查询时,如何避免重入锁定_Multithreading_Caching_Locking_Neo4j - Fatal编程技术网

Multithreading 在Neo4j中使用多线程进行查询时,如何避免重入锁定

Multithreading 在Neo4j中使用多线程进行查询时,如何避免重入锁定,multithreading,caching,locking,neo4j,Multithreading,Caching,Locking,Neo4j,我创建了一个由100万个节点和1亿个关系组成的图。我只有16 GB的RAM,无法缓存所有节点和关系对象。我选择gcr缓存类型,并通过遍历节点和关系来预热图形。 我的机器有16核CPU。问题是单线程一次查询的性能很好(30ms)。但是多线程的性能下降很多,例如,使用4个线程时,一个查询的平均成本约为100ms。我发现NodeManager.lockId()占用的时间最多。NodeManager的来源如下: 似乎当我们得到一个节点或关系时,它会尝试缓存它们,这会生成一个可重入锁并阻塞线程 我不知道

我创建了一个由100万个节点和1亿个关系组成的图。我只有16 GB的RAM,无法缓存所有节点和关系对象。我选择gcr缓存类型,并通过遍历节点和关系来预热图形。 我的机器有16核CPU。问题是单线程一次查询的性能很好(30ms)。但是多线程的性能下降很多,例如,使用4个线程时,一个查询的平均成本约为100ms。我发现NodeManager.lockId()占用的时间最多。NodeManager的来源如下:

似乎当我们得到一个节点或关系时,它会尝试缓存它们,这会生成一个可重入锁并阻塞线程


我不知道如何避免锁或做其他事情来减少开销。我想提高多线程的性能。提前谢谢

仅供参考,我想指出,您提到的锁定在2.0中是不存在的,其中2.0-M06将是第一个具有这一特点的里程碑。

我已经阅读了您的提交,并尝试了2.0.0-M05,但“neo4j.kernel.impl.cache.LockstripedCache.lockId”仍然占用了大部分时间。我试图将2.0.0-M06添加到pom文件中,但maven未能编译。我必须使用2.0-M06吗?下面是我的pom文件org.neo4j neo4j enterprise 2.0.0-M05的一部分