プロセスとスレッド

気になってい他ことなので、メモがてら書きます。間違っているところもあるかもしれません。

意味

プロセス

プロセスとは、処理のことである。
コンピュータプログラムは命令の受動的集合体である。プロセスはそれら命令の実際の実行である。

例えでいうと、
chromeやターミナルを開くことや lsコマンドやwcコマンドを叩くこと。
それぞれが一つのプロセス (プログラム)

スレッド

スレッドとは、CPU利用の単位。
CPUは基本的に1つのコアで1つの処理しか実行することはできません。

例えでいうと、

ターミナルでlsコマンドを叩くと 「ファイルが読み込まれる」、「ターミナルの幅を計測する」、「最大文字数のファイル名を見つける」、「何列で表示するか決める」などなど
たくさんの処理が内側で行われている。それらひとつひとつがスレッド


つまり 1つのプロセスは、1つ以上のスレッドから構成される。

  • マルチプロセスとマルチスレッド

    マルチプロセス

    chrome・ターミナルなどそれぞれのプログラム(プロセス)を同時に開き、使うことができる。また、ターミナルのvimで複数のファイルにプログラムを書くことができ、それぞれのファイルは影響はしない。
    このようにプロセスを同時に実行(並列処理)することをマルチプロセスといいます。

  • マルチスレッド

    シングルスレッドのプロセス:1つしかスレッドを持たないプロセス
    マルチスレッドのプロセス:複数スレッドを持つプロセス

マルチスレッドの利点は、例えば、シングルスレッドの場合だと重い処理を待つ必要があり利便性にかけイライラする。しかしマルチスレッドの場合、重い処理と他の処理を分けることで並列処理できる。

メモリ領域

プロセスはシステム全体の動作の安定性および安全性の観点から、プロセスごとにメモリは独立して割り当てられる。
しかし。独立したメモリ空間が不必要な場合では、メモリの利用効率が悪くなってしまう。プログラムによっては、処理ごとに別々の空間にあるメモリを利用するのではなく、単一の空間内のメモリを共有しながら複数の処理を行なう「共有メモリ方式」のほうが、ロジックの実装のしやすさやメモリ効率の面で優れている場合がある。
これを可能にするのがスレッドである。
スレッドを使うことで、同一プロセス内の複数スレッドを同一メモリ空間上で実行でき、メモリ消費量などが軽減できるようになっている。
しかし、注意点もあり、同じデータを複数のスレッドが同時に書き換えることによる不整合が生じるので、排他制御(あるスレッドがリソースにアクセスしているときは、ほかのスレッドがアクセスできないようにロックをかけること)を行う必要がある。
また、複数のスレッドが協調動作する際、お互いの処理完了を待ち合わせてデッドロック (2つ以上のスレッドあるいはプロセスなどの処理単位が互いの処理終了を待ち、結果としてどの処理も先に進めなくなってしまうこと) 状態に陥ることのないよう配慮する必要もある。