gpt4 book ai didi

linux - linux调度进程还是线程?

转载 作者:IT王子 更新时间:2023-10-29 00:16:46 26 4
gpt4 key购买 nike

看完this所以问题我有一些疑问。请帮助理解。

调度涉及决定何时运行进程以及运行多长时间。

  1. linux 内核调度线程还是进程?由于进程和线程在内核内部没有区别,调度程序如何对待它们?

  2. 每个线程的数量是如何决定的? 一个。如果为一个进程决定了一个时间量(比如 100us),那么该进程的所有线程之间是否共享?或者 b.每个线程的时间片由调度程序决定?

注意:问题 1 和 2 是相关的,可能看起来相同,但只是想弄清楚事情是如何工作的,将它们都发布在这里。

最佳答案

Linux 调度程序(在最新的 Linux 内核上,例如至少 3.0)正在调度可调度任务或只是任务

任务可能是:

  • 单线程进程(例如由 fork 创建,没有任何线程库)
  • 多线程进程中的任何线程(包括其主线程),特别是 Posix 线程 (pthreads)
  • 内核任务,在内核内部启动并留在内核空间(例如 kworkernfsiodkjournald kauditd, kswapd 等等...)

换句话说,多线程进程中的线程像非线程一样被调度——即单线程进程。

低级clone(2) syscall 创建用户态可调度任务(并且可以用于创建 fork-ed 进程或用于线程库的实现,如 pthread)。除非你是底层线程库实现者,否则你不会想直接使用clone

据我所知,对于多线程进程,内核(几乎)不是在调度进程,而是在调度内部的每个单独线程(包括主线程)。

实际上,有一些线程组的概念和affinity在日程安排中,但我不太了解他们

现在,处理器通常有多个核心,每个核心都在运行一个任务(在某个给定的时刻),因此您确实有多个任务并行运行。

CPU 量子时间是给任务的,不是给进程的

关于linux - linux调度进程还是线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15601155/

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