可以在多核处理器中并行运行多个线程(而不是上下文切换)



我一直在读到,如果有2个线程和2个核心,那么每个线程如果分配给不同的核心,它们将能够并发或完全同时运行。让我们考虑两个线程T1、T2,每个线程的运行时间为10秒。

让我们先考虑单核:

如果这两个线程在单个核心中运行,它们将通过上下文切换来运行,这当然不是并行执行,而是顺序执行,线程调度程序将选择一个线程并分配一个插槽来运行。因此,在单核中,T1不可能在10:00:00运行,T2也不可能在10:00同时运行。所以这里两个线程的运行时间都是20秒

现在考虑多核心:

假设T1在上午10:00:00开始在核心1上运行那么,T2也有可能在上午10:00:00开始在核心2上运行吗?

如果是,这只是意味着这里的运行时间减半——所以在多核上运行两个线程所花费的总时间是10秒?我对此深表怀疑,但这是我正在阅读的内容,请澄清

是的,你是对的,多个核心可以同时运行线程,即如果我们有多个核心,则可以并行执行多个线程。因此,在您的情况下,T1和T2可能会在完全相同的时间运行,这取决于调度程序。

然而,在单核中,因为它一次只能运行单个线程,所以它必须停止处理第一个线程以给第二个线程机会,在给线程T2机会之前,它保存T1的状态并切换到T2,这实际上是上下文切换。

您可以通过运行一个启动2个或更多线程的简单程序来检查这一点,并查看它们是否打印出完全相似的时间戳。

最新更新