最大线程数和多线程

时间:2016-05-18 03:26:35

标签: multithreading cpu processor cpu-cores

我正在踩着多线程概念。

例如,我的处理器有2个内核(和超线程)每个内核2个线程,总共4个线程。那么这是否意味着我的CPU可以同时执行四个单独的指令?每个线程都能够成为多线程吗?

2 个答案:

答案 0 :(得分:4)

  

这是否意味着我的CPU可以同时执行四个单独的指令?每个线程都能够成为多线程吗?

简而言之,是的。

由于某些因素(例如流水线操作,CPU可能能够在单个时钟周期内通过不同的相位传递多个指令)以及时钟的频率,CPU在一个时钟周期内每相只能执行1条指令可能会非常快,但它一次只能执行1条指令。

作为示例,NOP是一个x86汇编指令,CPU将其解释为"此循环无操作"数百或数千(甚至更多)中的1条指令是从即使如此简单的事情执行的:

int main(void)
{
    while (1) { /* eat CPU */ }
    return 0;
}

CPU执行线程是一个正在执行一系列指令(一个指令线程)的程序,它与什么"应用程序"无关紧要。指令来自,CPU不知道高级概念(如应用程序),这是操作系统的功能。

因此,如果您的计算机具有2个(或4/8/128 /等)CPU共享相同的内存(缓存/ RAM),那么您可以拥有2个(或更多)CPU&#39 ; s可以在(字面上)完全相同的时间运行2(或更多)指令。请记住,这些是同时运行的机器指令(即软件的物理方面)。

操作系统级别线程有点不同。当CPU处理执行的物理方面时,OS处理逻辑方面。上面的代码分解为多条指令,并且在执行时,实际上可以运行在多个CPU上(在多CPU感知环境中),即使它是单个"线程" (在OS级别),OS调度何时运行下一个指令以及什么CPU(基于OS的线程调度策略,其在各种OS之间是不同的)。因此,上面的代码将占用每个给定"时间片的100%CPU使用率"在那个CPU上它正在运行。

这"切片" "时间" (也称为preemptive computing)是操作系统可以运行多个应用程序的原因#34;同时#34;它不是字面上 1 同时由于CPU一次只能处理1条指令,但是对于人类(几乎不能理解1秒的长度),它同时出现"同时#34;。

1)除了在多CPU设置的情况下,它可能在字面上是同一时间。

当运行应用程序时,内核(OS)实际上会产生一个单独的线程(内核线程)来运行应用程序,此外应用程序可以请求创建另一个外部线程(即产生另一个进程或分叉),或者通过调用操作系统(或编程语言)API来创建内部线程,该API实际调用生成并维护生成线程的上下文切换的低级内核例程,此外,任何创建的线程也能够调用相同的API可以产生其他单独的线程(因此一个线程能够成为"多线程")。

多线程(在应用程序和操作系统的意义上)不一定是可移植的,因此您可以学习Java或C#并使用他们的API(即Thread.Start或{{3} }),利用提供的实际OS API(即RunnableCreateThread以及大量其他并发函数)为设计决策打开了一扇不同的大门(即"做平台X支持线程库Y");在探索不同的API时,请记住一些事项。

我希望这有助于增加一些清晰度。

答案 1 :(得分:0)

我实际上在我的操作系统课程中研究了这个主题。

使用线程时,提高CPU绑定进程性能的经验法则是使用相同数量的线程作为内核,除非是超线程系统,在这种情况下,应该使用两倍的内核。可以得出的另一个经验法则是I / O绑定过程。这个规则是每个内核的线程数量翻两番,除了超线程系统的情况,每个内核的线程数量可以翻两番。