我总是读到/听说上下文切换的成本很高。我最近开始阅读 Robert Love 的“Linux 内核开发”,并完成了“进程和进程调度”一章。这让我对不同进程和线程之间的上下文切换成本有了一些了解(因为线程被视为进程)。我想解决这个问题,真正了解上下文切换的成本,最好是粗略地了解指令数量和时间损失。
为了简单起见,我们假设一个单核处理器正在运行两个具有相同良好权重的进程(proc1 和 proc2)。另外,假设目标延迟为 20 毫秒,因此每个进程的调度时间为 10 毫秒。当context_switch发生时,我假设当context_switch发生时,proc1 被挂起。此时proc2也暂停了?那么这是否意味着活动进程是某个内核线程或进程?如果是这样的话,这是否意味着 proc1 和 proc2 都无法在 Targeted_latency 内获得 10 毫秒的运行时间?例如(数字仅用于演示):
+-----------20ms-----------+
|---proc1---|--|---proc2---|
^____9ms____^__^____9ms____^
|
2ms of kernel executing context_switch()
Run Code Online (Sandbox Code Playgroud)
如果发生这种情况,从一个进程到另一个进程的context_switch()最终是否会调用context_switch()两次?一次从内核线程进入proc1
,然后另一个从内核线程进入proc2
?