このページの本文へ

前へ 1 2 3 4 次へ

基礎から覚える 最新OSのアーキテクチャー 第8回

意味の違いがわかる? タスクとプロセスとスレッド

2011年12月01日 18時29分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

 プログラムから見ると、スレッドを準備して起動してやれば、あとはスレッド自身で処理を進めてくれる。しかもプロセスを切り替えるのと違って、仮想メモリーなどの割り当てた資源を切り替える必要はないので、スレッド切り替えは高速だ。そのためスレッドはかつて、「ライトウェイトプロセス」とも呼ばれていた。

 スレッドをなぜ「ライトウェイトプロセス」と呼ぶのかというと、かつてのUNIXが由来の話である。もともとUNIXではプロセスしかなく、並列処理を行なうためには、ひとつのプロセスから別のプロセスを作っていた。しかし、これには環境をコピーするコスト(メモリーと時間)がかかるため、コピーをせずに高速な起動が可能な軽量プロセスとしてスレッドが導入されたためである。Windowsはこれにならい、プロセスとスレッドを導入したわけだ。

 スレッドはスレッド制御用のAPIを使って、一時停止させたり、終了させることも可能だ。また複数のスレッドを実行させて、すべてのスレッドの処理が終わるまで待つといったことも可能だ。ただし、スレッドをどう実行するかはカーネル側で制御されており、親スレッドからは止めたり、再開させるといった程度の制御しかできない。またスレッド自身も、実行を続けるか、割り込みがかかるまで止まるといった程度しかできない。

 しかし実際には、もっと細かくスレッドの動作を制御したい場合がある。そのために用意されているのが、「ファイバ」と呼ばれる機能だ(図3)。

図3 スレッドとファイバの違い。それぞれ別個に動くスレッドと、どれを実行するか指示できるファイバ

 ファイバは自分自身で、「次にどのファイバを実行するのか」を指定できる。このようにすることで、どの処理をするのかを細かく制御できる。スレッドの切り替えと違うのは、ファイバはそれぞれの実行コンテキスト(CPUのレジスターなど)を持っているため、別のファイバに切り替えたあとで元のファイバに処理が戻ると、切り替えた直後の部分から処理を継続できる。

 ちなみに、なぜ「ファイバ」(繊維)と呼ぶのかと言うと、スレッドには「糸」という意味があるためだ。「糸よりも小さな実行単位」という意味で、ファイバと呼ぶようになったようだ。


 まとめると、「プロセス」はプログラムの実行イメージやCPU情報、管理情報を含んだ「プログラムの実行単位」のことだ。一方、「タスク」は「作業」「処理」といった意味合いで使われる言葉にすぎない。そして「スレッド」は、プロセス内に作られる並列動作可能な「処理の単位」である。違いがおわかりいただけただろうか?

前へ 1 2 3 4 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン