我试图了解Linux如何处理进程调度和线程调度。我读到Linux可以安排进程和线程。
Linux有线程调度程序和进程调度程序吗?如果是,他们如何合作?
Linux kernel scheduler实际上是调度任务,这些是线程或(单线程)进程。
因此,在调度程序的上下文中,任务(内核中的task_struct
)是正在调度的东西,可以是一些内核线程,如kworker
或kswapd
,一些多线程进程的用户线程(如firefox
),或者单线程进程的单线程(如bash
),用单线程进程标识。
process是一个非空的有限集(有时是单身)的threads共享相同的virtual address space(和其他东西,如file descriptors,working directory等等......)。另见credentials(7),capabilities(7)等....
Linux上的线程是内核线程(在由内核管理的意义上,它也创建自己的线程),由Linux特定的clone系统调用(也可用于在Linux上创建进程)创建。 pthread_create函数可能是在clone
和NPTL(在Linux上集成了NPTL)和Gnu Libc上的musl-libc之上构建的(在Linux上)。
Linux下的内核线程实现为共享资源的进程。调度程序不区分线程和进程
有关更多信息,请参见此处:http://www.linuxquestions.org/linux/articles/Technical/Linux_Kernel_Thread
在LINUX下没有线程的概念,使LINUX POSIX投诉线程只是另一个进程。当你尝试获取进程id时,它将在任何线程下显示领导进程id。有关更多详细信息,请参阅本书“了解LINUX内核”.Hope