锁管理器差异说明
进行中
社区
-
使用 Java 内置锁,即 ’synchronized’。在多处理器机器上可能表现不佳
-
使用 Thread.sleep() 和 Thread.interrupt() 来等待锁。这会导致上下文切换,成本较高
-
保留全局图或所有锁以检测死锁。这是需要在每次锁操作时更新的共享数据结构,因此会产生同步开销
-
为每个新启动的事务创建锁客户端
企业版
-
使用比较并交换指令(AtomicInteger、AtomicLong)和并发无阻塞数据结构(ConcurrentHashMap)来替代同步。它们应能提供更好的可扩展性
-
采用自旋等待与 Thread.sleep() 相结合的方式等待锁。理论上可减少上下文切换
-
没有全局资源来检测死锁。每个锁客户端都有一个本地未同步的位集用于死锁检测。因此不存在需要更新的全局共享资源
-
对锁客户端进行池化,以便新创建的事务可以直接从线程本地存储中获取
-
用于死锁检测的位集未同步,却在不同线程中被更新和读取。这种竞争访问是出于性能考虑,但会导致误报的死锁
一般来说,你不需要更改默认的 lock_manager,但如果需要更改,则必须编辑 $NEO4J_HOME/conf/neo4j.conf(3.x)或 $NEO4J_HOME/conf/neo4j.properties(2.x)并加入以下内容
lock_manager=community
然后重新启动 Neo4j。
此页面有帮助吗?