介绍NPTL
来源:互联网 发布:国家二级c语言成绩 编辑:程序博客网 时间:2024/06/01 08:10
转自:http://blog.csdn.net/guosha/article/details/2960186
POSIX Thread Library (NPTL)使Linux内核可以非常有效的运行使用POSIX线程标准写的程序。这里有一个测试数据,在32位机下,NPTL成功启动100000个线程只用了2秒,而不使用NPTL将需要大约15分钟左右的时间。
历史
在内核2.6以前的调度实体都是进程,内核并没有真正支持线程。它是能过一个系统调用clone()来实现的,这个调用创建了一份调用进程的拷贝,跟fork()不同的是,这份进程拷贝完全共享了调用进程的地址空间。LinuxThread就是通过这个系统调用来提供线程在内核级的支持的(许多以前的线程实现都完全是在用户态,内核根本不知道线程的存在)。非常不幸的是,这种方法有相当多的地方没有遵循POSIX标准,特别是在信号处理,调度,进程间通信原语等方面。
很显然,为了改进LinuxThread必须得到内核的支持,并且需要重写线程库。为了实现这个需求,开始有两个相互竞争的项目:IBM启动的NGTP(Next Generation POSIX Threads)项目,以及Redhat公司的NPTL。在2003年的年中,IBM放弃了NGTP,也就是大约那时,Redhat发布了最初的NPTL。
NPTL最开始在redhat linux 9里发布,现在从RHEL3起内核2.6起都支持NPTL,并且完全成了GNU C库的一部分。
设计
NPTL使用了跟LinuxThread相同的办法,在内核里面线程仍然被当作是一个进程,并且仍然使用了clone()系统调用(在NPTL库里调用)。但是,NPTL需要内核级的特殊支持来实现,比如需要挂起然后再唤醒线程的线程同步原语futex.
NPTL也是一个1*1的线程库,就是说,当你使用pthread_create()调用创建一个线程后,在内核里就相应创建了一个调度实体,在linux里就是一个新进程,这个方法最大可能的简化了线程的实现。
除NPTL的1*1模型外还有一个m*n模型,通常这种模型的用户线程数会比内核的调度实体多。在这种实现里,线程库本身必须去处理可能存在的调度,这样在线程库内部的上下文切换通常都会相当的快,因为它避免了系统调用转到内核态。然而这种模型增加了线程实现的复杂性,并可能出现诸如优先级反转的问题,此外,用户态的调度如何跟内核态的调度进行协调也是很难让人满意。
- 介绍NPTL
- NPTL
- LinuxThreads & NPTL
- linuxThreads & NPTL
- NPTL, NGPT
- 介绍NPTL (经典--诠释了线程的概念,以及linux调度单位)
- LinuxThreads 和 NPTL
- NPTL vs Linux Thread
- NPTL的解释
- NPTL的解释 2
- NPTL and linuxthreads
- Pthread线程库--NPTL
- LinuxThread VS NPTL
- LinuxThread VS NPTL
- LinuxThreads和NPTL
- LinuxThread VS NPTL
- LinuxThread VS NPTL .
- 采用nptl库编译程序
- 【leetcode 进制转换】Excel Sheet Column Title
- ctime库函数的使用
- 视频传输播放为解决的bug
- 在理论分析家和程序员眼中,html5是大不相同的
- 第17周-Problem E: 重复字符串
- 介绍NPTL
- Eclipse无法识别(手机)设备的解决方案
- 字符串的全排列和组合算法
- 什么是线程池
- 栈的应用实践之计算机执行后缀表达式
- Android基础系列之资源(三)
- html基础
- Bmob移动后端云服务平台--Android从零开始--(一)何为Bmob
- Bmob移动后端云服务平台--Android从零开始--(二)android快速入门