2013-12-19 49 views
3

我是否正确,如果你有例如四个CPU和四个线程,这些分配到每个CPU上?而当你有五个线程时,一个CPU必须一次处理两个线程?线程如何处理?

在此先感谢:)

+0

理论上,是的。在实践中,你可以有一个CPU拥有分配给它的所有线程,多个CPU拥有多个线程,其他CPU拥有多个线程或者其他任何组合。 –

+5

没有保证。你的操作系统可以随你的线程做任何事情。 –

+1

线程不一定建模并行:它们建模*逻辑*并发性,而不*实际*并发性。当你有多个线程时,你告诉操作系统你有同样的事情要做(逻辑上)。它可以接受这些指令并尝试通过将它们拆分到不同的CPU来运行它们。但是一些处理器也可以做这样的事情,如果一个操作需要10个周期才能完成,启动它并在其运行时从另一个线程执行操作(“超线程”)。或者在开始下一个工作之前,一个哑巴系统可以运行1个线程完成。 – IdeaHat

回答

2

唯一保证你得到的是,线程将独立运行彼此。调度是由操作系统完成的,操作系统通常会尝试使所有内核都处于繁忙状态,但由于计算机上的运行量远远超过程序,因此不能保证您的四个线程始终运行在四个内核上。

在Windows上,您可以将线程固定到处理器核心,但这既不是标准的也不是跨平台的,并不总是对您的程序有好处。

+1

*并且操作系统通常会尝试使所有内核忙碌*:取决于在“经济”模式下的笔记本电脑,仅仅通过几条指令即可唤醒内核将是浪费。 –