Share via


マルチタスクに関する考慮事項

推奨されるガイドラインは、可能な限り少数のスレッドを使用して、システム リソースの使用を最小限に抑えることです。 これによってパフォーマンスも向上します。 マルチタスクには、アプリケーションの設計時に考慮すべきリソース要件と潜在的な競合があります。 リソースの要件は次のとおりです。

  • システムは、プロセスとスレッドの両方で必要なコンテキスト情報のメモリを消費します。 そのため、作成できるプロセスとスレッドの数は、使用可能なメモリによって制限されます。
  • 多数のスレッドを追跡すると、大量のプロセッサ時間を消費します。 スレッドが多すぎると、そのほとんどが大きな進歩を示すことができません。 現在のスレッドのほとんどが 1 つのプロセスに含まれる場合、他のプロセスのスレッドはスケジュールの頻度が低下します。

リソースへの共有アクセスを提供すると、競合が発生する場合があります。 これらを回避するには、共有リソースへのアクセスを同期する必要があります。 これは、システム リソース (通信ポートなど)、複数のプロセスで共有されるリソース (ファイル ハンドルなど)、または複数のスレッドによってアクセスされる 1 つのプロセス (グローバル変数など) のリソースに当てはまります。 (同じプロセスまたは異なるプロセスで) アクセスを適切に同期できないと、デッドロックや競合状態などの問題が発生する可能性があります。 複数のスレッド間のリソース共有を調整するために使用できる同期オブジェクトと関数。 同期の詳細については、「 複数スレッドの実行の同期」を参照してください。 スレッドの数を減らすと、リソースの同期がより簡単かつ効果的になります。

マルチスレッド アプリケーションの優れた設計は、パイプライン サーバーです。 この設計では、プロセッサごとに 1 つのスレッドを作成し、アプリケーションがコンテキスト情報を保持する要求のキューを作成します。 スレッドは、次のキューで要求を処理する前に、キュー内のすべての要求を処理します。