Java中的concurrentHashMap的Python等价物?

2024-10-01 00:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道字典在python中是原子的,但是(如果我错了,请纠正我)这意味着一次只能完成对字典的单个添加。根据concurrentHashMap的Java页面:“表是在内部分区的,以便在没有争用的情况下允许指定数量的并发更新。”python中的原子插入不会在速度上与Java实现相比吗

编辑:当我写下“这意味着一次只能完成对字典的一次添加”时,我的意思是说字典的状态将基于单个字典的添加而离散化


Tags: 编辑数量字典状态情况页面java速度
1条回答
网友
1楼 · 发布于 2024-10-01 00:14:41

在Python中,由于全局解释器锁(GIL),一个进程一次只能执行一个Python字节码,而不管它有多少个线程。这意味着插入/更新/读取字典的键是线程安全的,这就是人们通常说字典的get/put是“原子”的意思

但这意味着,正如您所怀疑的那样,多个线程尝试将不同的键更新到同一个字典将不会并发。当然,Java没有GIL问题,因此多个线程可以同时更新ConcurrentHashMap中的不同键。这种情况并不总是会发生,只是有可能。ConcurrentHashMap实现切分密钥集并锁定每个切分。每个碎片可以并发读取,但一次只能有一个线程写入。在


†:有时有人指出,使用Python编写的__hash__方法的对象将需要多个Python字节码,因此put和get本身不是原子的;但是简单的put和get仍然是线程安全的,因为它们不会导致崩溃或垃圾值,尽管您仍然可以有竞争条件。在

相关问题 更多 >