並行性(へいこうせい、concurrency)とは、計算機科学において、時間的にオーバーラップして実行される計算を伴うシステムの属性であり、そのような計算ではリソースを共有することがある。並行計算は、同一チップ上の複数のコア、単一プロセッサ上のプリエンプションを伴うマルチスレッド、物理的に分離した複数プロセッサ上などで行われる。並行計算のための数学的モデルとして、ペトリネット、プロセス計算、並列ランダムアクセス機械モデル、アクターモデル、Reo Coordination Language(英語版) などが開発された。 並行システムにおける計算は実行中に互いにやりとりできるため、考えられる実行経路は極めて多くなり、結果としてシステム全体が不確定
目次
1 問題
2 理論
2.1 モデル
2.2 論理
3 実際の並行処理
4 脚注
5 参考文献
6 関連項目
7 外部リンク
問題
並行システムの設計では応答時間を最小化しスループットを最大化するため、データ交換、メモリ割り当て、実行スケジューリングなどに関わる技術の信頼性を追求する[2]。 並行性理論は、1960年代にカール・アダム・ペトリが独創的なペトリネットの研究を行って以来、理論計算機科学の主要な研究領域となっている。以来、並行システムを理解するための様々な理論モデル、論理、ツールが開発されてきた。 モデル開発と並行システムの理解のための形式手法には様々なものが開発されてきた。以下に主なものを列挙する[3]。
理論
モデル
並列ランダムアクセス機械[4]
アクターモデル
BSP
ペトリネット
プロセス計算
タプルスペース(英語版)(例えばLinda)
SCOOP(英語版) (Simple Concurrent Object-Oriented Programming)
Reo Coordination Language(英語版)
これら並行性モデルの一部は、第一に推論と仕様記述を目的としている。一方、他のモデルは開発サイクル全体(並行システムの設計、実装、証明、テスト、シミュレーション)をサポートすることを目的としている。
並行性モデルが乱立したことから、一部の研究者はそれら理論モデル群を統合する方法を模索することを考えた。例えば Lee と Sangiovanni-Vincentelli は各種並行性モデルの表示的意味論を定義する共通フレームワークを提供すべく tagged-signal モデルを提唱した[5]。一方、Nielsen、Sassone、Winskel は各種モデルを統合理解するのに圏論が有効であるとした[6]。
アクターモデルにおける Concurrency Representation Theorem は、外部からの通信を受け付けないという意味で閉じている並行システムを汎用的に表現する方法を提供している。プロセス計算などの他の並行性システムは、2相コミットプロトコルを使ってアクターモデルでモデル化できる[7]。閉システム S は、その初期挙動 ⊥S に対して挙動近似関数 progressionS を適用することでよりよい近似を構築でき、S の数学的記述(意味)は次のようになる[8]。DenoteS ≡ ?i∈ω progressionSi(⊥S)
このようにすると、S は全てのとりうる挙動で数学的に特徴付けられることができる。 様々な時相論理[9]が並行システムの理解を助けるために使われる。特に線形時相論理や計算木論理は、並行システムの各時点の状態を確認するのに使用可能である。Action Computational Tree Logic や Hennesy-Miller Logic、レスリー・ランポートのTemporal Logic of Actions 並行プログラミングは、並行システムを実装するのに使われるプログラミング言語とアルゴリズムから構成される。一般に並行プログラミングは並列プログラミングよりも範囲が広いとされ、様々な形態の通信および相互作用に関係する。一方、一般の並列システムは予め決められた整った構成の通信パターンを備えている。並行プログラミングの基本目標には「正当性」、「性能」、「堅牢性」が含まれる。オペレーティングシステムやデータベース管理システムのような並行システムは、障害からの自動復旧など半永久的に動作することが求められ、不意な停止をしないことが期待されている(並行性制御参照)。
論理
実際の並行処理