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