一尘不染

Linux-线程和进程调度优先级

linux

如果我们在Linux上使用默认调度策略创建pthreads(pthread_create)或进程(fork),那么调度程序在调度进程和线程时会优先处理优先级相同的进程和线程吗?

假设有一个进程P1有一个线程,有进程P2有2个线程T1 T2

可以说只有一个核心..调度将是P1 T1 P1 T2 P1 T1 P1 T2

要么

P1 T1 T2 P1 T1 T2


阅读 342

收藏
2020-06-07

共1个答案

一尘不染

Linux不再计划任何进程。

在内核中, 线程 是经过调度的。现在,过程的概念是一种人工构造,主要由内核外部的事物看到。显然,内核必须知道如何将线程捆绑在一起,而 不是
出于调度目的。

基本上,内核维护着很多线程,并且每个线程都有一个线程组领导者,这在外部被视为进程。线程具有线程ID和线程组ID-
与PID和PPID(进程ID和父进程ID)之间的关系非常相似。

创建常规 线程时, 内核会为其提供一个全新的线程ID,但其线程组ID设置为与创建它的线程的组ID相同。这样,它看起来像是流程中通往外部世界的线程。

当你 叉, 内核赋予它一个全新的线程ID和设置它的线程组ID相同的值作为其线程ID。这样,对于外部世界来说,这似乎是一个过程。

大多数报告进程的非内核实用程序实际上只是在线程ID与线程组ID相同的线程上报告。

其他方法也有一些细微之处,可能太复杂了,无法在此处介绍。我上面写的是(希望)一篇不错的中级论文。

现在,对于您的特定问题,因为P1只有一个线程(没有P1T2),所以不会出现这种情况。

Withing内核,线程P1T1P2T1P2T2和,假设他们有相同的调度属性和行为相同的(一),这是他们将怎样安排。


(a):显然,如果线程开始在I / O上阻塞(内核在I /
O可用之前不会调度它们)或提早释放其时间量(内核可能会优先考虑优先发挥其性能),则会发生变化。但是他们却表现不一样。

2020-06-07