两个逻辑内核是并行还是并发执行,只有一个执行单元,是不是并发?
感觉@brokkr 的例子很不恰当。
一个线程在cpu看来也就是一堆指令,正常情况可能就是cpu执行一个线程的指令队列,执行一会,然后被操作系统中断,切换执行另一个线程的指令,线程切换时会把当前寄存器之中的信息保存下来,用于恢复。
io这个例子,就是这种线程间的切换,并不是超线程。
至于超线程,就是同时让cpu执行两个线程的指令,让cpu去负责指令的发射,传递给计算单元执行。可以看一下这个回答<超线程技术在线程这个层面是否是真正的空间并行? - 张大力的回答 - 知乎 https://www.zhihu.com/questio...;,在硬件层面,有独立寄存器、页表等,让两个线程的指令同时执行。
8 回答2.7k 阅读
2 回答5.2k 阅读✓ 已解决
5 回答1.3k 阅读
3 回答1.3k 阅读✓ 已解决
3 回答2.2k 阅读
1 回答838 阅读✓ 已解决
2 回答768 阅读✓ 已解决
从你给的链接的文章来说,超线程并不是真正的并发执行,正如你所理解的,因为执行单元只有一个,所以实际的任务是在两个线程间不断的切换的。因为某个线程在做io操作需要等待的时候,就可以切换到另外一个线程去继续执行,但线程切换是有成本的,如果切换的代价太大,可能比等待io操作更浪费时间,就不值得切换了。超线程技术降低了线程切换的成本,让线程切换有利可图,就相当于提升了计算力。