Pythonにおける「逐次・並列・並行・同期・非同期処理」を徹底解説

こんにちは、にわこまです!

今回は、プログラミングを学んでいると必ず出てくる用語である 「逐次処理」「並列処理」「並行処理」「同期処理」「非同期処理」 の違いについて解説します。

 

 

スポンサードサーチ


用語の違い一覧表

用語意味実行の仕方同時性主な用途
逐次処理1つずつ順番に処理順番通りなしシンプル処理
並列処理複数処理を同時処理複数CPUで同時ありCPU負荷の高い処理
平行処理複数処理を切り替えて処理時間分割疑似的I/O処理
同期処理処理完了まで待つブロッキングシンプル処理
非同期処理処理完了を待たずに次処理に進むノンブロッキングAPI

 

 

逐次処理(Sequential Processing)

説明

処理を1つずつ順番に実行する最もシンプルなモデルです。

Task A → Task B → Task C → Task Dの順番に処理します。

 

例え

レジに1人しか並べず、1人終わるまで次の人は待つ。

 

Python例

import time

def task(name):
    print(f"{name} start")
    time.sleep(2)
    print(f"{name} end")

task("A")
task("B")

Aが終わってからBが始まります。

 

 

スポンサードサーチ


並列処理(Parallel Processing)

説明

複数の処理を物理的に同時実行します。(CPUコアを複数使用)

Task AとTask Xは同時刻に処理します。
Task BとTask Yは同時刻に処理します。
Task CとTask Zは同時刻に処理します。

 

例え

レジが3台あり、3人同時に会計できる。

 

Python例

from multiprocessing import Process
import time

def task(name):
    print(f"{name} start")
    time.sleep(2)
    print(f"{name} end")

if __name__ == "__main__":
    p1 = Process(target=task, args=("A",))
    p2 = Process(target=task, args=("B",))

    p1.start()
    p2.start()

    p1.join()
    p2.join()

CPUコアを使って本当に同時実行されます。

 

 

並行処理(Concurrency)

説明

複数の処理を切り替えながら進めます(同時に見える)

Task A → Task Y → Task C → Task AAの順番に処理します。

 

例え

料理しながら洗濯する(待ち時間を有効活用)

 

Python例

import threading
import time

def task(name):
    print(f"{name} start")
    time.sleep(2)
    print(f"{name} end")

t1 = threading.Thread(target=task, args=("A",))
t2 = threading.Thread(target=task, args=("B",))

t1.start()
t2.start()

t1.join()
t2.join()

実際は切り替えながら実行します。

 

 

スポンサードサーチ


同期処理(Synchronous)

説明

処理が終わるまで待ちます(ブロッキング)

 

例え

電話で相手が話し終わるまで待つ

 

Python例

import requests

response = requests.get("https://example.com")
print(response.text)

レスポンスが返るまで次に進みません。

 

 

非同期処理(Asynchronous)

説明

処理の完了を待たずに次の処理へ進みます

 

例え

料理を注文して呼び出しベルを受け取る

 

Python例

import asyncio

async def task(name):
    print(f"{name} start")
    await asyncio.sleep(2)
    print(f"{name} end")

async def main():
    await asyncio.gather(
        task("A"),
        task("B")
    )

asyncio.run(main())

I/O待ち時間を有効活用できます。

 

 

スポンサードサーチ


まとめ

今回は、「逐次処理」「並列処理」「並行処理」「同期処理」「非同期処理」 の違いについて解説しました。

 

 

最後までお読みいただきありがとうございます。


スポンサードサーチ