看完this所以问题我有一些疑问。请帮助理解。
调度涉及决定何时运行进程以及运行多长时间。
linux 内核调度线程还是进程?由于进程和线程在内核内部没有区别,调度程序如何对待它们?
每个线程的数量是如何决定的? 一个。如果为一个进程决定了一个时间量(比如 100us),那么该进程的所有线程之间是否共享?或者 b.每个线程的时间片由调度程序决定?
注意:问题 1 和 2 是相关的,可能看起来相同,但只是想弄清楚事情是如何工作的,将它们都发布在这里。
最佳答案
Linux 调度程序(在最新的 Linux 内核上,例如至少 3.0)正在调度可调度任务或只是任务。
任务可能是:
- 单线程进程(例如由
fork
创建,没有任何线程库) - 多线程进程中的任何线程(包括其主线程),特别是 Posix 线程 (pthreads)
- 内核任务,在内核内部启动并留在内核空间(例如
kworker
、nfsiod
、kjournald
、kauditd
,kswapd
等等...)
换句话说,多线程进程中的线程像非线程一样被调度——即单线程进程。
低级clone(2) syscall 创建用户态可调度任务(并且可以用于创建 fork
-ed 进程或用于线程库的实现,如 pthread)。除非你是底层线程库实现者,否则你不会想直接使用clone
。
据我所知,对于多线程进程,内核(几乎)不是在调度进程,而是在调度内部的每个单独线程(包括主线程)。
实际上,有一些线程组的概念和affinity在日程安排中,但我不太了解他们
现在,处理器通常有多个核心,每个核心都在运行一个任务(在某个给定的时刻),因此您确实有多个任务并行运行。
CPU 量子时间是给任务的,不是给进程的
关于linux - linux调度进程还是线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15601155/