自作コンパイラの部屋 > 用語集 > コンカレント

>h3>コンカレント

 コンカレント(Concurrent)とは、複数のプログラムが同時に、協調して動くことをいう。日本語では「並行」と訳される。類語にParallelがあり、こちらは「並列」と訳す。

 コンカレントのニュアンスは上記の説明では十分に伝わらないので、料理のアナロジーで説明する。

 今「カツカレーセット」を作ることを考えよう。このセットを作るには、部品として、

の四点を作る必要がある。カレーソースや味噌汁は冷めると美味しく ないし、トンカツは揚げたてを食べたい。また、野菜サラダは、 ドレッシングで和えてから時間が経つと水気が出て不味くなる。 となると、この四点を一つずつ順番に(逐次的にという)作るのは 好ましくない。そこで、トンカツを揚げながら、カレーソースを作り ながら、味噌汁を煮ながら、野菜サラダを作ることになる。 この「ながら」がConcurrentの本質である。その際に、作り手が 一人か複数かはどちらでもよい。「ながら」で進めればConcurrentである。

 一方、Parallelの語感は「一緒に」である。カツカレーの例でいうと、 二人以上で「一緒に」作る場合がParallelということになる。

 Concurrent処理の場合に重要なことは「共有資源の管理」である。 カツカレーセットの場合、共有資源(の一つ)はコンロである。家庭用 ガスコンロは通常二口しかないが、トンカツとカレーと味噌汁の三つの プロセスはコンロが必要だ。このため、これら三つが二口のコンロを 取り合うことになる。

 共有資源の管理は、Concurrent処理の場合の基本的な問題であり、 詳しく研究する価値がある。この問題を単純化したモデル的例題として、 ダイクストラの提唱した「食事する哲学者の問題」がある。 Concurrentの処理系や学習者は、一度はこの問題を通らなければならない。 具体的な解決手段としては、セマフォ、モニタ、ランデブーなどがあるが、 これらについては別稿にて説明する。


プログラムというより厳密にはタスクや スレッドというべきだが、これらの用語をまだ説明していないので プログラムの語を敢えて用いた。

目次