CPU和线程之间有什么关系吗?

时间:2009-08-12 07:26:14

标签: java multithreading cpu

如果有,那是什么关系?

5 个答案:

答案 0 :(得分:12)

将CPU视为一个人,将线程视为一个人必须执行的单个任务。

例如,如果一个人试图洗碗,准备早餐,把衣服放在孩子身上,并确保猫不吃狗粮,那个人必须在两个任务之间来回切换,为了在所有任务看来同时取得一些进展。

但那个人一次只能做一件事。

重温2013年:请注意,上述情况不一定如此。首先,单个“处理器”现在有多个核心,每个核心都可以通过管道同时做多个事情,而不是。这是一个复杂得多的世界,而不仅仅是“一个CPU一次只能做一件事”。

答案 1 :(得分:2)

单个CPU(核心)一次只能运行一个线程。

如果你有比CPU更多的线程,它们将使用某种时间切片算法进行调度。

答案 2 :(得分:2)

一个CPU可以一次运行一个线程,这就是为什么当你创建一个多线程应用程序时,可以利用双核或多核的概念来对你的程序单元进行并行处理。

答案 3 :(得分:1)

线程是分配给CPU核心的工作单元。

在任何给定时刻,任何线程都被暂停(未运行)或仅在一个核心上运行。每个核心都是空闲的(没有运行任何线程)或者只运行一个线程。

将线程分配给核心是操作系统调度程序作业。

答案 4 :(得分:1)

根据您的系统架构,可能存在多种关系:

  • 对于单处理器的情况,关系是1:N(其中N是线程数)。一切都将在单一处理器上运行
  • 对于多处理器/多核/超线程情况,关系大约是P:N(其中P是处理器的数量),但是,线程exectution变成'多维'调度问题。

您的操作系统的线程调度程序将根据运行时特征(使用的cpu周期,阻塞),用户首选项(关联,服务于活动窗口的线程)和其他属性,努力在可用处理单元之间分配线程

例如,如果您有1个密集的计算线程和10个具有大量等待的I / O线程,则OS调度程序很可能将T1分配给P1,将T2-T11分配给P2,并关闭其余内核以获取能量保存和缓存重新分配以支持P1。 T1将成为其使用的整个核心,并且不会被T2-T11抢占。