Python 的线程是怎么实现的?并发差在哪里?

2017-10-09 02:08:59 +08:00
 dzmcs

线程是虚拟的还是调用系统 api,进入 os 调度队列的?

都说 python 并发差,全局解释锁什么的,multiprocessing 库是否调用了系统 API,进程有木有进入 os 调度队列?到底差在哪里?

2835 次点击
所在节点    Python
5 条回复
scriptB0y
2017-10-09 07:58:40 +08:00
GIL 是保证每一个时间内 CPython 只有一个线程在运行,你看 Java 需要关心集合什么的是不是线程安全的,用 CPython 基本可以不管,因为 CPython 同时运行的线程只有一个。

所以 CPython 的线程没有真正的并行执行,例如要用 4 个 CPU 执行计算任务,用 CPython 的线程是不可能的。

最近翻的一本书有一节讲了 GIL 的瓶颈: http://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/chapter2/13_Evaluating_the_performance_of_multithread_applications.html
halfcoder
2017-10-09 10:45:22 +08:00
@scriptB0y #1
第一段的“ GIL 在解释器层面组织了真正的并行运行”,“组织”应为“阻止”吧
scriptB0y
2017-10-09 11:04:33 +08:00
@halfcoder 是的 谢谢
dzmcs
2017-10-09 15:07:06 +08:00
@scriptB0y 谢谢!看了下 python 的线程应该是模拟的,threadmodule.c 中没有调用系统线程接口。书不错
NoAnyLove
2017-10-09 23:09:13 +08:00
@dzmcs 不要瞎说

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396043

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX