並行性
並行プログラミングは、並行システムを実装するのに使われるプログラミング言語とアルゴリズムから構成される。一般に並行プログラミングは並列プログラミングよりも範囲が広いとされ、様々な形態の通信および相互作用に関係する。一方、一般の並列システムは予め決められた整った構成の通信パターンを備えている。並行プログラミングの基本目標には「正当性」、「性能」、「堅牢性」が含まれる。オペレーティングシステムやデータベース管理システムのような並行システムは、障害からの自動復旧など半永久的に動作することが求められ、不意な停止をしないことが期待されている(並行性制御参照)。一部の並行システムは透過的並行性を持つよう実装されている。その場合、並行動作する計算主体群は共有リソースを使用するものの、プログラマからはその実装は隠されている。
並行システムは共有リソースを使うため、共有リソースへのアクセスを制御するための一種の調停を行うもの(通常、ハードウェア)を実装する必要がある。調停者を使用することで並行計算における不確定性(英語版)が生じるおそれがあり、正当性と性能が求められる実装では重要な意味を持つ。例えば調停によって無制限の非決定性(英語版)が導入されると、モデル検査においてモデルが無限個の状態を持つことになり、問題が生じる。
並行プログラミングモデルによっては、コプロセスやコルーチンも含んでいる。そういったモデルでは、スレッドが自発的にタイムスライスをシステムまたは他のプロセスに対して譲る。