違いを解説君

あるゆる物事の"違い"をわかりやすく解説する情報マガジン

CPU

ITの違い

プロセスとスレッドの違いをわかりやすく解説!意味や定義をチェック

最近のCPUは、マルチコアが当たり前になってきました。

マルチコアと言うと、

並列処理が可能なCPU

のことですよね。

並列処理を実現するためには、プログラムにも『マルチプロセス』や『マルチスレッド』の仕組みが必要になります。

ところで、あなたは『プロセス』と『スレッド』の違いを知っていますか?

 

はなこ
ねえ、『マルチプロセス』とか『マルチスレッド』って言葉をよく聞くけど、『プロセス』と『スレッド』は違うものなの?
うん、違うものだということは聞いたことがあるよ。

でも、何が違うのか、僕もよく知らないんだ。

たろう
はなこ
『プロセス』と『スレッド』の違いについて、調べてみたいわね。

 

今回は、『プロセス』と『スレッド』の意味や定義をチェックし、その違いについて解説します。

スポンサーリンク

『プロセス』と『スレッド』の意味や定義

まずは、『プロセス』や『スレッド』の意味や定義をチェックしましょう。

『プロセス』とは?

プログラムが動作している時のメモリ上にある実体

を表します。

簡単に言えば、

『プロセス』=『プログラム』

となります。

 

例えば、Windows上でExcelを起動したとき、Excelというプロセスが一個、メモリ上に作られます。

プロセス内では、データを保持するためにメモリを管理したり、ファイルを読み書きするためにディスクへアクセスします。

当然、プログラムを実行するために、CPU上で様々な処理が行われます。

 

『マルチプロセス』とは、『プロセス』が複数ある状態を指します。

Excelの他にメモ帳を開けば、メモ帳用の『プロセス』がExcel用の『プロセス』とは別に作られます。

それぞれの『プロセス』において、管理するメモリやディスクへのアクセスは独立しています。

例えば、Excel用に確保されたメモリに対して、『メモ帳』がアクセスすることはありません。

 

『スレッド』とは?

『プロセス』の中で実行される処理の単位

を表します。

つまり、

『スレッド』は『プロセス』の中に含まれる

ということですね。

『シングルスレッド』の場合、『スレッド』=『プロセス』と考えることができます。

『マルチスレッド』では、『プロセス』の中で複数の『スレッド』が実行されています。

それぞれの『スレッド』に別々のコアが割り当てられると、並列で処理することができるようになります。

よって、『シングルスレッド』に比べて処理が速くなるということですね。

 

はなこ
『プロセス』はプログラムを実行した時に作られて、『スレッド』は『プロセス』の中で作られると考えればいいのかしら?
それぞれの違いについて、もう少し掘り下げてみたいな。
たろう

 

『プロセス』と『スレッド』の違い

プロセス

プロセス

『プロセス』と『スレッド』の主な違いは次のようになります。

『プロセス』と『スレッド』の違い

  • 『プロセス』は各々が独立して動作するが、『スレッド』はリソースを共有して動作する。
  • 『スレッド』は『プロセス』内で生成される。
  • 『マルチプロセス』は必須であるが、『マルチスレッド』は必須ではない。

 

リソースの扱い

ひとつの『プロセス』は、その中でメモリなどのリソースを他の『プロセス』とは独立して確保します。

2つの『プロセス』の間でメモリなどを共有することはありません。

例えば、『メモ帳』を2つ開いたとき、それぞれは同じ『メモ帳』というアプリですが、プロセスとしては別々なので、メモリもそれぞれで確保されます。

それに対して、

『スレッド』ではリソースは共有されます。

同じメモリを共有して使うので、その分リソースが小さくなるというメリットがあります。

しかし、それによる弊害があります。

1番めの『スレッド』がメモリのある部分を0から1に書き換えたとします。

その後、2番めの『スレッド』が同じ場所を1から2に書き換えると何が起こるでしょうか?

1番目の『スレッド』は、書き換えた場所が1であると思って処理を行っています。

しかし、実際には2番めの『スレッド』によって2に書き換えられているので、意図した値になっていないわけですね。

これにより、思わぬ障害が発生する場合があります。

なので、それぞれの『スレッド』がメモリにアクセスする時に "使うけどいいですか" とお伺いをたてる必要があるのです。

これを『排他制御』といいます。

『マルチスレッド』を実現するためには、この『排他制御』が重要になります。

 

『プロセス』内の『スレッド』

前に書いた通り、

『スレッド』は、『プロセス』の中で生成されます。

『スレッド』の生成はプログラムに記述することで実現できます。

『プロセス』は、プログラム起動時に『OS(オペレーティング・システム)』が生成します。

『OS』とは、WindowsやLinuxのことですね。

プログラムが起動すると、『OS』がそのプログラムに必要なメモリを与え、CPUで処理されるように実行する時間を分け与えます。

つまり、『プロセス』は『OS』が管理しているということですね。

 

『マルチプロセス』と『マルチスレッド』

遠い昔の『OS』では『シングルプロセス』でした。

しかし現在の『OS』は『マルチプロセス』が可能になっています。

なので、

『マルチプロセス』は、必須の機能である

ことになりますね。

それに対して

『マルチスレッド』は必須ではありません。

もちろん、利用すれば処理を速くすることができるようになります。

巨大データによる機械学習など、たくさんの処理を行わなければならない場合には『マルチスレッド』が役に立つでしょう。

 

はなこ
なかなか難しいわね。
『スレッド』はリソースを共有するというのは大きな違いだね。

だから『排他制御』が重要になるわけだね。

たろう

スポンサーリンク

まとめ

今回の違いのポイントについて、まとめていきましょう。

ポイント

  • 『プロセス』とは、プログラムが動作している時のメモリ上にある実体のことである。
  • 『スレッド』とは、『プロセス』の中で実行される処理の単位のことである。
  • 『プロセス』は、各々が独立して動作するが、『スレッド』はリソースを共有して動作する。
  • 『スレッド』は『プロセス』内で生成される。
  • 『マルチプロセス』は必須であるが、『マルチスレッド』は必須ではない。

『マルチスレッド』プログラミングは、JavaやC#などの言語の出現によって、容易に実現できるようになりました。

これを機会に『マルチスレッド』にチャレンジしてみてはいかがでしょうか。

関連記事

-ITの違い

Copyright© 違いを解説君 , 2020 All Rights Reserved.