我对Linux上的pthread实现提出了一个问题。
假设一个进程有5个线程。 现在,调度程序如何看待这些线程(或根本看不到)。 例如调用调度程序时,它是否只调度主进程, 然后是主要流程的责任,在每个线程之间进行调度。
或者是另一种方式,调度程序将每个线程调度为一个单独的进程。
答案 0 :(得分:7)
对于现代Linux(NPTL pthread实现),调度程序调度线程,线程被认为是“轻量级进程”。 pthread_create是根据clone
系统调用实现的。
答案 1 :(得分:2)
Linux将每个线程调度为具有作为PTHREAD_SCOPE_SYSTEM范围的进程。 nptl实现可以使用多个CPU。
答案 2 :(得分:1)
正如Logan所说,每个主题都是独立安排的。
但是,如果您希望可以使用Linux进程控制组来安排线程组。
流程控制组使调度效率低一些,但可以更加公平。
一种非常流行的用法是将每个TTY创建的所有进程和线程放入每个TTY的控制组中。这导致所有用户的图形应用程序被调度在与他在终端窗口中启动的24线程内核编译相同的级别。图形应用程序获得50%,编译获得50%。如果他打开另一个终端窗口并开始用另外24个线程编译glibc,它将转换为33%的桌面应用程序,33%的内核编译和33%的glibc编译。