タグ

Rubyとcontext switchに関するyassのブックマーク (1)

  • 第19章 スレッド

    rubyスレッド スレッドは「みんな一斉に動く」というのが建前だが、実際には少しの時間ず つ順番に動いているわけだ。厳密に言えばマルチCPUのマシンでそれなりに工 夫すれば同時に二つ動いたりもできるが、それでもCPUの数以上のスレッドが あればやはり順番に動かなければならない。 つまりスレッドを作り出すためにはどこかで誰かがスレッドを切り替えてやら ないといけないわけだが、その手法には大きく分けて二種類ある。 カーネルレベルスレッドと ユーザレベルスレッドだ。これはどちらも読んで字の如く、ス レッドというものをカーネルで作るかユーザレベルで作るかという違いである。 カーネルレベルならマルチCPUを生かして複数のスレッドを同時に動かしたり もできる。 ではrubyのスレッドはどうなのかと言えば、これはユーザレベルスレッドで ある。 そして(それゆえ)同時に動けるスレッドは厳密にただ一つと制限

    yass
    yass 2014/03/09
    " そこでrubyのスレッドはどうかと言うと、Rubyレベルではプリエンプティブで、 Cレベルではノンプリエンプティブである。つまりCのコードを書いているときは スレッドが切り替わるタイミングをほぼ確実に特定できる。"
  • 1