请选择 进入手机版|继续访问电脑版
发新帖

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

[复制链接]
6657 6

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

举报 使用道具

回复

精彩评论6

scriptb0y  注册会员  发表于 2017-10-11 17:19:09 | 显示全部楼层
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-13 03:48:24 | 显示全部楼层
@scriptB0y #1
第一段的“ GIL 在解释器层面组织了真正的并行运行”,“组织”应为“阻止”吧

举报 使用道具

回复
scriptb0y  注册会员  发表于 2017-10-13 21:38:31 | 显示全部楼层
@halfcoder 是的 谢谢

举报 使用道具

回复
dzmcs  新手上路  发表于 2017-10-14 20:23:14 | 显示全部楼层
@scriptB0y 谢谢!看了下 python 的线程应该是模拟的,threadmodule.c 中没有调用系统线程接口。书不错

举报 使用道具

回复
noanylove  注册会员  发表于 2017-10-15 03:53:42 | 显示全部楼层
@dzmcs 不要瞎说

举报 使用道具

回复
江海志  管理员  发表于 2018-1-24 14:03:25 | 显示全部楼层

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表