进程是否按顺序运行线程?

时间:2013-07-09 17:32:59

标签: multithreading

问题在于多线程。假设我有3个主题,一个是child1,一个是child2。执行这些线程的进程是按照它在一个线程上工作很短时间的顺序运行它,然后在另一个线程上工作,然后继续并保持切换,或者线程是否正在运行而不会被处理?在某处,我读到线程在没有完成的情况下停止,然后另一个线程被处理并停止,然后返回到thread1,依此类推,但是如果任何线程被停止因为多线程的点是那样的话就没有任何意义它们都是并发的,并且都在同一时间运行,但处理器如何做到这一点?

这是在.Net / C#。

3 个答案:

答案 0 :(得分:1)

您描述的场景是IS在多核

之前在老年时运行线程的方式

OS调度线程顺序基于它们的优先级,但现在......我想你至少有2个核心,其中2个线程可以同时运行,第3个线程将调度并中断其中一个!!!!

答案 1 :(得分:0)

您正在描述的方案是正确的,除了每个每个处理器核时通常会运行一个线程。

简体;如果3个线程在4个核心上处于活动状态,它们将始终被允许运行,因为它们始终是可用核心来运行它们,而如果3个线程在2个核心上处于活动状态,则只有两个线程可以随时运行,因此它们都可以运行将不得不轮流。

答案 2 :(得分:0)

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

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