簡単なプロセスとスレッドの違いについて
プロセスとは?
私たちが普段使ってるパソコンやスマホにはCPUやメモリがあります。1つ1つの実行中のアプリケーションをメモリ(RAM)の領域内に一時的に入れたデータが「プロセス」です。実行中のプロセスの処理が終わり次第、消費されたメモリは解放されます。スマホやパソコンの動作が重い場合はメモリ領域がプロセスに消費されている可能性があります。メモリ(RAM)の容量が多いほど、アプリケーションを立ち上げる数が上がり処理が速くなります。
スレッドとは?
プロセスの処理方法を並行動作可能にすることを「スレッド」といいます。メモリ領域内にある実行中の1つのプロセスのデータをアクセス(共有)することが可能です。Windowsのメモ帳は1つのプロセス、1つのスレッドで動いています。しかし、アプリケーションによっては1つのプロセスで複数のスレッドを設定(プログラミング)することが可能です。
例えば、シューティングゲームのプロセスを実行中の場合、主人公、敵、弾などの複数の処理を複数に処理したい場合に使われます。この状況で動作しても問題が発生しないプログラムのことを、「スレッドセーフ」といいます。
性能の違いについて
実行中の1つのアプリケーションが一時的にメモリに1つのプロセスとして入ります。メモリに入っているプロセスを親プロセスと呼びます。親プロセスをコピーして同じプロセスをメモリに入れることが可能です。これを子プロセスといいます。
親プロセスと子プロセスのアプリケーションのデータは一緒なので機能は共有できます。例えば、Webブラウザを何個か開いたときがわかりやすいです。しかし、子プロセスを複数立ち上げることでメモリの消費が多くなり動作が重くなる原因になります。
プロセスからスレッドを生成することができます。スレッドは消費されているメモリ内の親プロセスのデータを共有しデータの中の書き換えが可能です。なので、プロセスよりはメモリ内の消費が抑えられます。例えば、FPSやTPSなどのシューティングゲームなので敵にやられたりしたときの当たり判定などがわかりやすいです。
プロセスは同じ機能のアプリケーションを子プロセスとして複数起動することが可能です。スレッドは1つのアプリケーションの中身のデータを共有し書き換えや消去ができます。ただし、スレッドセーフに問題があれば処理が重くなることがあります。
プロセスとスレッドのパフォーマンス点を考えると、簡易なアプリケーション(メモ帳など)を開発したい場合は1つプロセスで1つのスレッドだけの方が良いでしょう。スレッドセーフに問題がなければゲームアプリなどの複雑な処理を開発するならスレッドの処理方法を複数にできる方法を検討してください。
しかし、スレッドだけが早いとは言えません。複数のスレッドでのデータの書き換えによる待ち時間が多くなれば、プロセス以上に処理が落ちる可能性もあります。プロセスやスレッドに関係なくパソコンやスマホのスペックが低かったら、パフォーマンスが低くなります。
結局のところ、プロセスとスレッドのパフォーマンスの差はいろんな状況によって処理の速さが変わります。
アプリケーション開発などに使われるプログラミング言語でもプロセスとスレッドの仕組みは大事です。世の中にあるアプリケーションのほとんどはプロセスとスレッドを使って処理しているので動作が重かった場合はプロセスやスレッドの処理効率が間に合ってない可能性もあります。
パソコンやスマホの動作が重かったらプロセスを調べて、再インストールやアンインストールなどをして地道に1つ1つ原因を解決していくと高速化していくでしょう。
プロセスとスレッドの使用方法について
OSでどうやって確認できるか?
プロセスをWindowsで確認する場合、タスクマネジャーを起動するとプロセス内にタスクマネージャーが入ってることが確認できます。タスクマネージャーでは簡易的にプロセスがどのように動作しているか知ることが可能です。例えば、1つのプロセスでCPUをどれくらい使っているかメモリの容量をどれくらい消費しているかなどがわかります。
もし、Windowsの動作が重かった時などはタスクマネージャーを開いて1つ1つのプロセスを確認すれば原因がわかることがあります。動作が重い場合は1つプロセスに複数のスレッドをしている可能性があるでしょう。
プロセスやスレッドを使っているOSはWindows以外にもあります。それはMacやandroidです。macOSはUnix系のOSでandoridはlinux系のOSです。基本的にはWindowsと一緒なのですが、macOSではアクティビティモニタを起動することでプロセスの動きがわかります。
androidではGooglePlayなどのストアから専用のアプリケーションを入れない限りプロセスの動作を見ることはできません。
CPUコアに使われるプロセスとスレッドについて
普段使うPCやスマホでCPUが使われています。CPUの機能の中にはマルチタスクという機能があります。基本、1つの実行中のアプリケーション(プロセス)に1つのスレッド(シングルスレッド)が使われています。
2つのプロセスAとBがある場合、シングルスレッドで処理する場合プロセスAが終わり次第プロセスBを実行します。プロセスAが終了するまで、プロセスBは処理待ちの状態です。
マルチタスクの場合はプロセスAとBにスケジューリングされ実行されるプロセスAとBを「細かく切り替えて」実行しているので、処理効率がよくなります。だから、CPUのコア数が多いほどプロセスやスレッドの処理が早くなります。
プロセスとタスクの違いは?
例えばWindowsなどでプロセスを見る場合はタスクマネージャーが基本です。
タスクマネージャー以外にもタスクスケジューラもあります。Windows側の方でプロセスマネージャーやプロセススケジューラなどの名称だったら何のことだがわからなくなります。わかりやすくするために「プロセス」ではなく「タスク」を名称にしていると考えられるでしょう。
C言語について
C言語は、コンピューターのソフトウェア(アプリケーション)を開発する際にもっとも使用されるプログラミング言語です。OS(オペレーションシステム)などにも使われています。OS(オペレーションシステム)は「Windowa」、「MacOS」、「Ubuntu(Linux)」などです。
C#について
C#は、マイクロソフトが開発したプログラミング言語です。C言語の後に開発された言語です。ゲーム開発に使わている「unity」にも使われています。
Rubyについて
Rubyは、日本人が開発したプログラミング言語です。料理のレシピで有名なCookpadは「Ruby」で開発しています。
vb.netについて
vb.netは、マイクロソフトが開発したプログラミング言語です。Windowsのアプリケーションに「vb.net」が使われています。
アプリケーション開発でプロセスとスレッドは?
アプリケーションを開発するときにC言語やC#やvb.netやrubyなどを使ってます。プログラミング言語によってはプロセスやスレッドを意識して開発などが行われることがあります。C言語やC#やrubyなどはプロセスやスレッドの機能を使うための開発環境を簡単に用意することが可能です。
プログラマーやシステムエンジニアはアプリケーションを開発するときに処理を速くするためにプロセスやスレッドを1つにするか複数にするかを考えて開発しています。
プロセスとスレッドについて
プロセスとスレッドについては、
・プロセスやスレッドはさまざまなOSやソフトウェアに使われています。
・PCの処理が重かった場合はプロセスを確認すると解決する場合があります。
などです。
C言語やRubyなどのプログラミング言語でもプロセスやスレッドが関わっているので、OSの開発やソフトウェアの開発する場合はプロセスやスレッドのことを考えて開発すると良いでしょう。
今回の記事を参考に、プロセスとスレッドを考えてみましょう。