gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:52:04 26 4
gpt4 key购买 nike

如果我们在 linux 上使用默认调度策略创建 pthreads (pthread_create) 或进程 (fork),调度程序在调度它们时会以相同的优先级对待进程和线程吗?

假设进程 P1 有一个线程并使用 2 个线程 T1 T2 处理 P2

假设只有一个核心..调度会是P1 T1 P1 T2 P1 T1 P1 T2

P1 T1 T2 P1 T1 T2

最佳答案

Linux 根本不再调度进程。

在内核中,线程 是有计划的。进程的概念现在是一种人工构造,主要由内核之外的事物看到。显然,内核必须知道线程是如何绑定(bind)在一起的,但不是出于调度目的。

基本上,内核维护着一大堆线程,每个线程都有一个线程组领导,也就是外界所看到的进程。一个线程有一个线程 ID 和一个线程组 ID - 这很像 PID 和 PPID(进程 ID 和父进程 ID)之间的关系。

当您创建一个常规线程时,内核会为其提供一个全新的线程 ID,但其线程组 ID 设置为与创建它的线程的组 ID 相同。这样,它看起来就像是进程中的一个线程,对外界来说。

当您fork 时, 内核会为它提供一个全新的线程 ID,并将其线程组 ID 设置为与其线程 ID 相同的值。这样,它在外界看来就像一个过程。

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

其他方法有些微妙之处,可能过于复杂,无法在此处进行介绍。我上面写的是(希望)一篇很好的中等水平的论文。

现在,对于您的具体问题,这两种情况都不是,因为 P1 只有一个线程(没有 P1T2)。

对于内核,线程是 P1T1P2T1P2T2,并且假设它们具有相同的调度属性并且表现相同 < sup>(a),这就是他们的安排方式。


另见:

获取更多信息。


(a):显然,如果线程开始阻塞 I/O(内核在 I/O 可用之前不会调度它们)或提早释放它们的时间份额(内核可能会提高他们的优先级作为对玩得很好的奖励)但他们的行为却不一样。

关于Linux - 线程和进程调度优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11998974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com