0

问题是关于多线程。假设我有 3 个线程,主线程、child1 和 child2。执行这些线程的进程是否按照它在一个线程上工作一小段时间,然后在另一个线程上工作的顺序运行它,依此类推并不断切换,或者线程运行时是否从未被线程停止过?过程?在某处我读到一个线程没有完成就停止了,然后另一个线程正在运行并停止,然后返回到 thread1 等等,但是如果任何线程都停止了,那将没有任何意义,因为多线程是它们都是并发的并且都同时运行,但是处理器是如何做到的呢?

这是在 .Net/C# 中。

4

3 回答 3

1

您描述的场景是在多核之前的旧时代运行线程的方式

操作系统根据优先级顺序调度线程,但现在......我想你至少有 2 个核心,其中 2 个线程可以同时运行,第 3 个线程将被调度并中断另一个线程!!!!

于 2013-07-09T17:39:48.377 回答
0

您描述的场景是正确的,除了每个处理器核心每次通常都会运行一个线程。

简化;如果 3 个线程在 4 个内核上处于活动状态,则它们将始终被允许运行,因为始终有一个可用的内核来运行它们,而如果 3 个线程在 2 个内核上处于活动状态,则只有两个线程可以随时运行,因此它们必须占用转身。

于 2013-07-09T17:49:25.217 回答
0

操作系统调度线程在可用的 CPU 内核(真实或虚拟)上执行。过去,大多数计算机都有单核 CPU,因此一次只能执行一个线程。现代 CPU 通常是 2、4 或 8 核系统。其中一些内核是虚拟的,例如英特尔的超线程 CPU,其虚拟内核数量是物理内核的两倍。

但是,线程几乎总是比可用的 CPU 内核多,因此操作系统将优先考虑系统上的所有线程,以便尽可能高效地运行它们。您的进程创建的线程可能会或可能不会在任何给定的时间跨度上真正并行运行,但您应该假设它们会。

于 2013-07-09T17:51:33.130 回答