til//concurrency-vs-parallelism
concurrency-vs-parallelism.mdupdated 2026-08-011,142 chars

並行と​並列の​ちがい

日本語では​似て​見えるが​(並行=concurrency/並列=parallelism)、​指すものが​違う。​並行は​「構造」の​話であり、​多数の​タスクを、​時間を​重ねながら​切り​替えて​進める​設計を​指す。​並列は​「実行」の​話であり、​複数の​タスクを​本当に​同時に​走らせる​ことを​指し、​複数の​働き手​(CPUコア=プロセッサの​処理単位)が​必要に​なる。​Rob Pike​(=Go言語の​設計者の​一人)の​言葉を​借りれば​「並行とは​多くを​“さばく​”こと、​並列とは​多くを​“同時に​行う​”こと」である。

並行​(concurrency)​=構造

並行とは、​多数の​タスクが、​重なり合う​時間の​中で​進むように​設計する​ことであり、​必ずしも​同一瞬間に​処理されるとは​限らない。​働き手が​1人でも​並行は​成立する。​タスクAを​始め、​Aが​待ちの​間に​Bへ​切り​替え、​また​Aへ​戻る​──この​交互処理​(インターリーブ)が​その実体である。​CPUコアが​1つでも、​タイムスライス(=ごく​短時間で​処理対象を​切り​替える​方​式)に​よって​実現でき、​2人目の​働き手は​不要である。​並行は​「独立した​タスクを​どう​組み立てるか」と​いう​設計の​話であり、​速度​その​ものの​話ではない。

並列​(parallelism)​=同時実行

並列とは、​複数の​タスクを​文字どおり同一瞬間に​実行する​ことである。​これには​複数の​実行単位が​必要で、​CPUコアが​2つ以上​あるか、​複数台の​マシンが​要る。​CPUを​多く​使う​処理に​おいて、​実時間​(=時計で​測った​実際の​所要時間)を​実際に​短く​するのは​この​並列である。​並列は​「並行と​いう​設計を​速く​走らせる​一つの​手段」に​すぎず、​並行と​いう​設計が​あって​はじめて​並列が​活きる。

カフェのたとえ​(補足と​して)

並行の​例は、​1人の​バリスタが​注文を​受け、​マシンを​回し、​抽出を​待つ間に​次の​注文を​受ける、と​いうやりくりである。​並列の​例は、​2人の​バリスタが​同じ​瞬間に​それぞれ1​杯ずつ作る、と​いう​本当の​同時性である。​したがって​並行は​並列なしでも​成立し​(1人の​バリスタの​やりくり)、​並列には​働き手が​2人以上​必要に​なる。​Claude Code​(=Anthropic製の​AIコーディング支援ツール)の​ワークフローで​言えば、parallel() は​多数の​エージェントを​並行に​列へ​並べるが、​真の​並列実行は​(CPUコア数−2)が​上限であり、​残りは​順番待ちに​なる。

まとめ

並行は​「構造」​(多数の​タスクを​切り替えてさばく​設計)であり、​並列は​「実行」​(同一瞬間に​走らせる​こと・複数コアが​必要)である。​1コアは​並行には​なれるが、​決して​並列には​なれない。

出典・参考

148 notestil