LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 574|回复: 1

谁能告诉我linux下的thread与在其他os下的thread有什么不同

[复制链接]
发表于 2004-4-27 13:52:39 | 显示全部楼层 |阅读模式
我现在只是知道,linux的调用pthread_creat(),产生thread。其实是调用clone(),在产生一个轻量进程。每一个thread其实还是有不同的pid。这不同于sloaris,线程拥有相同的pid。linux 是对posix不完全的支持。我还想了解更多的情况,不知道有哪位高手知道。请指导!
不胜感谢!
发表于 2004-4-28 16:45:12 | 显示全部楼层
基本上两种thread: user thread和kernel thread
user thread是在kernel之上的用户层而由thread library执行的, 通常执行速度比较快而且好管理
kernel thread是由kernel自己制造并运行, 速度比较慢, 可是是由KERNEL控制,所以用户本身不用担心像blocking system call此类的问题, WinNT,SOLARIS,DIGITAL UNIX支持此kernel thread

至于multithread model 有三种(基本上现在的OS都支持kernel和user thread):
1, Many to One: 一个kernel thread, 好几个user threads, 这种模式只能1个thread access 内核, 所以不支持parallel 和 multiprocessors, 现在的OS已经不用这个模式了。

2。one to one: 这个模式模拟很多个kernel thread和user thread, 而一个user thread相对一个kernel thread, 此模式支持paralle 和 multiprocessors,但缺点是每次制造一个user thread, 就要同时制造一个kernel thread, 而过量的制造kernel threads会导致系统效率下降。 WinNT, OS2都是用这个模式

3。many to many: 这个模式也是模拟很多个kernel 和 user thread, 但一个user thread 可以对应好几个kernel thread, 而且这种模式下, 通常user thread的数量不可能大过kernel thread, 而one to one 的优点就是user 可以制造多少user thread 都可以。但是concurrency没有办法实现, 因为kernel 一次只能schedule 一个thread. 而many to one 虽然可以实现concurrency, 但是限制了用户制造user thread 的数量, 太多会让kernel 负担加大, 而效率下降。many to many 可以克服以上的所有劣势, user 不但可以不受数量的拘限, 而且达到concurrency. Solaris, DIGITAL UNIX和LINUX都是这种模式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表