プログラムが実行されるときの呼び方、プロセス、スレッド、タスク、ついでにRPCって何?

こんにちわ。

20代の頃、システム開発の仕事をしていました。

特にパソコンをベースとしたプログラム開発の仕事をしたかったのですが、仕事なのでオフコンやUNIXでのシステム開発もいくつかやりました。

制御システムの開発がけっこう多かったので、マルチプロセス、マルチタスクのプログラミングは、UNIXをはじめとするいくつかのOSで経験しました。

昔使ったことのあるリアルタイムOSはiRMX、OS-9、VxWorks
こんにちわ。 社会人になって、しばらくはプログラムを書いて、コンピュータシステムを作る仕事をしていました。 その...

UNIXというOSには仕事で結構お世話になったのでふりかえります。
こんにちわ。 ぼくは若い頃はシステム開発の仕事をしていました。 元々、パソコンいじりが趣味だったので、パソコンやMS-D...

その時によく疑問に思ったのは、プロセス、スレッド、タスクとか実行するプログラムの呼び方が様々あったことです。

当時は、自分なりに何らかの答えをもっていたように思いますが、今はもう忘れてしまいました。(笑)

そして、もう一度、整理しておこうと思いました。

スポンサーリンク
スポンサーリンク




プロセス? スレッド? タスク?

他には、ジョブとかサービスとか、プログラムの実行単位には色々な呼び名があるように思います。

ですが、小型のコンピュータの世界で昔から使われているプロセス、スレッド、タスクの違いをとりあえず考えてみたいと思います。

まずは、プロセスですが、プログラムの実行単位のことを言います。

CPUから見ると、プロセスはコードとデータの実行の単位ですが、OSから見たプロセスはメモリーの管理単位を言うようです。

なんだか、わかったようなわからないような。。。。でも、タスクと同義で使われることが多いようです。

次にタスクですが、こちらはコンピューターが処理する仕事の最小単位を指しています。

ユーザーがコンピューターに対して指示を出す仕事の単位をジョブといいますが、コンピューターはジョブをさらに分解して、タスクという単位で処理をします。

そして、スレッドですが、こちらはコンピューターのCPUにおけるプログラムの実行単位のことを言うようです。

OSから見た場合、実行中の個々のプログラムはプロセスという実行単位で管理されています。

それをさらにひとつ以上の実行単位に分割してCPUに逐次処理するのですが、その1つ1つをスレッドと言うようです。

それぞれがそれぞれの意味をもっているようで、整理するのは難しいですがざっくり言うとこんな感じでしょうか?

マルチタスクとマルチスレッド

これらのタスクやスレッドを同時に並行して処理することをマルチタスクとかマルチスレッドと言います。

この2つの違いってなんでしょうか?

マルチタスクは、複数のタスクがCPUなどの処理リソースを共有する方法です。

異なるアプリケーションが複数の動作を同時に行っているように各計算タスクを素早く切り替えるOSの機能をいいます。

こうすることで、リアルタイムに処理を実行したり、CPUの空き時間を減らしたりと言うことができるようになります。

それに対してマルチスレッドは、マルチタスクの発想をアプリケーションにもちこんだものと言えばいいのでしょうか?

単一のアプリケーションで特定の操作を個々のスレッドに分割し、各スレッドを並列で実行することを言います。

たとえば、1つのアプリケーションの処理である処理に時間がかかると言った場合、その処理を実行しながら、他の処理可能な処理を同時にすすめるような必要がある場合に使えます。

もう一度、整理するとマルチスレッドはマルチタスクを実現する1手段で、1プロセスの中で、関連した複数のタスクを処理するもの。

マルチタスクは各プロセスは独立していて、別々のタスクを処理する、または、単にコンピュータが、同時に複数の仕事を行うことをいうということになりますかね。

これらについては、それぞれの言葉に歴史的な経緯があり、時代背景やコンピュータの種類、OS等により意味合いが違ってくるので、これが正解とはいいづらいのですが自分の経験からもこんなイメージかなと思います。

RPCとは何ぞや

プロセス、タスク、スレッドについて考えてみたついでに、RPCとは何か?についても触れておきたいと思います。

RPCですが、Remote Procedure Callの略で遠隔手続き呼び出しのことを言います。

具体的にはネットワークによって接続された他のコンピュータ上でプログラムを呼び出し、実行させるための仕組みやプロトコルのことを言います。

リモートプロシージャコールでは、プログラムの実行に用いられるサブルーチンの呼び出し(プロシージャコールと言います。)をネットワークを介して他のコンピュータ上で行うことによって、ネットワーク上の他のコンピュータに処理を行わせる仕組みです。

これも一種のマルチタスクと言えなくもないかなって思っています。

リモートプロシージャコールは、クライアント・サーバーシステムや分散処理技術を実現する仕組みとして利用されています。

たとえば、サンマイクロシステムズが開発したNFS(Network File System)や、Microsoftの分散オブジェクト技術であるDCOM(Distributed Component Object Model)などは一般的に広く利用されている技術と言えますね。

いかがでしょうか?

実際の仕組みはよくわからないとしても、言葉の意味の違いを知ることでいろいろ見えてくるものもあるかなって思います。

今回も最後までおつきあい、ありがとうございました。

スポンサーリンク
スポンサーリンク




スポンサーリンク




シェアする

  • このエントリーをはてなブックマークに追加

フォローする