一尘不染

linux是否调度进程或线程?

linux

在阅读了这样的问题之后,我有了一些疑问。请帮助理解。

调度涉及确定何时运行流程以及运行时间的多少。

  1. linux内核是否调度线程或进程?由于内核中的进程和线程没有区别,调度程序如何对待它们?

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

注意:问题1和问题2是相关的,可能看起来相同,但只是想弄清楚事情的进展方式,请在此处将它们都贴上。


阅读 428

收藏
2020-06-03

共1个答案

一尘不染

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

任务可能是:

  • 单线程进程(例如,由fork不带任何线程库的进程创建)
  • 多线程进程内的任何线程(包括其主线程),特别是Posix线程(pthread)
  • 核心任务,这是在内核土地内核和住宿内部开始(例如kworkernfsiodkjournaldkauditdkswapd等等…)

换句话说,多线程进程内部的线程的调度方式类似于非线程(即单线程)进程。

低级clone(2)
syscall创建用户级可调度任务(并且可用于创建fork-ed进程或用于实现线程库,如 pthread
)。除非您是低级线程库实现者,否则您不希望clone直接使用它。

AFAIK,对于多线程进程,内核(几乎)不是在调度进程,而是内部的每个线程(包括主线程)。

实际上,在调度中有一些线程组和相似性的概念,但是我不太了解它们

如今,处理器通常具有多个内核,并且每个内核都正在运行一个任务(在某个给定的瞬间),因此您确实有多个并行运行的任务。

CPU量子时间分配给任务,而不是分配给进程

2020-06-03