免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: nameliba

py的多线程是伪线程吗? [复制链接]

论坛徽章:
0
发表于 2008-09-10 11:49 |显示全部楼层
查了一下,好像说是由于GIL(Global Interpreter Lock)的存在,使得Python不能发挥多核的能力。
这里有Guido在mail list里的一次发言:http://mail.python.org/pipermail/python-3000/2007-May/007414.html
大概意思是Python可以通过多进程而不是多线程来发挥多核的能力。多进程比多线程更好,而且Py3000里这方面也不会有什么变化。

论坛徽章:
0
发表于 2008-09-10 13:53 |显示全部楼层
stackless python是不是对线程支持比较好?

论坛徽章:
0
发表于 2008-09-12 13:54 |显示全部楼层
gil导致python对每个python对象操作时都要锁定,这样纯python代码就利用不了多核多cpu。但是io方面还是可以并发一些的。

这样,做到极致也就是跟单线程单进程的多路复用打个平手。

python cookbook的线程那章的前言里讲的比较清楚。

论坛徽章:
0
发表于 2008-09-12 13:54 |显示全部楼层
另外这里说的只是CPython,其他python的实现还是比较好的。

论坛徽章:
0
发表于 2008-09-12 18:21 |显示全部楼层
原帖由 formalin14 于 2008-9-12 13:54 发表
gil导致python对每个python对象操作时都要锁定,这样纯python代码就利用不了多核多cpu。但是io方面还是可以并发一些的。

这样,做到极致也就是跟单线程单进程的多路复用打个平手。

python cookbook的线程 ...

不过这样总是让人感觉有点欠缺。
难道就没有一个场合,在那里多线程是最好的解决方案吗?

论坛徽章:
0
发表于 2008-09-12 18:27 |显示全部楼层
不知道你要的什么场合。


多线程的话,java和c#都很成熟,底层的话pthread和win32thread也很好。

另外,erlang就更爽了。

论坛徽章:
0
发表于 2008-09-12 21:36 |显示全部楼层

论坛徽章:
0
发表于 2008-09-13 04:41 |显示全部楼层
这是一个很难回答的问题。倒不是因为技术问题,而是这个问题本身的很多含义很含糊。

Python的线程有两层意思。第一是对Python解释器来说。这个没问题,是真线程。Python的解释器会管理它名下的线程,分配资源,并行运行。

而Python的这些线程针对OS是否是多线程的?这个不是。Python的线程只能通过Python解释器得到系统资源。而Python本身,是单线程模式的。因此Python的线程不可能是真的线程。

第三个问题,既然Python的线程不是真线程,是否编程的时候要避免使用?这个,见仁见智。我个人的偏好是,不用。虽说多线程在某些情况下能简化程序的设计,但是这种情况太少见了。

论坛徽章:
0
发表于 2008-09-13 19:42 |显示全部楼层
请问一下 您是怎样用python有效利用多核心资源的?

论坛徽章:
0
发表于 2008-09-14 09:49 |显示全部楼层
据说Cpython有去除GIL的实现,只是性能比带GIL的差
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP