Sil*_*Ape 2 unix linux solaris
我很好奇,如果线程在不同版本的Unix中的工作方式有任何不同.
特别是Linux,Solaris和原始的Unix
有什么想法吗?
最初的Unix不使用线程进行多道程序设计.1987年的一篇文章比较了Mach和Unix内核的情况,即"Unix System V和4.3 BSD都没有提供在地址空间内管理多个控制线程的方法".
现代Unix克隆遵循POSIX Threads规范.POSIX Threads标准仅出现在1995年.Linux中的底层实现基于clone()和futex()系统调用,这些调用由内核实现.clone()系统调用创建一个新的轻量级进程,可以与其子进程共享一个内存空间.因此,例如,pthread_create()库调用在内部调用clone()系统调用.futex()系统调用实现了一个同步原语,可用于创建更大的同步操作,如互斥,信号量等.例如,pthread_mutex_lock()将在内部调用futex().
使用POSIX术语,Linux实现模型是一个"内核线程模型",也称为1:1模型,其中1个内核轻量级进程用于1个用户可见线程.
随着时间的推移,Linux也有不同的线程实现.有关Linux中线程支持的更多说明,请参见pthreads(7),clone(2)和futex(2)手册页.
其他实现可能完全不同,仍然实现POSIX线程API.FreeBSD使用M:N实现或"混合模型",其中用户可见线程可以由内核或用户空间库管理.有关完整说明,请参见kse(2)手册页.我曾经将当前1:1的FreeBSD线程实现跟踪到kerneltrap中的一篇文章:
http://web.archive.org/web/20110512021159/http://kerneltrap.org/node/624
OpenSolaris似乎没有在手册页上描述自己的线程实现.我可以找到一个文档,将OpenSolaris内核与Linux 2.6和Windows Vista进行比较.在那里,Linux和OpenSolaris实现之间的主要区别在于,在Linux中,每个进程都是一个轻量级进程,统一线程和进程,而在OpenSolaris中,一个进程包含多个轻量级进程,实际上在内核中将进程与内核线程分开.
参考文献:
http://en.wikipedia.org/wiki/Thread_(computing)
http://en.wikipedia.org/wiki/POSIX_Threads
http://repository.cmu.edu/cgi/viewcontent.cgi?article=2728&context=compsci
http://man7.org/linux/man-pages/man7/pthreads.7.html
http://man7.org/linux/man-pages/man2/clone.2.html
http://man7.org/linux/man-pages/man2/futex.2.html
http://pubs.opengroup.org/onlinepubs/7908799/xsh/threads.html
http://web.archive.org/web/20110512021159/http://kerneltrap.org/node/624
http://www.unix.com/man-page/opensolaris/5/threads/
http://www.infoq.com/articles/kernel-comparison-unix-zhu