メモ

シリアル番号 表題 日付

702

スレッドとプロセス

2003/04/07

1つ以上のスレッドとそのスレッドが動作する為の環境をまとめてプロセスという。Windows上では1つのEXEが1つのプロセスにあたる。プロセスは環境であり、実行体ではない。あくまで実行体はスレッドとなる。

スレッドを作成すれば、処理の流れを単純化することが可能である。1つのスレッドの 中で2つ以上の処理を平行して行う事が難しい事は、プログラムを作成した者であれば、想像できるかもしれない。しかし、スレッドを作成すれば素直に実装出来てしまう。つまり上から下に流れる単純な処理をスレッドとして記述すれば良いのである。

プロセスを2つ起動すればスレッドを2つ起動する事になる。何故プロセスを使用せずにスレッドを使用するのか?いくつか理由がある。

 ・スレッドはプロセスに比べ、起動と終了が格段に速い。
 ・プロセス間通信よりスレッド間通信は簡単で高速である。
 ・プロセスに比べメモリ消費量が少ない。

プロセスの起動はスレッドに比べて多くの処理が必要である。DLLをロードしたりグローバル変数を初期化したり、その他色々と処理が走るのでオーバーヘッドは大きい。それに比べスレッドは、スレッドローカルの変数の初期化とランタイムライブラリ用の 初期化が走るくらいでプロセスの起動に比べれば格段に速い。

プロセス間の通信は何かと制約がある。変数などのメモリ上の情報を受け渡しする事は基本的には出来ない。

C/C++でのプログラム作成を前提にすれば、同じプロセス内であればグローバル変数は どこからでもアクセス出来る。よって同じプロセス内で実行されているスレッドから参照する事が可能である。

マルチスレッドを使用すれば、バックグラウンドでファイルをダウンロードしながら 画面にアニメーションを描画し続けたり、時間のかかる処理をバックグラウンドでさせるなど、様々な利用が可能になる。

また、Windowsのサービスプログラムを利用して何らかのサーバプログラムを作成 しようとすれば、恐らくマルチスレッドを利用する事になるだろう。マルチスレッドを 利用しない場合のサーバプログラムは複数クライアントに対して同時に処理が出来ない事により、クライアントから見て、レスポンスの悪いサーバになってしまう。


トップ ページヘ