社区
Linux_Kernel
帖子详情
在多核CPU下,同一进程下的多个线程可以并行运行吗?
不辣
2008-10-16 05:30:12
在多核CPU下,同一进程下的多个线程可不可以并行运行,是不是一个进程下的所有线程都在同一个cpu上运行?
...全文
7355
11
打赏
收藏
在多核CPU下,同一进程下的多个线程可以并行运行吗?
在多核CPU下,同一进程下的多个线程可不可以并行运行,是不是一个进程下的所有线程都在同一个cpu上运行?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dog250
2008-10-17
打赏
举报
回复
4
如果是内核线程(就是fork出来的,pthread_create在2.4后最终也用fork,具体参看其实现),那么可以调度到多cpu,内核支持线程的诱导因素之一就是可以利用多cpu资源进行并行计算;如果是用户线程,那么就不能在多cpu上并行计算了,用户库线程的弊端之一就是不能利用多cpu资源;具体到调度,就是当内核发现本cpu没有任何可运行线程时,就会去别的忙cpu上拽几个下来,当然这是内核自发进行的多cpu调度,作为用户也可以自觉地将线程邦定到具体cpu,更加确定的利用多cpu,当然什么都不是任其发展的,内核不能随便从哪个忙cpu上拽线程,还要看线程愿不愿意(参见linux内核函数cpuset_cpus_allowed),另外还要考虑smt(在intel平台即超线程)的兄弟cpu,还要考虑numa,你总不能让本地cpu的线程跑到遥远的cpu上运行吧.....(还有很多好玩的,自己看代码吧)
以上扯的都是linux的实现,是我对代码的总结,感兴趣可自行阅读。至于windows平台,道道就更多了(windows的道道总是能把你搞晕,不过玩玩挺好,挺有趣,比如动态优先级提升之类的),它甚至可以让内核线程运行在一个专门cpu上,别的用户线程分享别的cpu(linux也可以做到,但是有意思吗?).....
希望能解决lz的问题,如有不明:qq:23870617。本人专注操作系统,呵呵,愿结志同道合之士
once_and_again
2008-10-17
打赏
举报
回复
study....
不辣
2008-10-17
打赏
举报
回复
不错,学习了
看得出这位仁兄对linux的底层代码还是有一番研究的,不过,你留的QQ似乎加不上,要回答问题的
once_and_again
2008-10-17
打赏
举报
回复
不可以吧,因为共享进程的一些资源,
怎么处理,不成了异步了吗?
快乐田伯光
2008-10-17
打赏
举报
回复
我以前的理解有问题!
这么说的话能否运行在同一CPU的不同核上,就看这个执行实体能不能被内核所看到,这样的话,不管是2.4前的LinuxThread实现还是后来的NPTL实现,多线程都可以在不同的核上同时运行。除非是那种完全的用户态线程实现,才不会在不同的核上运行。
mingbao
2008-10-17
打赏
举报
回复
还有,创建线程的时候,可以指定该线程绑定到哪个CPU上。
mingbao
2008-10-17
打赏
举报
回复
Linux SMP结构既可以在多个CPU上并行运行多个进程,也可以在多个CPU上并行运行同一进程的多个线程。
对于运行在多CPU上的LINUX来说,每个CPU有一个自己的调度队列。当多个调度队列中的进程数相差超过一定的数值时,内核会自动进行调整,从而使得各CPU上的进程数保持均衡。
另外需要说明的是,Linux下的线程,相当于进程,因为它在内核中有自己的task_struct。其实线程与进程的唯一差别是,线程没有自己独立的虚存空间。
也就是说,如果一个进程创建了一个线程,那么新线程与老的主线程,就相当于两个共享虚存空间的进程。内核的调度程序是以task_struct为单位进行调度的。
快乐田伯光
2008-10-17
打赏
举报
回复
不管是2.4前还是后都不是直接fork,都是用clone()调用,fork()也调用clone(),只是2.4前后clone()添加了新的参数来放便线程的实现。
另外,并不能同时在多个CPU运行不同的进程,只能在多个CPU上运行同一个进程的不同线程吧。
realdragon2
2008-10-16
打赏
举报
回复
Linux 以前的内核版本并没有提供对线程的支持, 在内核中是用轻量级进程来支持线程的, 这是不符合POSIX标准的.
但在2.4以后的内核实现中, 提供了对线程的支持, 也就是内核开发者重写了内核的线程库. 具体,可以Google一下: Linux NPTL.
xlanchen
2008-10-16
打赏
举报
回复
[Quote=引用 1 楼 guosha 的回复:]
现在同一进程下的多个线程是可以在多核CPU下并行运行的。但2.4内核及以前的系统实现的线程没有内核支持,无法在多核的情况下并行运行。
[/Quote]
多线程的概念主要有两种:一种是用户态多线程;一种是内核态多线程
内核态多线程,如楼上所言,在操作系统内核的支持下可以在多核下并行运行;
对于用户态多线程,尽管没有内核的直接支持,但若一个用户态线程对应于内核的一个进程的话(从这个角度,内核还是间接支持的),仍然是可以在多核上并行运行的。
因此,这归结为,用户态多线程的实现技术。
似乎目前Linux上的用户态多线程,就是利用了内核的进程来实现的。
快乐田伯光
2008-10-16
打赏
举报
回复
现在同一进程下的多个线程是可以在多核CPU下并行运行的。但2.4内核及以前的系统实现的线程没有内核支持,无法在多核的情况下并行运行。
下载 多
线程
编程技术开发资料 高清完整PDF版
多
线程
编程技术开发资料.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
多
线程
编程技术开发资料.pdf
多
线程
编程技术开发资料.pdf
多
CPU
/
多核
/多
进程
/多
线程
/并发/
并行
之间的关系
多
CPU
,
多核
,多
进程
,多
线程
当面临这些问题的时候,有两个关键词无法绕开,那就是
并行
和并发。 首先,要先了解几个概念: 1、
进程
是程序的一次执行。 2、
进程
是资源分配的基本单位(调度单位)。 3、一个
进程
可以包括
多个
线程
。 4、在单
CPU
计算机中,有一个资源是无法被
多个
程序
并行
使用的:
CPU
。 5、操作系统调度器:拆分
CPU
为一段段时间的
运行
片,轮流分配给不同的程序。 6、操作系统内存管理模块:管理物理内存、虚拟内存相关的事务。 由于
CPU
同时刻只能执行一个
进程
,如果我们不加以控制的话,一个
进程
可能
关于
多核
CPU
和
多个
进程
的问题
一、
多核
CPU
可以同时执行
多个
进程
。 扩展了说,单核
CPU
就可以“同时”执行
多个
进程
。先普及两个概念,并发和
并行
。 二、并发 当有
多个
线程
在操作时,如果系统只有一个
CPU
,则它根本不可能真正同时进行一个以上的
线程
,它只能把
CPU
运行
时间划分成若干个时间段,再将时间 段分配给各个
线程
执行,在一个时间段的
线程
代码
运行
时,其它
线程
处于挂起状。.这种方式我们称之为并发(Concurrent)。 三、
并行
当系统有一个以上
CPU
时,则
线程
的操作有可能非并发。当一个
CPU
执行一个
线程
时,另一个
CPU
可以执行另一个
线程
,
多核
CPU
、多
CPU
与多
进程
、多
线程
关系
文章目录1
cpu
架构和工作原理2
多核
cpu
和多
cpu
架构3
进程
和
线程
4
多核
、多
CPU
与多
线程
、多
进程
的对应关系5 总结 1
cpu
架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和
cpu
内部总线构成中央处理器(
CPU
)。
cpu
的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,
cpu
从逻辑上可以划分为3个模块:控...
Linux_Kernel
4,461
社区成员
17,462
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章