免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3969 | 回复: 1
打印 上一主题 下一主题

请教:关于python线程的两个问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-10-03 17:52 |显示全部楼层

回复 #1 missjiang 的帖子

是这样的,去掉GIL没有太大的价值,而且在新版本的python(包括python3k)也是不会取消的。

在1999年Greg Stein和Mark Hammond创建了一个去掉GIL的1.5分支,将GIL替换为细粒度锁。但是,做过了基准测试之后,结果令人失望,在最好的情况下,单线程的效率只有原来的一半。另外去掉 GIL 将会造成对解释器的大量的重写,它会使扩展模块变得复杂,一旦扩展有任何的全局可变数据,将不得不为多线程并发调用做好准备。也可能需要对Python/C API进行改动,它们是为了在一系列的调用中需要对某种对象加锁所需要的。

出于以上考虑,Guido尽管欢迎有人来维护一个无GIL的python分支,但他本人不会花太多精力。

最后,尽管不会取消GIL, 但是着并不意味着不能充分利用多cpu,有一下几种方法:
1.可以创建多个进程而不是线程,进程数和cpu一样多。
2.使用Jython 或 IronPython,可以得到真正的多线程。

论坛徽章:
0
2 [报告]
发表于 2007-10-07 18:40 |显示全部楼层
原帖由 missjiang 于 2007-10-6 23:23 发表

谢谢青椒不辣和ghostwwl两位的回复。我现在的理解是:去掉 GIL的工作是得不偿失的,细粒度锁版本的效率是原来的1/2;另外,去掉 GIL的工作量是巨大的,要求对Python解释器的大量的重写,因此Guido不愿意做这件 ...


恩,想要充分利用多cpu的话,要么在CPython中使用多个进程,要么使用IronPython或者Jython
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP