来自Java的Ruby和Python中的整个Global解释器锁(GIL)有点令人吃惊。我已经阅读了一些关于这个问题的内容,并在中找到了以下摘录:
我们就不能摆脱全球解释器锁吗?全局解释器锁( GIL )常常被看作是在高端多处理器服务器计算机上部署Python的一个障碍,因为多线程Python程序实际上只使用一个CPU,因为坚持(几乎)所有Python代码只能在持有GIL时才能运行早在Python1.5的时候,Greg实际上实现了一个全面的修补程序集(“免费线程”补丁),它删除了GIL,用细粒度的锁定替
阅读Bartosz关于STM的奇妙的,我兴奋地读到以下内容:
然而,据我所知,这种行为并不是自动的,对吗?如果我使用TVar (Map k a),它会不会在整个地图上充当一个单一的全局锁?为了从这种细粒度的行为中获益,我(或某人)必须实现一个内部包含TVars的映射替换(例如,TVars),对吗?据我所知,与STM的不同之处在于,虽然STM实现实际上使
回顾一下那些可能不知道Java的.NET大师:putIfAbsent(K key, V value)replace(K key, V value)
它还允许在密钥集中进行迭代而不需要锁定(它在迭代开始时获得一个副本),get()操作通常可以与对put()的调用交织在一起而不阻塞(它使用细粒度的锁条带化或者一般的并发实用程序--相当于的java.util.concurrent库。