CPU核心的线程与任何软件的应用程序线程有什么区别?

时间:2018-01-29 18:11:30

标签: multithreading web-applications cpu-registers hyperthreading cpu-cores

我有一个支持多线程的Web应用程序,我们可以在不同的线程上同时运行async个任务。我明白那个线程是什么意思。

现在假设运行应用程序的服务器具有多个启用了超线程的核心CPU。

现在,我的应用程序应该如何利用这些线程。我错过了这两者之间是否有任何关系。

我从CPU的主题中理解的是

  

线程是一系列正在处理的命令,每个应用程序至少有一个线程,大多数都有多个。核心是在线程上工作的物理硬件。通常,处理器只能在每个核心的一个线程上工作,具有超线程的CPU可以在每个核心最多两个线程上工作。   对于具有超线程的处理器,核心中有额外的寄存器和执行单元,因此它可以存储两个线程的状态并对它们进行处理,通常是为了更改线程,你必须将寄存器清空到缓存中,然后将其写回主内存,然后用新值加载缓存并加载寄存器,上下文切换显着损害性能。

但是当你有太多的背景任务在运行时,他们如何利用有限数量的核心线程(即2到8个)。

PS:我已经检查了What is the difference between a process and a thread?而没有查找进程的定义。所以它不重复。

1 个答案:

答案 0 :(得分:1)

如果您在程序中使用多个核心,那么操作系统将安排哪些核心运行哪些线程并考虑许多因素,包括其他正在运行的进程,您的代码正在尝试做什么,以及更多。关于async任务,这些任务可能不一定在不同的线程或核心上运行,它们可能是不是即时的任务,因此一些调度程序可能决定开始做其他事情,直到有信号{ {1}}任务完成。它将根据您编写Web应用程序的语言和实现而有很大差异。