打开超线程,多线程任务是并发还是并行执行,运算能力为什么会提升?

阅读 3.4k
2 个回答

从你给的链接的文章来说,超线程并不是真正的并发执行,正如你所理解的,因为执行单元只有一个,所以实际的任务是在两个线程间不断的切换的。因为某个线程在做io操作需要等待的时候,就可以切换到另外一个线程去继续执行,但线程切换是有成本的,如果切换的代价太大,可能比等待io操作更浪费时间,就不值得切换了。超线程技术降低了线程切换的成本,让线程切换有利可图,就相当于提升了计算力。

感觉@brokkr 的例子很不恰当。

一个线程在cpu看来也就是一堆指令,正常情况可能就是cpu执行一个线程的指令队列,执行一会,然后被操作系统中断,切换执行另一个线程的指令,线程切换时会把当前寄存器之中的信息保存下来,用于恢复。

io这个例子,就是这种线程间的切换,并不是超线程。

至于超线程,就是同时让cpu执行两个线程的指令,让cpu去负责指令的发射,传递给计算单元执行。可以看一下这个回答<超线程技术在线程这个层面是否是真正的空间并行? - 张大力的回答 - 知乎 https://www.zhihu.com/questio...;,在硬件层面,有独立寄存器、页表等,让两个线程的指令同时执行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题