Linux 调度程序如何在多核处理器上调度进程?

rau*_*han 6 linux multithreading process

多核处理器利用线程级并行性,这意味着多个线程并行运行。假设一个进程只有一个线程,那么在这个进程的执行过程中,其他内核是否保持空闲?在 linux 系统中,调度器将进程和线程都视为一项任务。它在调度时不区分进程和线程。那么,这是否意味着不同的内核并行执行不同进程的不同线程?

当上下文切换发生时,是只发生在一个核心还是 CPU 的所有核心?

Cah*_*ahu 5

你是对的:从 Linux 调度程序的角度来看,进程和线程是相同的。这些任务根据调度程序的规则排队并等待轮到它们。

有一些调度规则,例如优先级或 CPU 关联性(以防止线程迁移到另一个核心并保留缓存数据)。

内核上可能会每隔固定时间(时间片)发生一次上下文切换,因为 CPU 会定期自动运行一些内核代码以允许抢占。根据调度程序的规则,任务可以运行多个时间片。当线程调用使其无法运行的函数(例如等待 IO)时,也可能发生上下文切换。

在某些情况下(如果不是全部的话),每个核心都有一个调度进程来完成所有这些工作。

关于超级用户也有类似的问题