机器上的线程数和ThreadPool线程数

问题描述

我是线程概念的新手。我已经读到机器的线程数取决于机器的内核数,即如果一台机器有2个内核,它将有4个线程,比8个线程多4个内核,依此类推。 我的理解正确吗,机器中的线程总数仅取决于内核数?如果是的话,如果我们谈论.net框架中的线程池,那么一个线程池是否可以有超过16个线程(对于8核计算机)?

解决方法

即使在1个核心CPU的情况下也可以创建线程,即 n (n> 1)个线程只能在1个核心CPU上运行(这是以前的做法)天)。

在多线程中,经常发生的情况是线程彼此并发,它们争夺一种资源,但这是在很短的时间内完成的,看起来彼此之间实际上平行。 CPU切换以纳秒或毫秒为单位。

线程 可以在真正的并行模式下运行,但这意味着,至少应有2个独立的CPU内核可供您使用。再说一遍:何时何地运行的调度取决于CPU Scheduling in Operating System

您应该了解CPU执行的是裸露的二进制指令,并且仅此而已。因此,当应用程序加载到内存中时,其线程仅代表一堆机器代码指令,它们可以逐片地执行 ,特别是在调度时,有些停顿,或者只是在平行下。这一切(再次)取决于操作系统和CPU的设计。

如上所述,通常,多个线程可能在一个内核上运行,并且CPU调度将为每个线程分配相应的时间片,相应地,线程将相互竞争一个内核。在这种情况下,CPU 从执行一个线程中的部分指令跳转到执行其他线程中的另一部分,然后继续执行,直到这些线程处于活动状态为止。

如果您的CPU有多个内核,则可以实现真正的并行性,但您[几乎]无法控制它,操作系统和CPU可以做到。

相反,另请参见how single thread may be running on different cores。如上所述,某些指令的执行是由CPU和OS安排的。