AI Technology Community
8.7、プロセスとは
コンピュータの発展初期には、タスクスケジューリング方式は比較的簡単で、コンピュータはユーザーからタスクを受け取り、それから指定されたタスクが完了するまでずっと実行し続け、その後コンピュータはユーザーの次の計算タスクを待ちます。このような動作方式では、任意の時点でコンピュータは一度に1つのタスクしか完了できません。もしそのタスクが待機状態にある場合、コンピュータは他のタスクを実行することもできません。
この問題を解決するために、エンジニアたちはプロセスという概念を生み出しました。コンピュータシステム上で複数のプロセスを同時に実行し、あるプロセスが入力待ち状態にあるとき、他のプロセスは引き続き実行でき、コンピュータ資源の利用効率が大幅に向上しました。
複数のプロセスを実行するコンピュータシステムにおいて、私たちが見るのは複数のタスクが並行して実行されている状態です。あるプロセスについては、そのプロセスが必要とするすべての資源を占有しており、これらの資源は他のプロセスによって使用されないことがわかります。
プロセスはまるで独立した仮想実行環境のようなもので、プロセス同士は基本的に相互に隔離されています。異なるオペレーティングシステムでは、プロセスの実装方法が異なります。このチュートリアルではこれらのオペレーティングシステムの詳細には深く踏み込まず、様々なオペレーティングシステムに共通する使い方を紹介し、実際の問題を解決するために使います。
Pythonでは、プロセスの使用には主に以下の2つのケースがあります:
1) 場合によっては、特定のタスクを完了するために特定の専用アプリケーションを使用する必要があります。これらの専用アプリケーションはPythonで作成されていない場合があり、シェルスクリプトであるか、実行可能ファイルであるか、またはjarパッケージであるかもしれません。この場合、Pythonインタープリターのプロセスでそのタスクを実行することはできず、別のプロセスを起動してそのタスクを実行する必要があります。
このような場合、多くの場合、起動 - 待機モードが採用されます。つまり、別のプロセスを起動し、そのプロセスの実行が完了するのを待ちます。図1はこのプロセスを表しています。
図1 起動 - 待機モード
2) 非常に大きなタスクを実行する必要があり、そのタスクには長い時間がかかる場合、そのタスクはメインプロセスで実行するのに適していません。なぜなら、メインプロセスは他のタスク、例えばユーザーとのインタラクションタスクも実行する必要があるからです。この場合、この大きなタスクを独立したプロセスで独立して実行することができます。
このような場合、メインプロセスは子プロセスの完了を待たずに、自分自身の仕事をする必要があります。メインプロセスはただ暇なときに子プロセスの状態を確認するだけです。これが私たちがよく言うフロントグラウンドとバックグラウンドのタスクです。フロントグラウンドプロセスはリアルタイム性が要求される小さなタスクを処理し、バックグラウンドプロセスは時間のかかる重度のタスクを処理し、これら2つのタスクは並行して実行されます。
図2はこのようなアプリケーションシナリオを表しています。
図2 並行モード
10
item of content
通常、プロセスには少なくとも1つのスレッドが含まれ、複数のスレッドがある場合はその中にメインスレッドが含まれます。同じプロセス内のすべてのスレッドはシステムリソースを共有しますが、それぞれが独立したスタック、レジスタ環境、およびローカルストレージを持っています。
マルチスレッドの利点は、複数のタスクを同時に実行できることです。システムに複数の計算ユニットがある場合、複数のスレッドはそれぞれの計算ユニットで並行して動作することができ、これによりシステムの処理効率が大幅に向上します。
多くの場合、プロセスはスレッドよりも大きい単位であり、通常1つのプロセスは複数のスレッドを含むことができます。プロセスの隔離効果はスレッドよりも優れているため、マルチプロセスを使用するとマルチスレッドよりも安全です。ただし、マルチプロセスの欠点はマルチスレッドよりもスケジューリングが重く、効率が低いことです。
- 470hits
- 0replay
-
0like
- collect
- send report