1. 序章

マルチプロセッシングとマルチスレッドは、コンピューターマルチタスクのコアコンセプトです。 まず第一に、コンピュータマルチタスクとは、コンピュータシステムが複数の(そして一般的には異なる)タスクを特定の期間にわたって同時に実行できるようにすることを意味します。 プロセスとスレッドは、これらのタスクの実行インスタンスです。 ただし、いくつかの類似点があることに加えて、プロセスとスレッドは技術的に異なります。

このチュートリアルでは、マルチプロセッシングとマルチスレッドの概要を説明します。 まず、スレッドとプロセスを確認し、それらが互いにどのように関連しているかを観察します。 次に、マルチプロセッシングとマルチスレッドの一般的な概念を学習します。 最後に、コンピュータシステムのコンテキストでマルチプロセッシングとマルチスレッドが技術的にどのように発生するかを調査します。

2. プロセスとスレッドのレビュー

一般に、プロセスは、コンピューターシステムで実行されるプログラムのインスタンスと見なすことができます。 したがって、コンピュータプロセスには、コードとデータの独自の分離されたセクションがあります。 つまり、特定のコンピュータプロセスは、コードの実行にも別のプロセスのデータリソースにも直接干渉しません。

スレッドは、プロセスに依存する軽量のセミプロセスです。 具体的には、スレッドはプロセスのコンテキストでタスクを実行します。 技術的には、スレッドは、メモリスタック、プログラムカウンター、レジスターのセットなど、プロセスと同様のリソースを必要とします。 これらのリソースは、各スレッドに固有のものです。 ただし、同じプロセスのすべてのスレッドは、プロセスのコードセクションとデータセクションを共有します。

コミュニケーションに関しては、プロセスは独立または協力に分類されます。 独立したプロセスは他のプロセスと通信せず、それらの影響を受けません。 次に、連携するプロセスは、実行中に他のプロセスとデータを交換します。 プロセスは分離されたプログラムであるため、プロセス間でのデータ交換は プロセス間通信 メカニズム。

スレッドは相互に通信する必要がある場合もあります。 ただし、プロセスとは異なり、同じプロセスに属するスレッドは、スレッド間通信を確立するために追加のメカニズムを必要としません。 このシナリオでは、メッセージはプロセスのデータセクションを介して交換されます。

次の図は、プロセスとスレッドの関係を簡単に示しています。

 

要約すると、異なるエンティティであるにもかかわらず、 プロセスとスレッド 密接に関連しています。 たとえば、すべてのプロセスには、CPUで命令を実行するスレッドが少なくとも1つあります。 同様に、スレッドはプロセス内にのみ存在できます。

3. マルチプロセッシングとマルチスレッドの基本

マルチプロセッシングとマルチスレッドは、それぞれプロセスとスレッドの複数のインスタンスの同時実行に取り組みます。 したがって、彼らはコンピュータシステムにマルチタスクを実装する責任があります。 マルチプロセッシングとマルチスレッドの定義を見てみましょう。

  • マルチプロセッシングとは、コンピュータシステムで複数のプロセスを同時に実行できることを指します。 マルチプロセッシングシステムは、コンピュータシステムに複数の物理的処理ユニットを必要とすることに注意する必要があります。 このようにして、異なるプロセスを同時に実行できます。
  • マルチスレッドとは、特定のプロセスの異種タスクを同時に実行する可能性を指します。 実際には、マルチスレッドは、複数のスレッドを持つ少なくとも1つのプロセスがコンピューターシステムで実行されるときに発生します。 したがって、マルチスレッドは、マルチプロセッシングのように複数の物理処理ユニットを必要としません。 ただし、特定の戦略に従って、処理ユニットの処理時間を実行中のスレッドに割り当てる必要があります。

具体的な例を使用して、マルチプロセッシングとマルチスレッドを分析できます。 現在、最近のパーソナルコンピュータには通常、マルチプロセッシングを可能にする2つ以上の処理ユニットがあります。 したがって、たとえば、Webブラウザとテキストエディタを同時に実行できます。 ただし、実際には、使用可能な処理ユニットよりもはるかに多くのプロセスを実行します。 この場合、プロセスはこれらのユニットの処理時間を共有します。

プログラム(プロセス)を観察すると、通常、複数のタスクを同時に実行していることがわかります。 例としてテキストエディタを取り上げましょう。 エディターのグラフィカルインターフェイスはスレッドです。 ユーザーが入力した文字をキャッチする別のスレッドがあります。 ドキュメントを保存するための別の; そしておそらく、エディターを使用するだけでは気付かない他の人たち。 したがって、これらの複数のスレッドは処理ユニットの時間を共有する必要があり、通常は常に同時に実行されることはありません。

4. マルチプロセッシングとマルチスレッドの技術的な詳細

処理装置(ハードウェア)とオペレーティングシステム(ソフトウェア)は、マルチプロセッシングとマルチスレッドの主なイネーブラーです。 前のセクションで見たように、マルチプロセッシングの実装には複数の処理ユニットが必要です。 さらに、複数のスレッドとプロセスを管理するためのマルチタスクオペレーティングシステムが必要です。 マルチタスク運用システムにはさまざまなカテゴリがありますが、通常はプリエンプティブマルチタスクシステムが採用されています。

スケジューラは、マルチタスクオペレーティングシステムの重要なコンポーネントです。 このコンポーネントは、特定の時間に実行されるプロセス/スレッドを決定します。 別のコンポーネントであるディスパッチャは、処理ユニットの実行タイムスライスを管理します。 プリエンプティブシステムでは、タイムスライスの終了により、プロセスまたはスレッドの実行が中断されます。

マルチタスクオペレーティングシステムは、プロセスのスレッド(カーネルスレッド)をスケジュールすることも、独自のスレッド(ユーザースレッド)の実行を管理するプロセスをスケジュールすることもできます。 後者の場合、スケジューラーはユーザースレッドを認識せず、プロセスはスレッドライブラリを使用して実行を調整する必要があります。

最後に、処理ユニットとマルチタスクオペレーティングシステムのいくつかの機能特性は、マルチスレッドとマルチプロセッシングのパフォーマンスに影響を与える可能性があります。 例としては、これらのユニットで使用可能な物理処理ユニットと物理スレッドの総数、プロセスの優先順位を決定するためのオペレーティングシステム戦略、およびブロックされたプロセスを処理するためのオペレーティングシステムアプローチがあります。

5. 結論

この記事では、マルチプロセッシングとマルチスレッドについて学習しました。 まず、プロセスとスレッドの基本的な概念を確認しました。 したがって、マルチプロセッシングとマルチスレッドに関する基本的な概念を分析しました。 最後に、最新のコンピューターシステムがマルチプロセッシングとマルチスレッドを実装する方法に関する技術的な詳細を概説しました。

マルチプロセッシングとマルチスレッドは概念的に異なり、機能的に独立していると結論付けることができます。 ただし、これらの手法は、マルチタスクによってコンピュータシステムのパフォーマンスを向上させるという意味で補完的です。