linux - Linux如何处理线程和进程调度

标签 linux multithreading process scheduling

我正在尝试了解 Linux 如何处理进程调度和线程调度。我读到 Linux 可以调度进程和线程。

Linux 有线程调度器和进程调度器吗?如果是,他们是如何合作的?

最佳答案

Linux kernel scheduler实际上是调度任务,这些任务要么是线程,要么是(单线程)进程。

所以一个任务(内核中的一个task_struct),在调度程序的上下文中,是被调度的东西,并且可以是一些内核线程,例如kworkerkswapd,多线程进程的一些用户线程(例如firefox),或单线程进程(如bash)的单线程,用该单线程进程标识。

A processthreads 的非空有限集(有时是单例)同享virtual address space (以及其他类似 file descriptorsworking directory 等的东西)。另见 credentials(7) , capabilities(7)等等……

Linux 上的线程是内核线程(在由内核管理的意义上,它也创建自己的线程),由 Linux 特定的 clone 创建。系统调用(也可用于在 Linux 上创建进程)。 pthread_create函数可能是(在 Linux 上)在 clone 上构建的 NPTLGnu Libc (在 Linux 上集成了 NPTL)和 musl-libc .

关于linux - Linux如何处理线程和进程调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8463741/

相关文章:

Java超时一组指令

python - 如何知道正在运行的脚本是否死亡?

linux - shell 脚本 - 当条件检查范围失败时

linux - NTLM 身份验证无效字符

Javascript:如何编写将异步执行的函数?

java - 关闭进程以运行时 exec() 开始;

c - 了解进程的执行环境

linux - 从单个用户导出时在所有 shell 中重复的环境变量

linux - 如何使用 SystemTap 在 VFS 上探测文件打开和关闭

java - 从单个线程填充 ConcurrentHashMap,然后从多个线程读取而没有任何竞争条件?