免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: nameliba
打印 上一主题 下一主题

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

论坛徽章:
0
21 [报告]
发表于 2008-09-14 11:50 |只看该作者
原帖由 shhgs 于 2008-9-13 04:41 发表
这是一个很难回答的问题。倒不是因为技术问题,而是这个问题本身的很多含义很含糊。

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

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

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

根据我网上查到的信息,Python里的线程就是OS的线程,只是CPython中的线程在使用GIL的地方,无法发挥多核的优势。

论坛徽章:
0
22 [报告]
发表于 2008-09-15 01:22 |只看该作者

回复 #21 xiaonanln 的帖子

这个是我根据记忆写的。我是在Py2.3时代看的那份资料,而那个资料讲的就更早了,可能讲的是Py2.0或者2.1的。我不知道2.4,2.5是不是有改进。不过即便是这样,还是改变不了我们的结论:多核或者SMP对提高Python的性能来说,没用。

甚至我怀疑,像这样有GIL还要启动OS级别的线程,对性能有害。因为GIL的意义在于,每一个时点,系统只能运行一个Python的opcode。而多线程之后,上一次运行的opcode在CPU A上执行,下一个opcode跑到CPU B上运行了。这不是折腾吗?

论坛徽章:
0
23 [报告]
发表于 2008-09-15 01:30 |只看该作者
你说的是对的。下面就是我看的文档。

http://heather.cs.ucdavis.edu/~matloff/Python/PyThreads.pdf

这个是2007年的,我当初是05年看的。文档很不错。

论坛徽章:
0
24 [报告]
发表于 2008-09-15 18:50 |只看该作者
原帖由 shhgs 于 2008-9-13 04:41 发表
这是一个很难回答的问题。倒不是因为技术问题,而是这个问题本身的很多含义很含糊。

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

你这样讲不妥吧,难道只有OS线程才叫线程吗。另外你的OS线程指的是内核线程还是在libc里实现的用户态线程呢。按你所说python只是实现了一种用户态线程,谈不到真线程伪线程吧

论坛徽章:
0
25 [报告]
发表于 2008-09-16 10:20 |只看该作者
ps能够列出Py的线程,所以这个应该是OS级别的线程。至于是用户态的还是内核的,这个跟OS的实现有关。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP