我试图更好地了解应该在 n 个内核上运行多少线程。我知道这是一个复杂的问题,其中的答案取决于许多因素,例如有多少共享状态,以及每个线程有多少睡眠和等待资源。
为简化起见,假设我们有 2 个内核和一个进程,可以将其工作划分为没有共享状态的线程。假设每个线程只是在计算后执行计算,没有睡眠,也没有等待资源。在这种情况下,理想的线程数是 2 吗?
让我们把事情复杂一点,说线程必须执行某种磁盘 I/O。这如何改变我们的答案?我认为在这种情况下我们可以拥有超过 2 个内核。
或者假设他们不做任何睡眠或等待资源,而是有一些他们都可以访问的内存需要同步。这如何改变我们的答案?我认为在这种情况下,我们实际上可能更喜欢 1 个线程而不是 2 个线程,具体取决于需要多少同步。