首页
社区
课程
招聘
[求助]多核心都能实现多线程?
发表于: 2013-7-16 15:29 5237

[求助]多核心都能实现多线程?

2013-7-16 15:29
5237
或者先弱弱地问下,windows系统能让多条线程同时处于运行中?
据了解w2000以前应该都未实现真正的多线程。当然多线程需满足系统及CPU均支持。

假设有一吾头像那类的CPU有6核心,12线程;
1.是否等于最多能同时运行12条线程,貌似还有指令缓冲器这东西。
2.一个有4条线程的进程,理论上线程间可以不用切换,而同时都处于运行?(忽略进入内核的切换)

我的理解:多核心只不过是把指令分配到不同的核心执行,只是CPU怎么知道当前使用哪个线程的寄存器,及分配线程和核心的亲和力 这样好像又说不通。
"多处理器、多核心、多线程",后二者既然设计出来或许还是有这个功能的。
本人不太会表达,稍微见谅。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
多核心,多线程是毫无疑问的。比如系统里面有100个线程,如果只有单核,那么每次执行1个线程,时间片到了,换另一个线程,要换100个时间片才让所有的线程执行了一个时间片。而如果是双核,那么核1执行线程1,核2执行线程2,时间片到了同时换2个线程,核1执行线程3,核2执行线程4。所以50个时间片就让100个线程都轮流执行了一次。在多线程的效率上,明显就提高了一倍。
但是注意,这些多线程其实都是毫不相关的100个线程,才会有这样的效果。windows具体的线程调度和精确的多核cpu的具体的指令执行顺序,谁都不知道。所以,无法做到多线程的同步。就是说,如果2个线程是相关的,线程1要等线程2的执行结果A出来,再继续执行,线程2又要等线程1读取A以后,再计算出B在读出线程1的B的计算结果在继续执行。如果是这样的话,线程1,和线程2会不会同时安排到核1和核2并行执行,谁也搞不清。windows的多线程调度并不能保证多线程的同步,多核cpu的多核同时执行也不能保证多核指令间的同步。
所以根本达不到2核执行就比1核执行快1倍的效果。
2013-7-16 15:48
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
所以说,你写2个线程,线程1,线程2,你想让核1运行线程1,同时的精确时间核2运行线程2,并且在线程1和线程2之间交换数据。但实际情况并不是这样,可能windows让核1运行线程1,同时核2运行非你的程序的其他线程,然后切换,又是核1运行你的线程2,核2再运行其他线程,这样你多线程还有什么意义呢?等于是线程1和线程2顺序执行而不是并行执行,你还不如不要写线程1,线程2,直接写个线程1+2得了,一个线程解决问题。因为2个线程并没有在同一时间段在多核同时并行运行。
2013-7-16 16:21
0
雪    币: 952
活跃值: (1826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
cpu 不用知道线程的概念, 操作系统的调度程序会切换执行不同的线程, 而调度程序是以中断的形式执行的
2013-7-16 16:25
0
雪    币: 65
活跃值: (112)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
简单说一句:你说的这些与通常意义的多线程完全不是一回事,任何关系都没

你说的这个指的是“并行运算”

而且也不是不能实现你要的效果

但是编程复杂度不是你短时间可以搞定的

再者。。。并行计算,你先搞定GPU的再说
2013-7-16 17:33
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
如果一个CPU有6个核心,12条线程,那最多能同时运行6条?12条?
在别处看到:进程中创建了8条线程,且运行在8核心的CPU上,不用切换线程?

我的看法:windows系统并非真正的多线程,多任务指的是进程;一些教程提到 线程同步是通过提IRQL防被切换实现的,那么意思很明确了,不过内核层是否有区别与用户层呢?
2013-7-16 18:02
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
多线程不代表多线程并行运行
就好像说一个人可以说多种语言,这不代表在某一瞬间他所说的话既是英语又是汉语
但是一个有双喇叭的电脑就可以实现左声道汉语右声道英语
2013-7-17 11:24
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
8
同時這個詞很難準確的說。 因爲系統同時在運行的綫程可能幾百到幾千個,它會根據一定的調度算法安排時間片給這些綫程。但,你的多綫程程序可能會被特定的CPU執行,也就是說,你的進程的所有綫程在這個CPU。
2013-7-18 13:35
0
雪    币: 220
活跃值: (117)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
单进程多线程.发生线程调度情况比多核同时运行不同线程的几率高很多
2013-7-18 13:40
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
执行流程的问题,.不关CPU什么事.
2013-7-18 13:47
0
游客
登录 | 注册 方可回帖
返回
//