免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-27 15:13 |只看该作者 |倒序浏览
1、Python的Global Interpreter Lock是怎么一回事?是否意味着用Python编制的程序难以充分利用多CPU?
2、最新版本的Python是否改进了这个问题。

谢谢!

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
2 [报告]
发表于 2007-10-02 16:56 |只看该作者
这个问题  也许不是很好说, 但是可以这么说python是建立在虚拟机也就是pythonxx.dll上运行的, 所以在这个进程里面

所有的线程都是基于轮询方式来调度线程的,当然你也可以开多个实例, 所以python的线程并不不是内核级的多线程,

也不是os级的 而是基于虚拟机之上的, 当然Python多线程这块, 我也一直期望他改进,不过作为动态语言,现在这样架构

够用。


第二你说的不能更好的利用cpu资源,这个不用担心,python如果多线程,还是可以充分利用的,我们这边有上万行的Python程序跑起来空运行占几MB内存cpu也不高,如果任务来了,可以占到1-2G的内存 和大量的CPU

所以你不必担心不会充分利用cpu的问题,这个应该跟你的程序结构和算法,以及任务调度的关系的!

论坛徽章:
0
3 [报告]
发表于 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
4 [报告]
发表于 2007-10-06 23:23 |只看该作者
原帖由 青椒不辣 于 2007-10-3 17:52 发表
是这样的,去掉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,可以得到真正的多线程。

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

论坛徽章:
0
5 [报告]
发表于 2007-10-07 18:40 |只看该作者
原帖由 missjiang 于 2007-10-6 23:23 发表

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


恩,想要充分利用多cpu的话,要么在CPython中使用多个进程,要么使用IronPython或者Jython

论坛徽章:
0
6 [报告]
发表于 2007-10-08 13:00 |只看该作者
工作量巨大倒不一定,从Guido的blog中关于为什么去掉GIL不容易的说明 http://blog.csdn.net/gvanrossum/archive/2007/09/12/1782752.aspx主要原因是去掉后,单线程的效率下降太多。所以建议使用多进程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP