gpt4 book ai didi

python - 为什么我必须担心 CPython 中的线程安全?

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:36 27 4
gpt4 key购买 nike

据我了解,全局解释器锁只允许单个线程访问解释器并执行字节码。如果是这样,那么在任何给定时间,只有一个线程会使用解释器及其内存。

因此我相信排除出现竞争情况的可能性是公平的,因为没有两个线程可以同时访问解释器的内存,但我仍然看到有关确保数据结构“线程安全”的警告。它有可能涵盖 python 解释器(如 cython)的所有实现,可以关闭 GIL 并允许真正的多线程。

我理解线程安全在没有启用 GIL 的解释器环境中的重要性。但是,对于 CPython,为什么在编写多线程 python 代码时鼓励线程安全?在 CPython 环境中会发生什么更糟糕的情况?

最佳答案

当然,竞争条件仍然会发生,因为对数据结构的访问不是原子的

假设您测试一个键是否存在于字典中,然后执行一些操作来添加该键:

if key not in dictionary:
# calculate new value
value = elaborate_calculation()
dictionary[key] = value

not in 测试返回 true 后,线程可以随时切换,另一个线程 也会得出 key 不存在的结论.现在有两个线程在进行计算,你不知道哪一个会赢。

GIL 所做的只是保护 Python 的内部解释器状态。这并不意味着 Python 代码本身使用的数据结构现在已被锁定和保护。

关于python - 为什么我必须担心 CPython 中的线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206242/

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