Linux线程机制总结

来源:互联网 发布:军事网络的安全保护 编辑:程序博客网 时间:2024/05/11 19:34
Linux2.0~2.4 : LinuxThreads库 每一个执行实体都是task_struct结构, 映射 1: 1,但需要增加管理线程。对Posix标准兼容的不好。
已被NPTL取代


Linux2.6 : NPTL(Native POSIX Threading Library)
实现方式: 类似LWP(轻量级进程)  用户线程:内核线程映射 1:1, 因为一个pThread(注: 这里pthread正确理解应为一种用户线程和内核线程的映射方式,之前理解为一种线程是错误的! )创建最终调用clone函数
(fork()、vfork()最终也调用该函数)创建一个内核可见的用户线程且由内核调度(但该可见线程是否需要在内核中创建对应内核线程?), 目前被结合入glibc库。


以上是linux线程库的发展历程。


还有两类目前不用的:
1. 1:N 即多个用户线程对应一个内核进程,因为内核一次只能给一个进程分配一个CPU,其他线程只能等,不适合多处理器。此外如果一个线程阻塞,该进程中的所有线程都被阻塞,直至该阻塞操作结束。
被抛弃。


2. 多对多 NGPT(Next Generation POSIX Threads) 即M:N模型(M个线程对应N个内核级线程), 也就是说若干个线程可能是在同一个执行实体上实现的,并发性较高,因此性能上有优势。按照2003年3月NGPT官方网站上的通知,NGPT考虑到NPTL日益广泛地为人所接受,为避免不同的线程库版本引起的混乱,今后将不再进行进一步开发,而今进行支持性的维护工作。也就是说,NGPT已经放弃与NPTL竞争下一代Linux POSIX线程库标准。 
但在商业环境如UNIX上仍有应用。




参考 Linux 线程实现机制分析 国防科技大学计算机学院”的“Linux 线程实现机制分析”。
0 0
原创粉丝点击