【へいこうしょり】

並行処理 とは?

最終更新:
💡 複数の仕事を、進行中として扱う

複数の仕事が進行するように、処理の順序や待ち時間を扱う設計。並列処理との違い、非同期処理と共有データの注意点を解説します。

📌 このページのポイント
並行:複数の仕事を進行中として扱う一つの実行資源で交互に進める例ABAB時間 →複数の資源で並列に進める例資源1資源2ABどちらも並行な仕事の進め方
AとBは二つの仕事で横方向は時間です。実行時間の長さの比較ではなく、下が常に速いことや、仕事数とスレッド数が一致することは示しません。
ひよこ ひよこ
並行処理は、同時に動いているように見せること?
ペンギン先生 ペンギン先生
見え方だけの話ではないよ。複数の仕事が進行するように、処理を組み立てることだ。料理でお湯が沸くのを待つ間に野菜を切るように、待ちや実行を組み合わせると考えてみよう。
ひよこ ひよこ
並列処理とは、何が違う?
ペンギン先生 ペンギン先生
並列処理は、複数の計算などを同じ瞬間に実行すること。並行な仕事は、一つの実行資源で交互に進める場合も、複数の資源で並列に進める場合もあるよ。並行は必ず一つずつ動く、という区別ではないんだ。
ひよこ ひよこ
Webサーバーでは、何に役立つ?
ペンギン先生 ペンギン先生
一つのリクエストで通信やデータ取得を待っている間に、別のリクエストへ対応できる。多数の仕事を扱う方法だけれど、全利用者の待ち時間がなくなるわけではない。使う資源や接続数も考えるよ。
ひよこ ひよこ
asyncと書けば、計算も並列になる?
ペンギン先生 ペンギン先生
それだけではならないよ。JavaScriptのasync/awaitは、Promiseを扱う非同期の書き方だ。同じ実行スレッドで長い計算を続けると、ほかの仕事が進めなくなる場合がある。待つ処理と、計算を別の資源へ分けることを区別しよう。
ひよこ ひよこ
気を付けることは?
ペンギン先生 ペンギン先生
共有する値を変える順序や、複数の仕事の完了と失敗を管理する。途中の値を別の仕事が読んでしまう競合や、互いの完了を待つデッドロックを避ける設計が必要だよ。仕事を増やすだけで必ず速くなるわけではない。
もっと詳しく知りたい人へ

スレッドを増やせばよい?

実行環境や処理によります。通信の待ちが多い仕事と、CPUで計算を続ける仕事では使う資源が違います。切り替えや同期の負担もあるため、時間・負荷・正しさを確認します。

非同期なら、共有データの心配はない?

待っている間に別の処理が進むと、読んだ値が再開時には変わっている場合があります。一つのスレッドでも、待ちをまたいだ処理の順序を考えます。必要に応じて、変更を一か所で管理するなどの方法を選びます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「並行処理」って出てきたら「複数の仕事を、進行中として扱う仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Concurrency」 = 複数の仕事が進行していること
💬 Parallelismは同じ瞬間の実行を指します。並行な設計を、交互にも並列にも実行できます。

参考資料

← 用語集にもどる