问题 PyPy中的GIL在哪里?


PyPy GIL是RPython中PyPy解释器实现的一部分,还是translate.py自动添加的东西?也就是说,如果我要在RPython中编写我自己的新语言解释器并通过translate.py运行它,它是否会先于GIL,或者这取决于我的解释器代码?


7778
2017-08-28 19:33


起源



答案:


GIP处理由PyPy checkout中的module / thread / gil.py插入。它是一个可选的转换功能,只有在启用线程模块时才会添加它。也就是说,RPython本身不是一种线程安全的语言(比如C),所以你需要自己正确地锁定对象,这样它们就不会出现不一致的情况。主要问题是提供一个线程感知垃圾收集器,因为我们现在使用的垃圾收集器不是线程安全的,只是添加一个锁将从自由线程模型中移除许多好处。

干杯, fijal


10
2017-08-31 07:33



仅仅为了记录,似乎clojure-py通过产生新进程并通过erlang风格的消息进行通信来解决问题。 clojure-py.blogspot.com/2012/04/... - lobsterism


答案:


GIP处理由PyPy checkout中的module / thread / gil.py插入。它是一个可选的转换功能,只有在启用线程模块时才会添加它。也就是说,RPython本身不是一种线程安全的语言(比如C),所以你需要自己正确地锁定对象,这样它们就不会出现不一致的情况。主要问题是提供一个线程感知垃圾收集器,因为我们现在使用的垃圾收集器不是线程安全的,只是添加一个锁将从自由线程模型中移除许多好处。

干杯, fijal


10
2017-08-31 07:33



仅仅为了记录,似乎clojure-py通过产生新进程并通过erlang风格的消息进行通信来解决问题。 clojure-py.blogspot.com/2012/04/... - lobsterism