TL;DR

複数のプロセスを並行して動かし、タスクを処理すること。

仕組み

1 つの CPU を複数のプロセスで共有することを指す場合もあれば、1 つのシステム内で複数の CPU が複数のスレッドを動かすこと(マルチプロセッサ)を指す場合もある。

例

curl -s https://www.rfc-editor.org/rfc/rfc1122.txt | wc を実行すると、シェルは 2 つのプロセスを fork して並行に動かす。

$ ps -a
PID   TTY        TIME    CMD
52146 ttys000    0:00.00 curl
52147 ttys000    0:00.00 wc

1 つ目のプロセス(PID 52146)は curl を実行し、URL からテキストファイルをダウンロードする。2 つ目のプロセスは wc を実行する。

| を使うと、OS にバッファを割り当てさせ、curl の出力と wc の入力をそのバッファにリダイレクトさせられる。curl のプロセスはバッファがいっぱいになると待ち、wc がバッファを消費すると再開する。逆に wc のプロセスは、バッファが空になると curl が出力するまで待つ。

curl はすべてのテキストを読み終えると終了し、これ以上データがないことを示すマーカをパイプに置く。このマーカは、もうデータは来ないので終了してよいという wc への通知になる。

関連

出典