在阅读了这样的问题之后,我有了一些疑问。请帮助理解。
调度涉及确定何时运行流程以及运行时间的多少。
linux内核是否调度线程或进程?由于内核中的进程和线程没有区别,调度程序如何对待它们?
如何确定每个线程的数量?一个。如果为一个进程确定了一个时间量(例如100us),是在该进程的所有线程之间共享该时间吗?或b。每个线程的数量由调度程序决定吗?
注意:问题1和问题2是相关的,可能看起来相同,但只是想弄清楚事情的进展方式,请在此处将它们都贴上。
Linux调度程序(至少在最新的Linux内核(例如3.0)上)正在调度 可调度任务 或仅 调度 任务 。
任务可能是:
fork
kworker
nfsiod
kjournald
kauditd
kswapd
换句话说,多线程进程内部的线程的调度方式类似于非线程(即单线程)进程。
低级clone(2) syscall创建用户级可调度任务(并且可用于创建fork-ed进程或用于实现线程库,如 pthread )。除非您是低级线程库实现者,否则您不希望clone直接使用它。
clone
AFAIK,对于多线程进程,内核(几乎)不是在调度进程,而是内部的每个线程(包括主线程)。
实际上,在调度中有一些线程组和相似性的概念,但是我不太了解它们
如今,处理器通常具有多个内核,并且每个内核都正在运行一个任务(在某个给定的瞬间),因此您确实有多个并行运行的任务。
CPU量子时间分配给任务,而不是分配给进程