コンカレンシー(計算機科学):概要、モデル、課題
計算機科学におけるコンカレンシーとは、複数の計算タスクを時間的に重なり合って進行させ、応答性、資源利用、モジュール性を高めるための構造化と実行である。並列性とは異なり、調整技法を必要とする。
概要
計算機科学におけるコンカレンシーとは、複数のタスクが時間的に重なり合う区間に進捗するよう、計算を記述し実行することである。一度に一つの操作だけが起きることを前提とするのではなく、コンカレントな設計では、スレッド、プロセス、タスクを交互に進めたり、それぞれを独立して進行させたりできる。このようなプログラムを構造化し実行する一般的な考え方は、しばしばコンカレンシーと呼ばれ、多くのプログラミングおよびシステム関連資料で扱われている。コンカレンシーの概念。
主な特徴
コンカレントシステムは、イベントの順序が非決定的であること、コンテキスト切り替え、実行単位どうしの調整が必要なことを特徴とする。一般的な実行単位には、オペレーティングシステムのプロセス、プロセス内のスレッド、軽量タスク、アクターがある。コンカレンシーでは進捗と合成を重視する。すなわち、システム全体としての処理を継続しながら、複数の活動が実行中、待機中、またはブロック中になり得る。
歴史とモデル
初期のオペレーティングシステムでは、単一プロセッサを同時に利用できるようにするため、マルチタスクとタイムシェアリングが導入された。時代とともに、プログラミング言語とライブラリはコンカレンシーを表現する多様なモデルを発展させてきた。これには、同期プリミティブを伴う共有メモリ型スレッド、アクターやCommunicating Sequential Processes(CSP)などのメッセージパッシングモデル、イベント駆動型または非同期I/Oのパターンが含まれる。future、promise、async/awaitといった現代的な言語機能は、コンカレントな処理フローの記述を簡潔にする。
用途と例
コンカレンシーは、応答性の高いユーザーインターフェース、多数のクライアントを同時に扱うネットワークサーバー、リアルタイムおよび組込みコントローラー、I/Oと計算を重ね合わせるパイプラインの構築に広く用いられる。たとえばWebサーバーは、複数のリクエストを並行して処理できるため、ある接続で低速なI/Oが発生しても他の接続をブロックせず、スループットとレイテンシを改善できる。
技法と一般的な課題
- 同期:ロック、ミューテックス、セマフォ、条件変数。
- 通信:共有メモリとメッセージパッシングの選択、競合を減らすための不変性。
- 正しさに関する問題:競合状態、デッドロック、ライブロック、スタベーション、メモリ一貫性。
- 高水準の手法:アクターモデル、トランザクショナルメモリ、ロックフリーアルゴリズム、イベントループ、構造化コンカレンシー。
並列性との違いと実践上の助言
コンカレンシーはしばしば並列性と対比される。並列計算では複数のプロセッサ上で複数の操作を実際に同時実行するのに対し、コンカレンシーは、同時に実行される場合もそうでない場合もある、複数の論理的活動を管理することに関する概念である(並列計算)。効果的なコンカレント設計では、正しさと性能の均衡が重要である。クリティカルセクションを小さく保ち、変更可能な共有状態を最小化し、高水準の抽象化を採用するとともに、非決定性によってバグの再現が難しくなるため、テストと検証の技法を適用する。
質問と回答
Q: コンピュータ科学における並行処理とは何ですか?
A: コンピュータサイエンスにおける並行処理とは、複数の計算を重複した時間枠内で同時に実行することを指します。
Q:コンピュータ・プログラムにおける並行処理はどのように行われるのですか?
A: 並行処理では、複数のスレッドまたはプロセスが非同期にタスクを進めるために使用され、コンピュータ・リソースをより効率的に使用することができます。
Q: 同時実行と並列コンピューティングの違いは何ですか?
A: 同時実行と並列コンピューティングは似たような概念ですが、主な違いは、並列コンピューティングでは複数のプロセッサを使用し、それぞれのプロセッサに1つの同期スレッドが割り当てられていることです。
Q:なぜ並行コンピューティングは有用なのですか?
A: コンカレント・コンピューティングが有用なのは、コンピュータ資源をより効率的に使用でき、ある種のアプリケーションにおいて処理の高速化や性能の向上につながるからです。
Q: コンカレント・コンピューティングが有効なタスクの例を教えてください。
A: コンカレント・コンピューティングの恩恵を受けられるタスクの一例として、異なるユーザーからの複数のリクエストを同時に処理する必要があるウェブサーバーがあります。
Q:シングル・プロセッサー・システムでもコンカレント・コンピューティングを使用できますか?
A:はい、シングル・プロセッサー・システムでも並行コンピューティングを使用することはできますが、マルチプロセッサー・システムでの並行コンピューティングほど効率的ではないかもしれません。
Q:並行コンピューティングで使用できるスレッド数やプロセス数に制限はありますか?
A: 同時計算で使用できるスレッド数やプロセス数に特に制限はありませんが、多すぎると性能の問題や効率の低下につながる可能性があります。
関連項目
著者
AlegsaOnline.com コンカレンシー(計算機科学):概要、モデル、課題 Leandro Alegsa
URL: https://ja.alegsaonline.com/art/22417