内特·格林

发表的评论

文章写得不错,并且您在背景中加入了 CPython 代码,这非常有帮助。

不过,我认为您关于 list.sort() 是原子操作的说法是不准确的。在多线程的可抢占场景中,没有什么可以阻止线程 1 开始就地对列表进行排序,耗尽分配给它的 1000 个字节码或 15 毫秒,然后另一个线程成为当前正在运行的线程并向其附加一个项目。这将是一个问题。需要一个外部锁定机制来保证 list.sort() 函数不会被中断。

来自文档

“CPython 实现细节:当列表正在排序时,尝试修改甚至检查列表的效果是未定义的。Python 的 C 实现使列表在持续时间内显示为空,并且如果它可以检测到列表在排序期间已被修改,则会引发 ValueError。”

https://docs.pythonlang.cn/3/library/stdtypes.html?highlight=list#list

感谢您的澄清。只要 GIL 不会在 CPython 代码中被放弃,这就有道理了,从您的其他示例来看,这似乎只是有意识地通过 IO 依赖的代码完成的,我从您写的内容中理解到情况就是这样。

© . All rights reserved.