当前位置: 技术问答>linux和unix
求高手详解 linux多线程的若干问题 ,高分相送
来源: 互联网 发布时间:2015-10-02
本文导语: 本人的毕业论文,linux多线程方面的,现在有几个问题,一直不能得到很好的解答,特来求教 待论文完成,我会贴出来分享,希望高手们不吝赐教,好让初学者共同进步。 1。linux 到底有几种支持多线程的方法? clo...
本人的毕业论文,linux多线程方面的,现在有几个问题,一直不能得到很好的解答,特来求教
待论文完成,我会贴出来分享,希望高手们不吝赐教,好让初学者共同进步。
1。linux 到底有几种支持多线程的方法? clone 和 pthraed 除外
2。为什么clone的使用非常少,难道是仅仅因为clone移植性不好吗
3。很多资料说linux没有真正的线程,是因为linux系统本身没有提供完整线程控制系统,还是因为
pthread是外来的用户级线程包呢?
分不够的话可以再加,如果讨论热烈,本人准备送出 1k 的分
待论文完成,我会贴出来分享,希望高手们不吝赐教,好让初学者共同进步。
1。linux 到底有几种支持多线程的方法? clone 和 pthraed 除外
2。为什么clone的使用非常少,难道是仅仅因为clone移植性不好吗
3。很多资料说linux没有真正的线程,是因为linux系统本身没有提供完整线程控制系统,还是因为
pthread是外来的用户级线程包呢?
分不够的话可以再加,如果讨论热烈,本人准备送出 1k 的分
|
我来说说我的理解吧。首先是一个基础知识:进程是资源管理的最小单位,线程是程序执行的最小单位。一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如cpu、内存、文件等等),而将线程分配到某个cpu上执行。
1:回答你的第一个问题,pthread就是Linux系统下的多线程遵循POSIX线程接口,因此只有这一种机制。
2:回答第二个问题:pthread的实现是通过系统调用clone()来实现的,因此大家多是直接用threads线性库。
3:第三个问题:这个问题比较复杂,我多说两句。
(1)真正的支持多线程的OS如UNIX,solaris等,其内核都是既支持进程也支持线程,因此就可以实现线程-进程的"多对多"模型,即一个进程的某个线程由核内调度,而同时它也可以作为用户级线程池的调度者,选择合适的用户级线程在其空间中运行。这是POSIX1003.1c标准的线程模型
(2)linux为了简单,采用的是线程-进程"一对一"模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。
(3)这种简化机制有许多不足,因此说Linux没有实现真正的多线程机制。主要谈以下两点:
一:最大的不足是进程id问题。按照POSIX定义,同一进程的所有线程应该共享一个进程id和父进程id,这在目前的"一对一"模型下是无法实现的。在源码阅读者看来,就是Linux内核的clone()没有实现对CLONE_PID参数的支持。
二:信号处理问题。由于异步信号是内核以进程为单位分发的,而LinuxThreads的每个线程对内核来说都是一个进程,且没有实现"线程组",因此,某些语义不符合POSIX标准,比如没有实现向进程中所有线程发送信号。
我就知道这些了,呵呵。其他的请别的高手来回答吧。线程这块我做的还是较少。
1:回答你的第一个问题,pthread就是Linux系统下的多线程遵循POSIX线程接口,因此只有这一种机制。
2:回答第二个问题:pthread的实现是通过系统调用clone()来实现的,因此大家多是直接用threads线性库。
3:第三个问题:这个问题比较复杂,我多说两句。
(1)真正的支持多线程的OS如UNIX,solaris等,其内核都是既支持进程也支持线程,因此就可以实现线程-进程的"多对多"模型,即一个进程的某个线程由核内调度,而同时它也可以作为用户级线程池的调度者,选择合适的用户级线程在其空间中运行。这是POSIX1003.1c标准的线程模型
(2)linux为了简单,采用的是线程-进程"一对一"模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。
(3)这种简化机制有许多不足,因此说Linux没有实现真正的多线程机制。主要谈以下两点:
一:最大的不足是进程id问题。按照POSIX定义,同一进程的所有线程应该共享一个进程id和父进程id,这在目前的"一对一"模型下是无法实现的。在源码阅读者看来,就是Linux内核的clone()没有实现对CLONE_PID参数的支持。
二:信号处理问题。由于异步信号是内核以进程为单位分发的,而LinuxThreads的每个线程对内核来说都是一个进程,且没有实现"线程组",因此,某些语义不符合POSIX标准,比如没有实现向进程中所有线程发送信号。
我就知道这些了,呵呵。其他的请别的高手来回答吧。线程这块我做的还是较少。
|
pthread其实是对接口的要求,而不是对实现的要求,只要有一个符合pthread要求的库,理论上就可以移植……
NGPT这个东西IBM早停了,现在到www.kernel.org上面找到的kernel里面应该都有NTPL了……
所以可以说现在的Linux下面已经有真正的线程了……NTPL我没有仔细研究过,不太清楚到底是如何实现的。应该不是纯粹用户空间的thread的话(就是早期的Linux Thread那种方法),也不太应该是LWP,这样的话还是会残留process的痕迹。
NGPT这个东西IBM早停了,现在到www.kernel.org上面找到的kernel里面应该都有NTPL了……
所以可以说现在的Linux下面已经有真正的线程了……NTPL我没有仔细研究过,不太清楚到底是如何实现的。应该不是纯粹用户空间的thread的话(就是早期的Linux Thread那种方法),也不太应该是LWP,这样的话还是会残留process的痕迹。
|
1。linux 就一种支持多线程的方法,还是进程模拟线程
2。因为clone比较低层,不好用,一般人也不会用
3。linux确实没有真正的线程,因为linux系统本身没有提供完整线程控制系统。
2。因为clone比较低层,不好用,一般人也不会用
3。linux确实没有真正的线程,因为linux系统本身没有提供完整线程控制系统。
|
学习一下
|
mark
|
mark
等下文
等下文
|
https://www.captech.com.cn/viewtopic.php?t=69
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。