gpt4 book ai didi

java - Python 等同于 Java 中的 concurrentHashMap?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:40 26 4
gpt4 key购买 nike

我知道字典在 python 中是原子的,但是(如果我错了请纠正我)这意味着一次只能完成对字典的一个添加。根据 concurrentHashMap 的 Java 页面:“该表在内部进行了分区,以尝试允许指定数量的并发更新而不会发生争用。” python 中的原子插入不会在速度上无法与 Java 实现相提并论

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

最佳答案

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

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


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

关于java - Python 等同于 Java 中的 concurrentHashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48124257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com