单核和多核上的线程执行

时间:2018-09-09 10:37:23

标签: java multithreading jvm

这是我在Oracle文档中看到的,并希望确认我的理解(source):

  

计算机系统通常具有许多活动的进程和线程。这个   即使在只有一个执行核心的系统中也是如此,并且   因此在任何给定时刻只有一个线程实际在执行。   单个内核的处理时间在进程之间共享,并且   通过称为时间分片的操作系统功能进行线程化。

这是否意味着在单核计算机中,给定时刻只能执行一个线程? 而且,这是否意味着在多核计算机上可以在给定的时刻执行多个线程?

1 个答案:

答案 0 :(得分:1)

  

这是否意味着在单核计算机中,给定时刻只能执行一个线程?

不,假设处理器没有执行CPU限制的工作,则可以轻松拥有比处理器更多的线程。例如,如果您有两个线程主要在等待IO(来自网络或本地存储),另一个线程正在消耗前两个线程获取的数据,那么您肯定可以在具有单个内核的计算机上运行该线程,并获得比一个线程。

  

而且,这是否意味着在多核计算机上可以在给定的时刻执行多个线程?

是的,只要您有足够的内存为每个内核分配堆栈,就可以在任意数量的内核上执行任意数量的线程。显然,如果每个线程都大量使用CPU,那么当线程数超过内核数时,它将停止高效运行。