posts - 200, comments - 8, trackbacks - 0, articles - 0

多进程与多线程(四)--NPTL(转)

Posted on 2012-12-18 13:50 鑫龙 阅读(462) 评论(0)  编辑 收藏 引用 所属分类: linux多线程专题

Native POSIX Thread Library

维基百科,自由的百科全书

Native POSIX Thread LibraryNPTL)是一个能够使使用POSIX Threads编写的程序在Linux内核上更有效地运行的软件。

测试表明,NPTL能够成功地在IA-32平台上在两秒种内生成100,000个线程;相应的没有NPTL的内核将耗费15分钟左右。

历史

Linux内核2.6出现之前进程是(最小)可调度的对象,当时的Linux不真正支持线程。但是Linux内核有一个系统调用指令clone(),这个指令产生一个呼叫调用的进程的复件,而且这个复件与原进程使用同一地址空间。LinuxThreads计划使用这个系统调用来提供一个内核级的线程支持。但是这个解决方法与真正的POSIX标准有一些不相容的地方,尤其是在信号处理、进程调度和进程间同步原语方面。

要提高LinuxThreads的效应很明显需要提供内核支持以及必须重写线程函式库。为了解决这个问题出现了两个互相竞争的项目:一个IBM的组的项目叫做NGPTNext Generation POSIX Threads,下一代POSIX线程),另一个组是由Red Hat程序员组成的。2003年中NGPT被放弃,几乎与此同时NPTL公布了。

NPTL首次是随Red Hat Linux 9发表的。此前老式的Linux POSIX线程偶尔会发生系统无法产生线程的毛病,这个毛病的原因是因为在新线程开始的时候系统没有借机先占。当时的Windows系统对这个问题的解决比较好。Red Hat在关于Red Hat Linux 9上的Java的网页上发表了一篇文章称NPTL解决了这个问题。

从第3版开始NPTLRed Hat Enterprise Linux的一部分,从Linux内核2.6开始它被纳入内核。目前它完全被结合入GNU C 函式库。

设计

NPTL的解决方法与LinuxThreads类似,内核看到的首要抽象依然是一个进程,新线程是通过clone()系统调用产生的。但是NPTL需要特殊的内核支持来解决同步的原始类型之间互相竞争的状况。在这种情况下线程必须能够入眠和再复苏。用来完成这个任务的原始类型叫做futex

NPTL是一个所谓的1×1线程函式库。用户产生的线程与内核能够分配的物件之间的联系是一对一的。这是所有线程程式中最简单的。

转自http://zh.wikipedia.org/wiki/Native_POSIX_Thread_Library#cite_note-1

转自:http://blog.chinaunix.net/uid-20556054-id-3068071.html


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理