LINUX中物理CPU资源的分配是基于线程还是进程?
WINDOWS中CPU的分配基于线程,
所以多线程能支持多CPU,
今天看了老美的UNIX编程,指出UNIX中物理CPU分配是基于进程,
各线程只能在进程内部重新分配CPU资源,或者影射为系统线程才能参与全局CPU资源的竞争。
也就是说,不管一个进程内有多少个用户线程,LINUX核心最多只能分配一个CPU给该进程,
除非将用户线程影射为SYSTEM线程?
是否如此?
难道只能FORK才能利用多CPU?汗啊
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
多线程差不多就等于多进程了. 因为现在系统多数是不分线程和进程的.
在多CPU服务器中
会极大的影响到软件的性能的
所以要搞清楚
期待高手来解答
线程。
是看进程还是线程,关键看线程库的实现模型。1:1 , 1:N, M:N是三种最主要的,linux用的是1:1.
但是以前听说linux下都是用进程的!!
这个知识点我很模糊,还请高手详细指点啊!
楼主还不了解Multi-Task的真正含义。还有楼上的朋友,现在实在没时间讲,找找资料看吧。process和thread不就是……嗯,单词吗?不同场合代表不同含义,概念混乱是这个领域的特征之一,呵。
线程。
是看进程还是线程,关键看线程库的实现模型。1:1 , 1:N, M:N是三种最主要的,linux用的是1:1.
我查看了LINUX新核心,主要修改是重新架构了线程结构,
但我依然不明白,如果我只有一个进程,里面开N个用户线程,
是否能充分利用物理多CPU,还是依然要强制映射为SYSTEM 内核线程才能参与CPU分配,关键问题在这里。线程库是POSIX的,全部采用POSIX标准写的用户线程库,我主要讨厌那个映射
我的理解是利用多个CPU是没问题的, 哪天写个程序试验一下就可以确认知道了。
简单点的概念:线程是可以相互共享内存地址空间的进程。
---------------------------------
LinuxThreads采用称为1-1模型:每个线程实际上在核心是一个个单独的进程,核心
的调度程序负责线程的调度,就象调度普通进程。线程是用系统调用clone()创建的
,clone()系统调用是fork()的推广形式,它允许新进程共享父进程的存储空间、文
件描述符和信号处理程序。
“一对一”模型的优点在于:
A 最小限度消耗的CPU级多处理技术(每个CPU一个线程);
B 最小限度消耗的I/O操作;
C 一种简单和强壮的实现(核心调度程序为我们做了大部分艰难的工作)
我现在就是没有多CPU的PC供我测试啊,
否则也不用这么麻烦了