社区
Linux_Kernel
帖子详情
在多核CPU下,同一进程下的多个线程可以并行运行吗?
不辣
2008-10-16 05:30:12
在多核CPU下,同一进程下的多个线程可不可以并行运行,是不是一个进程下的所有线程都在同一个cpu上运行?
...全文
7758
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内核及以前的系统实现的线程没有内核支持,无法在多核的情况下并行运行。
多个
CPU
和
多核
CPU
以及超
线程
(Hyper-Threading)详解
在这篇文章中我会主要介绍
CPU
相关的一些重要概念和技术。如果你想更好地了解操作系统,那就从本文开始吧。
多核
CPU
、多
CPU
与多
进程
、多
线程
关系
文章目录1
cpu
架构和工作原理2
多核
cpu
和多
cpu
架构3
进程
和
线程
4
多核
、多
CPU
与多
线程
、多
进程
的对应关系5 总结 1
cpu
架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和
cpu
内部总线构成中央处理器(
CPU
)。
cpu
的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,
cpu
从逻辑上可以划分为3个模块:控...
CPU
入门扫盲篇之一文搞懂多
CPU
、
多核
CPU
、超
线程
技术、SMP
上,如果某个物理核心在执行指令流时需要等待指令数据,那么该核心就有一段时间处于空闲状态(虽然可能很短暂)。,非对称多处理器,指某些处理器用来
运行
特殊的程序,比如操作系统,而另外的处理器用来
运行
非特殊程序,比如用户程序。的时候,需要等待指令需要的数据到达,那么,在这个等待的时间内,才可以切换到指令流。,是指任何程序,不管
运行
在内核空间,还是用户空间,都可以
运行
在任意一个处理器上。物理核,物理核之间通过片内总线相连,相比主版上的系统总线,片内总线速度非常快。为了实现超
线程
技术,一个物理核心内部,会同时包含。
多核
CPU
和
多个
CPU
区别
并行
和并发 操作系统内存管理模块
进程
和
线程
当面临这些问题的时候,有两个关键词无法绕开,那就是
并行
和并发。 首先,要先了解几个概念: 1、
进程
是程序的一次执行。 2、
进程
是资源分配的基本单位。 3、一个
进程
可以包括
多个
线程
。 4、在单
CPU
计算机中,有一个资源是无法被
多个
程序
并行
使用的:
CPU
。 5、操作系统调度器:拆分
CPU
为一段段时间的
运行
片,轮流分配给不同的程序。 6、操作系统内存管理模块:管理物...
多
CPU
和
多核
CPU
对应多
进程
和多
线程
调度
目录
cpu
架构和工作原理
多核
cpu
和多
cpu
架构
cpu
的缓存
进程
和
线程
进程
和
线程
在
多核
cpu
,多
cpu
中的
运行
关系
cpu
架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和
cpu
内部总线构成中央处理器(
CPU
)。
cpu
的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,
cpu
从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。这三个部分由
cpu
总线连接起来。
CPU
的
运行
原理就是:控
Linux_Kernel
4,469
社区成员
17,458
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章