本ページはプロモーション(PR)が含まれています
更新日: 2026/02/04

Pythonでわかる「並行処理」と「並列処理」の違いについて

並行処理

「並列処理」と「並行処理」は日本語の場合、一文字違いで言葉も似ているため、混乱しがちです。ですが、ポイントを押さえると違いはシンプルで、Pythonの例と一緒に今回は整理しました。

並行処理と並列処理の違い

ふゅか
ふゅか
「並列処理」と「並行処理」って、名前が似すぎて毎回こんがらがるよね!
はるか
はるか
一文字違い。中身は別。

並行処理(concurrency)

並行処理は、複数の処理が同時に進んでいるように見せる仕組みです。

たとえばCPUのコアが1つでも、処理Aと処理Bを短い時間ごとに切り替えながら進めれば、
外から見ると「同時に動いている」ように見えます。

重要なのは、並行処理の目的が「待ち時間を有効活用すること」にある点です。

  • 待ち時間が長い処理に向いている
  • 例:Web APIアクセス、DBアクセス、ファイル読み書きなど
  • いわゆるI/Oバウンドな処理で効果が出やすい

並列処理(parallelism)

並列処理は、複数の処理を本当に同時に実行する仕組みです。

CPUのコアが複数ある環境で、処理Aをコア1、処理Bをコア2のように割り当てることで、
同じタイミングで処理が進みます。

並列処理の目的は、重い計算を分担して速く終わらせることです。

  • CPUに負荷がかかる処理に向いている
  • 例:画像処理、動画変換、大量データの集計、シミュレーションなど
  • いわゆるCPUバウンドな処理で効果が出やすい

並行処理(asyncio)

まずは並行処理をasyncioで実装してみましょう。

import asyncio

async def task(name, delay):
    print(f"{name} 開始")
    await asyncio.sleep(delay)  # 待っている間に他のタスクへ切り替え可能
    print(f"{name} 終了")

async def main():
    # 複数のタスクを並行して実行
    await asyncio.gather(
        task("タスク1", 2),
        task("タスク2", 1),
        task("タスク3", 3)
    )

if __name__ == "__main__":
    asyncio.run(main())

このコードは、3つのタスクを「同時に進めているように」見せる例です。
ポイントは await asyncio.sleep() の部分で、ここで待っている間に別のタスクへ処理が切り替わります。

そのため、タスクマネージャーで確認しても、Pythonは1つのプロセスしか立ち上がらないことを確認できます。

並列処理(multiprocessing)

次に並列処理をmultiprocessingで実装してみましょう。

import multiprocessing
import time

def task(name, delay):
    print(f"{name} 開始")
    time.sleep(delay)  # 例としてスリープ(実際は計算処理を想定)
    print(f"{name} 終了")

if __name__ == "__main__":
    # 複数のプロセスを並列に実行
    processes = [
        multiprocessing.Process(target=task, args=("タスク1", 2)),
        multiprocessing.Process(target=task, args=("タスク2", 1)),
        multiprocessing.Process(target=task, args=("タスク3", 3)),
    ]

    for p in processes:
        p.start()

    for p in processes:
        p.join()

このコードは、タスクを別プロセスとして起動します。
そのため、タスクマネージャーでPythonを確認すると、複数のプロセスが立ち上がることが分かります。

実行結果(表示の順序)が並列処理と同じですが、内部では「1プロセスで切り替え」ではなく、複数プロセスで同時進行している点が大きく異なります。

関連記事