当前位置: 技术问答>linux和unix
关于线程的实现
来源: 互联网 发布时间:2015-01-26
本文导语: 标准的PTHREAD在不同的UNIX下似乎采用不同的实现方式。有谁能详细说明和比较一下吗? 另外,在FREEBSD5.0内核中似乎增加了KSE的实现,那在FREE BSD5.0中的PTHREAD是否采用KSE实现? | Linux使用进程+...
标准的PTHREAD在不同的UNIX下似乎采用不同的实现方式。有谁能详细说明和比较一下吗?
另外,在FREEBSD5.0内核中似乎增加了KSE的实现,那在FREE BSD5.0中的PTHREAD是否采用KSE实现?
另外,在FREEBSD5.0内核中似乎增加了KSE的实现,那在FREE BSD5.0中的PTHREAD是否采用KSE实现?
|
Linux使用进程+glibc Linux thread库实现,glibc pthread库调用clone()创建共享mem的进程,内核使用进程切换相同的策略来切换这些"thread"。即将推出的RH81将使用新的kernel&glibc,使部分以前由glibc做的thread管理工作转移到kernel中。我觉得最大的好处是通过proc file system接口只会看到一个process,不会象以前ps看到一大堆thread。但是此实现仍然只能做到1:1 thread模式。此库有个严重问题是在程序运行期间如果调用过setuid,将可能会导致程序出错,因为"thread"之间是通过kill互相发送信号来同步的,而"thread"之间并不共享同一个uid引用...
Linux下另外一个pthread库是IBM得NGPT,需要对kernel打非官方的patch,没有具体看,不过此实现使用M:N thread模式
FreeBSD只看过4.X的实现,具体是通过setjump, longjump进行"thread"调度,并且维护"thread"的一些数据结构(等待队列之类的),而且如果添加了编译pthread的参数的话,一些系统调用都会被pthread lib得包装函数替换,以便这些系统调用能够在需要block的时候切换到另外一个"thread"。这个实现的问题是不能充分利用多cpu的优势。
solaris的pthread lib是在solaris自身的thread库上包装的一个接口,具体没有看过,但是是所有见过的pthread库中最稳定,最符合标准的pthread库。
Linux下另外一个pthread库是IBM得NGPT,需要对kernel打非官方的patch,没有具体看,不过此实现使用M:N thread模式
FreeBSD只看过4.X的实现,具体是通过setjump, longjump进行"thread"调度,并且维护"thread"的一些数据结构(等待队列之类的),而且如果添加了编译pthread的参数的话,一些系统调用都会被pthread lib得包装函数替换,以便这些系统调用能够在需要block的时候切换到另外一个"thread"。这个实现的问题是不能充分利用多cpu的优势。
solaris的pthread lib是在solaris自身的thread库上包装的一个接口,具体没有看过,但是是所有见过的pthread库中最稳定,最符合标准的pthread库。
|
基本都是基于进程的方法实现的。