linux是安排进程还是线程?
读了这么多问题后,我有了一些疑问。请帮助理解 调度包括决定何时运行进程以及运行时间linux是安排进程还是线程?,linux,multithreading,process,kernel,scheduling,Linux,Multithreading,Process,Kernel,Scheduling,读了这么多问题后,我有了一些疑问。请帮助理解 调度包括决定何时运行进程以及运行时间 linux内核是调度线程还是进程?由于进程和线程在内核中没有区别,调度程序如何处理它们 如何确定每个线程的数量? A.如果为一个进程决定了一个时间量(比如说100us),那么在该进程的所有线程之间共享这个时间量是吗?或 B每个线程的数量由调度程序决定 注意:问题1和问题2是相关的,看起来可能相同,但只是想弄清楚事情是如何运作的。请将它们发布在此处。Linux调度程序(至少在最新的Linux内核上,例如3.0)正在
- 单线程进程(例如,由
创建,没有任何线程库)fork
- 多线程进程(包括其主线程)中的任何线程,特别是Posix线程(pthreads)
- 内核任务,这些任务在内核内部启动并留在内核中(例如,
,kworker
,nfsiod
,kjournald
,kauditd
等)kswapd
fork
-ed进程或用于实现线程库,如pthread)。除非您是低级线程库实现者,否则您不想直接使用clone
AFAIK,对于多线程进程,内核(几乎)不是在调度进程,而是内部的每个线程(包括主线程)
实际上,有一些线程组和调度的概念,但我不太了解它们
现在,处理器通常有多个核心,每个核心都在运行一个任务(在某个给定的时刻),因此您确实有多个任务并行运行
CPU量子时间分配给任务,而不是进程。POSIX线程规范的NPTL实现将线程视为内核中的一个不同进程,具有唯一的
task_结构(因此也有pid
),因此每个线程本身都是可调度的。因此,每个线程都有自己的时间片,并像上面提到的进程一样进行调度
另外,目前Linux scheduler不仅能够调度单个任务(一个简单的进程),还能够调度多组进程甚至用户(所有进程,都属于一个用户)作为一个整体。这允许实现组调度,其中CPU时间首先在进程组之间分配,然后在这些组中分配给单个线程
Linux线程不直接在进程或线程上操作,而是与可调度实体一起工作。由struct sched_entity
表示。
公平地说,每个进程/线程都是一个sched_实体
,但反过来可能不是这样
要了解详细的进程调度,请参阅人们说Linux调度进程,而windows调度线程。这是什么意思?根据这个答案,看起来Linux调度任务(可以被视为线程),windows也这样做。还是我遗漏了什么?@prasannatsm:我不知道Linux,但Windows肯定只调度线程。在任何调度操作期间,Windows都会从具有处理器关联的所有正在运行的线程列表中选择“下一个线程”,并将上下文切换到该线程。除了执行CR3切换之外,调度器不会为了选择在内核上运行的下一个线程而查看进程。