Linux线程机制总结
2016-01-01 12:03
477 查看
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 线程实现机制分析”。
已被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 线程实现机制分析”。
相关文章推荐
- linux运行级别
- linux"$* "$*" $@ "$@"用法解释
- 在Linux下通过命令行来操作使用Dropbox
- LINUX服务器巡检执行(定制)
- 1.CentOS的下载及各个版本的介绍
- Linux系统下批量修改文件名称
- Linux系统中用于复制的cp和scp命令使用解析
- Linux用户层多线程无锁化原子操作
- Linux 常用
- 详解Linux中rm与rmdir删除命令的用法
- Linux系统下对硬盘分区进行扩容的方法总结
- CentOS6.x 用Putty使用密钥验证方式远程登录
- Install Proprietary NVIDIA Driver On Kali Linux
- Linux下开放防火墙端口
- linux特殊权限SetUID-36
- error: ‘SA_INTERRUPT’ undeclared (first use in this function)
- linux下安装java等
- lamp快速搭建
- linux中配置共享文件夹(配置 samba 实现文件夹共享)
- lnmp快速搭建