免费注册 查看新帖 |

Chinaunix

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

Linux从哪个版本开始兼通posix线程库? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-02-17 09:25 |只看该作者 |倒序浏览
这个问题我糊涂好久了,看了很多资料,互相矛盾。CU的帖子也看了很多,总感觉矛盾。前天买了本《POSIX多线程程序设计》,讲到pthreads的优势,提到说在SMP机器上进程内的threads可以并行运行。然而Linux内核邮件列表上说,Linux没有采用1对1的支持,线程是由库实现的而不是OS。这样就是2个观点:
       1. pthreads可以在SMP机器上并行;
        2. Linux上的posix线程库(glibc6已经集成进去了)与内核无关。

       我的疑问是,既然Linux内核并不知道posix线程的存在,不负责不负调度它们,那么如何能保证SMP机器上的线程并行?
       《linux内核编程指南》中提到posix线程,说由于Linus本人不相信posix线程是必要的,一直拒绝从内核上支持,导致数年的争论和不兼容。直到他被说服,才有人把posix线程的支持加入到2.5版的内核中。然而RH9是2.4的内核和glibc6,却已经有posix线程库了,这该怎么解释?

        好多资料都语焉不详,有熟悉这一领域的朋友讨论一下吧,谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-02-17 10:44 |只看该作者

Linux从哪个版本开始兼通posix线程库?

对线程只知道个皮毛,但经你这么一搅和,大脑一片空白!

论坛徽章:
0
3 [报告]
发表于 2005-02-17 11:19 |只看该作者

Linux从哪个版本开始兼通posix线程库?

linux以前版本的线程库好象是用进程模拟的(轻量进程),这样可以实现并行运行。

2.6的内核支持的是1:1模型,可以参考一下 NPTL 的资料。

论坛徽章:
0
4 [报告]
发表于 2005-02-17 11:32 |只看该作者

Linux从哪个版本开始兼通posix线程库?

原帖由 "精简指令" 发表:
linux以前版本的线程库好象是用进程模拟的(轻量进程),这样可以实现并行运行。

2.6的内核支持的是1:1模型,可以参考一下 NPTL 的资料。


轻量进程(LWP)就是线程啊。UNPv1、v2和kernel邮件列表都是这么说的。除非采用1:1,否则不可能接受OS调度的。
NPTL正在看,谢谢

论坛徽章:
0
5 [报告]
发表于 2005-02-17 11:37 |只看该作者

Linux从哪个版本开始兼通posix线程库?

我不是指那个术语。内核不支持的话,它还是把它当作一个进程那样调度。但是用户是以线程的方式使用。这样说不知道对不对,但我的理解是这样。

论坛徽章:
0
6 [报告]
发表于 2005-02-17 12:54 |只看该作者

Linux从哪个版本开始兼通posix线程库?

原帖由 "精简指令"]我不是指那个术语。内核不支持的话,它还是把它当作一个进程那样调度。但是用户是以线程的方式使用。这样说不知道对不对,但我的理解是这样。[/quote 发表:

我觉得值得商榷。你说的这个“内核不支持”的情况,就意味着1:n,OS只知道有个进程存在,而这个进程中所有的线程,对OS来说都是透明的,不可见的。因此,调度就只能通过线程库来模拟,在线程(s)所属的进程内执行。因为OS不管线程的调度,所以在SMP中不可能做到并行。


下面是LinuxThreads官方页面的话:
     [quote]Unlike other implementations of Posix threads for Linux, LinuxThreads provides kernel-level threads: threads are created with the new clone() system call and all scheduling is done in the kernel.

     见http://pauillac.inria.fr/~xleroy/linuxthreads/
我翻译一下:
与Linux上的其它posix线程库的实现不同,LinuxThreads提供了内核级别的线程:线程(s)使用新的clone系统调用创建,并且由内核实施调度。


然后,再看看http://kerneltrap.org/node/422/1142上的新闻,了解到Linux上的posix线程库一共有3个实现:
1,LinuxThreads,1996年实现,已经被加入到glibc中,维护者不再是原作者,而是glibc team,确切的说,就是Ulrich Drepper。他是RedHat公司的工程师。
2,IBM实现的NGPT
3,RedHat的NPTL,正在设计与开发中,kerneltrap上说将来会成为Linux上的posix线程库的标准实现。主意其作者正是Ulrich Drepper,目前LinuxTreads的维护者。

这三个实现之间的性能比较,看看Drepper本人的实验:
Ulrich Drepper recently offered some interesting benchmark results, comparing the time it takes to create and destroy threads with different threading models under various conditions. The tests were run using a 2.5.37 development kernel, comparing LinuxThreads, NGPT 2.0.2 and NPTL 0.1.

The results of these benchmarks are available in two pdf charts: [chart one] [chart two]. They suggest that while NGPT is twice as fast at thread creation and destruction than LinuxThreads, the new NPTL [story] is still four times faster than that! Read on for Ulrich's full explanation...

在IA32机器上,NGPT是LinuxThreads的2倍,NPTL是NGPT的5倍。以上消息请参考http://kerneltrap.org/node/429?PHPSESSID=cf32edae30f893bafebba80631cf738a


我就胡乱查了这些资料先,慢慢再来理清楚到底目前的linux实现是怎么进行调度的(瞎说一句,如果stevens尚在人世,肯定有精彩的著作给我们理清头绪)

论坛徽章:
0
7 [报告]
发表于 2005-02-17 13:09 |只看该作者

Linux从哪个版本开始兼通posix线程库?

Linux 版本很多  好像大家各自为政  每家都自行其是

论坛徽章:
0
8 [报告]
发表于 2005-02-17 13:27 |只看该作者

Linux从哪个版本开始兼通posix线程库?

[quote]原帖由 "wangdongyu3d"]Linux 版本很多  好像大家各自为政  每家都自行其是[/quote 发表:

你说的版本是发行版。发行版固然很多,但是内核却只有一个,那就是Linus Torvalds和Alan Cox他们开发和维护的。所有的发行版都用这个内核,最多打几个补丁,不可能重建炉灶。

论坛徽章:
0
9 [报告]
发表于 2005-02-17 13:34 |只看该作者

Linux从哪个版本开始兼通posix线程库?

[quote]原帖由 "wangdongyu3d"]Linux 版本很多  好像大家各自为政  每家都自行其是[/quote 发表:


就你知道,LINUX发行版是很多,可是内核就一个你就个知识哥似的

论坛徽章:
0
10 [报告]
发表于 2005-02-17 14:21 |只看该作者

Linux从哪个版本开始兼通posix线程库?

找到一点资料,RH9上的结果:
[root@localhost root]# getconf GNU_LIBPTHREAD_VERSION
NPTL 0.29


可见即时是2.4的内核,也不一定使用LinuxThreads。原来RH9就默认使用NPTL
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP