多核处理器利用线程级并行,这意味着多个线程并行运行。假设一个进程只有一个线程,那么其他核心在执行这个进程时是否保持空闲状态?在linux系统中,调度程序将进程和线程视为一项任务。它在调度时不区分进程和线程。那么,这是否意味着不同的内核并行执行不同进程的不同线程?
当发生上下文切换时,这是仅针对一个内核还是针对cpu的所有内核发生的?
答案 0 :(得分:2)
你是对的:从Linux调度程序的角度来看,进程和线程是相同的。这些任务按照调度程序的规则排队等待轮到他们。
存在诸如优先级或CPU亲和性之类的调度规则(以防止线程迁移到另一个核心并保留缓存数据)。
上下文切换可能在每个固定时间(时间片)上发生在核心上,因为CPU会定期自动运行某些内核代码以允许抢占。根据调度程序的规则,可以为多个时间片运行任务。当线程调用使其不可运行的函数时(例如,等待IO),也可能发生上下文切换。
在某些情况下,如果不是全部,每个核心都有一个调度过程可以完成所有这些。
上也有类似的问题