エンジニアとして仕事をしていると、「プロセス」「スレッド」という言葉に必ず出会うと思います。
この記事では「プロセス」と「スレッド」の関係性についてまとめました。
プロセスとは
プロセスとは実行中のプログラムのことです。
例えばMicrosoftのWordやエクセルはそれぞれ1つのプロセスです。
スレッドとは
スレッドはCPUからみたプログラムの実行単位です。
スレッドはプロセス内に含まれます。プロセスにはいくつもの処理が記述されていますが(画面描画をする、通信するなど)、これらの処理単位がスレッドです。
図解
以下がプロセスとスレッドの関係のイメージ図です。ポイントとなる部分に番号を振っているので番号順に説明していきます。
①OSが各プロセスにメモリ領域を割り当てる
プロセスはOSによって管理されています。
プロセスが立ち上がった時(例えばMicrosoftのWordが立ち上がった時)、OSがそのプロセスに対してメモリ領域を割り当てます。
各プロセスに割り当てられたメモリ領域は他のプロセスと重複することはありません。そのプロセス専用の作業場を用意してもらうイメージです。
メモリ領域には物理アドレスと仮想アドレスがあります。
物理アドレスは物理的なメモリに物理的に最初から振られているアドレスです。
対して仮想メモリはプロセスが割り当てられた際にそのプロセスが物理アドレスを認識するために割り当てられるアドレスです。
仮想アドレスは物理アドレスと対になっていて、プロセス側は物理アドレスの番号がわからなくても仮想アドレスさえ知っていれば物理アドレスにアクセスできるようになっています。
※ちなみに図中の物理アドレス、仮想アドレスの番号は適当です。本当は0x00000000~0x0000FFFFのような番号になります。
②マルチスレッド
スレッドを複数に分けて持つプロセスのことをマルチスレッドと言います。
図中だとプロセス1とプロセス2はマルチスレッドです。
③シングルスレッド
スレッドが1つだけのスレッドのことをシングルスレッドと言います。
図中だとプロセス3がシングルスレッドです。
④マルチコア・シングルコア
コアとはCPU内部にある演算回路であり、処理を行う中核部分です。コアでスレッドを処理しているとイメージしていただければいいと思います。
CPUでは1つのコアにつき、1つのスレッドしか処理できません。 →こちらの記事で修正しました。
コアを複数持つCPUをマルチコア、1つしか持たないCPUをシングルコアと言います。
つまり、マルチコアは複数のスレッドを同時に処理でき、シングルコアは1つのスレッドしか処理できない、ということになります。
⑤スレッドとコアの関係
マルチコアは複数のスレッドを同時に、つまり並列で処理することができます。マルチコアであればマルチスレッドを処理できるため、PCの処理速度が高速になります。
逆に、シングルコアでマルチスレッドを処理しようとすると、スレッドの切り替え時間の分処理が遅くなることがあります。
マルチコアのCPUを搭載したPC(もしくはサーバー)であればマルチスレッドのプロセスを効率的に処理できるので、処理速度が高速になるということです。
参考
プロセスとスレッドの違いとは?超わかりやすく解説!【図解とプログラム付き】
【図解】CPUのコアとスレッドとプロセスの違い,コンテキストスイッチ,マルチスレッディングについて