マルチスレッドマルチタスク違い

概要

このドキュメントは、マルチコアプログラミングの基本シリーズの一部です。
マルチコアプログラミングの基本シリーズ

マルチコアプログラミングの基本シリーズ

このドキュメントでは、アプリケーションでマルチタスクとマルチスレッドを利用する重要性について説明します。

内容

背景

マルチコアシステムは、2つ以上のコアが搭載されたシングルプロセッサCPUです。各コアには専用のマイクロプロセッサが内蔵されています。マルチコアマイクロプロセッサは、単一の物理パッケージでマルチプロセッシングを実行します。マルチコアシステムは、L2キャッシュやフロントサイドバスなどのマルチプロセッサシステムで重複するコンピュータリソースを共有します。

マルチコアシステムの性能は、マルチプロセッサに似ていますが、複数のプロセッサソケットなど複数のプロセッサをサポートするマザーボードが必要ないため、コストを大幅に節約できます。

 

マルチタスク処理

マルチタスクは、プロセスと呼ばれる複数のタスクがCPUなどの処理リソースを共有する方法です。Windows XPなどのマルチタスクOSでは、複数のアプリケーションを同時に実行できます。マルチタスク処理とは、異なるアプリケーションが複数の動作を同時に行っているように各計算タスクを素早く切り替えるOSの機能を指します。

CPUのクロック速度が向上するとともに、アプリケーションを高速に実行できるだけではなく、OSがアプリケーションの切り替えをより迅速に行えるようになりました。これにより、パフォーマンス全体が向上しました。一度に多くの動作がコンピュータ上で行え、個々のアプリケーションは高速に実行されます。

 

シングルコア

シングルCPUコアが搭載されたコンピュータでは、一度に1つのタスクのみを実行できます。つまり、CPUがタスクの命令を実行しているということです。マルチタスク処理では、特定の時間に実行するタスクや待機中のタスクが実行されるタイミングをスケジュールすることによりこの問題を解消します。

 

図1. シングルコアシステムは、1つのCPUでマルチタスクを行うタスクをスケジュールする

 

マルチコア

マルチコアシステムの場合、マルチタスクOSは複数のタスクを同時に実行します。複数の演算エンジンが異なるタスク上で独立して動作します。

たとえば、デュアルコアシステムでは、ワードプロセッサ、Eメール、ウェブブラウズ、ウイルス対策ソフトウェアなどの4つのアプリケーションが同時に異なるプロセッサコアにアクセスすることが可能です。Eメールをチェックしながら同時に文字をタイプというようにマルチタスクを行うことができるため、アプリケーションのパフォーマンス全体も向上します。

 

図2. デュアルコアシステムは、マルチタスクOSが2つのタスクを同時に実行することを可能にする

 

OSは、異なるアプリケーションまたはプロセスを異なるCPUコア間で分割することにより、複数のアプリケーションをより効率的に実行します。コンピュータは作業を分割するため、スループットおよびパフォーマンスが向上します。この場合、各コアでは半分の量のアプリケーション管理および切り替えが行われます。事実上、アプリケーションは並列に実行されます。

 

マルチスレッド処理

マルチスレッド処理は、マルチタスク処理の発想をアプリケーションに広げたもので、単一のアプリケーションで特定の操作を個々のスレッドに分割します。各スレッドは並列に実行されます。OSによって、さまざまなアプリケーション間だけでなく、1つのアプリケーション内のスレッド間で、処理時間の分割が可能となります。

たとえば、LabVIEWのマルチスレッドプログラムでは、アプリケーションを、ユーザインタフェース、データ集録、ネットワーク通信、ログの4つのスレッドに分割することができます。これらの各スレッドが独立して動作するように優先度を割り当てることができます。そのため、マルチスレッドアプリケーションでは、複数のタスクを他のアプリケーションと並列実行させることができます。

図3. デュアルコアシステムではマルチスレッド処理が可能

 

マルチスレッド処理を生かしたアプリケーションには、以下を含む多くの利点があります。

  • 効率面で優れたCPUの使用
  • システムの信頼性の向上
  • マルチプロセッサのコンピュータでのパフォーマンス向上

多くのアプリケーションでは、計測器などのリソースの同期呼び出しを行います。このような計測器の呼び出しには、時間がかかります。シングルスレッドのアプリケーションのこのような同期呼び出しでは、操作が完了するまでアプリケーション内の他のタスクの実行が結果として妨げられます。このような問題は、マルチスレッド処理によって回避できます。

同期呼び出しが1つのスレッドで実行される間、この呼び出しに依存しないプログラムの他の部分は異なるスレッドで実行されます。同期呼び出しが完了するまで停止せずに、アプリケーションの実行が進行します。このように、アプリケーションのスレッドの実行準備ができている場合にCPUがアイドル状態にならないため、マルチスレッド処理アプリケーションはCPUの効率が向上します。

 

LabVIEWマルチスレッド処理

LabVIEWは、アプリケーションを複数の実行スレッドに自動的に分割します。複雑なタスクスレッド管理は、透過的にLabVIEW実行システムに内蔵されています。

 

図4. LabVIEW は複数の実行スレッドを使用する

 

LabVIEWマルチタスク処理

LabVIEWは、対応するOSで割り込み型マルチスレッドを使用します。LabVIEWはまた、協調型マルチスレッドも使用します。割り込み型マルチスレッドを使用するOSとプロセッサは、これらのシステムが協調型マルチスレッドの使用に戻る場合のために制限された数のスレッドを使用します。

実行システムはスレッドを使用して、割り込み式にマルチタスクの処理を行います。ただし、使用できるスレッドの数は制限されます。並列性の高いアプリケーションでは、使用できるスレッドがビジー状態の場合、実行システムは協調型マルチタスクを使用します。また、OSは、アプリケーションと他のタスク間で割り込み型マルチタスクを処理します。

 

Was this information helpful?

Yes

No