当前位置:  技术问答>linux和unix

LinuxThread跟NPTL总结

    来源: 互联网  发布时间:2016-04-15

    本文导语:  实现都是1*1模型,都应用了clone()系统调用,但ps出来的结果不同(最简单的,还有其它诸多不同),内核到底在这里做出了哪些改变? 百度了半天没有找到结果,都是一句NPTL要求了内核特殊支持带过,到底内核原来...

实现都是1*1模型,都应用了clone()系统调用,但ps出来的结果不同(最简单的,还有其它诸多不同),内核到底在这里做出了哪些改变?

百度了半天没有找到结果,都是一句NPTL要求了内核特殊支持带过,到底内核原来的处理跟现在的处理有什么不同却没有说明,让人很烦躁。下面把我看到的只言片语连总结带猜输出如下,不对之处请大家指正。

LinuxThread,
内核根本没有任何的线程的概信念。线程间共享进程的各种资源使用clone()系统调用,线程的信号处理及线程内同步都是基于用户的管理线程来完成,因为线程间的内存映射都一样,所有进程内的所有线程只能使用同一个sighandler,但线程在内核是不同的进程,所以可以为不同的线程设置不同的sigmask。同步都基于信号来实现,所以线程间的同步效率并不比进程间的同步效率高反而更低。因为内核里面跟本没有线程的概念,这些都是通过创建第一个线程是同步创建的管理线程来实现的。在这个管理线程内部维护了用户线程到内核进程的映射,所有pthread的API都是通过管理线程转化到内核进程来模拟实现。所以pthread之外的API,如getpid(),表现出跟POSIX线程标准不一样的特性。

NPTL, 
线程间共享进程的各种资源仍然使用clone()系统调用。另外,如为了管理进程组有了会话期的管理数据结构,为了管理进程有了进程组的管理数据结构,那么为了支持NPTL,内核引入了线程组的概念,既同同一个进程的线程都属于同一线程组,就是说内核较之前增加了线程这一层的管理数据结构,所以在内核线程的概念是真实的存在着。但是对于调度,内核仍然把不同的线程视为不同进程来调度,或者,也可以这样理解,现在的内核就是以线程做为调度的单元了。对于线程的信号处理,内核有了线程组的概念所以可以做到完全遵循POSIX标准。而线程的同步提供了新的同步原语futex, 当然futex也可以用到进程间的同步去。

欢迎大家补充与指正以达抛砖引玉的效果, ^_^

|

|
Warning: LinuxThreads is outdated since 2006.1 as NPTL is the only alternative with 2006.1 and later
http://people.redhat.com/drepper/nptl-design.pdf

|
nptl: Native Posix Thread Lib

楼主看看这篇文章
http://www.ibm.com/developerworks/cn/linux/l-threading.html


|
don't know,no idea,follow you,study...

|
留下脚印学习。

|


Good!

Recommend! Up~

|
不错啊,留下脚印学习一番.

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3