解释性语言如何避免使用全局解释器锁(GIL)?

解释性语言如何避免使用全局解释器锁(GIL)?,第1张

概述解释语言如何避免使用全局解释器锁(GIL)?

cpython使用全局解释器锁 。 linux已经删除了大内核锁的所有痕迹。 什么是这些锁的替代品? 一个系统如何充分利用一个真正的多核或多处理器系统,而不是把所有的东西都停下来呢?

如果python使用更高级的垃圾收集器(比如IBM的Recycler) ,那么它就不是必须的了。 这是Unladen Swallow为改善蟒蛇性能而做的事情。 一个更有希望的答案是stackless Python ,它使用自己的微线程实现,而不像传统的cpython那样依赖于 *** 作系统。

GIL是特定于进程的,所以你可以通过启动几个Python进程来解决它。 多处理模块为此提供了一个易于使用的API。

另一种方法是使用C-extensions(或自己写的),在做你需要的数据处理的同时释放GIL。

简单。 没有可变状态,就像Haskell和其他函数式编程语言一样。 由于内存中没有内容需要更改,因此不需要全局锁定。

你可以像摆脱大内核锁一样去除GIL:简单地添加更多细粒度的锁或使用不需要锁的原子基元。

Python不这样做的缺点和主要原因是性能。 例如,Tcl解释器没有GIL,但可以编译为线程和非线程,如果使用线程版本,性能将比单线程少10-20%。 所以,除非你使用线程,否则实际上会比较慢。 已经有Python补丁添加更小的锁,但那些更糟的性能影响,所以被拒绝。

这只是一个权衡,Python开发者决定单线程性能(和C扩展的向后兼容性)比在python级别上使用多线程的选项重要得多。 你仍然可以在C扩展中自由地使用线程,只是在python语言级别上没有意义。

总结

以上是内存溢出为你收集整理的解释性语言如何避免使用全局解释器锁(GIL)?全部内容,希望文章能够帮你解决解释性语言如何避免使用全局解释器锁(GIL)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1290921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存