⭐️Linux: コンテキストスイッチ

  • 論理CPU上でプロセスが切り替わること

例えば、以下のようなプロセス0で動作するコードがある場合、

<!-- プロセス0で動作 -->
func sample():
    foo();
    bar();

fooの実行直後にbarが必ずしも動くとは限らない。

fooの実行直後にコンテキストスイッチが発生してCPUが実行するプロセスが切り替わった場合、fooの実行後、少し時間を置いてから(再度コンテキストスイッチが発生してプロセス0に切り替わったタイミングで)barが実行される。

論理CPU上の実行の流れ(時間は右方向)

  ┌─ プロセス0 ─┐         ┌─ 別プロセス ─┐        ┌─ プロセス0 ─┐
  │  foo() 実行 │         │  ... 実行中 ... │        │  bar() 実行 │
  └────────────┘         └───────────────┘        └────────────┘
                ▲                          ▲
                │                          │
         コンテキストスイッチ        コンテキストスイッチ
         (P0 → 別プロセス)         (別プロセス → P0)
                └──────── この間、P0 は待たされる ────────┘

・foo() の直後に必ず bar() が走るとは限らない
・切り替わった隙に「時間差」が生まれる

処理に時間がかかった場合に、「コンテキストスイッチが発生したかもしれない」という視点を持つのが大切。