並行処理と並列処理

Python Published at April 8, 2025, 2:11 p.m. by admin@senrigan.org

concurrencyとparallelismの違いについて

並行処理 (concurrency)

  • 1CPUで擬似的にタスク同時処理
  • スレッド切り替え、スケジューリング
  • asyncio, threading
  • 使いどころ:I/O-boundな処理
  • DBアクセス、ネットワークの待ち時間
  • コンテキストスイッチ
import asyncio

async def task(n):
    await asyncio.sleep(1)
    print(2**n)

async def main():
    await asyncio.gather(*(task(i) for i in range(1,5)))

asyncio.run(main())

並列処理 (parallelism)

  • マルチコアで物理的にタスク同時処理
  • multiprocessing
  • 使いどころ:CPU-boundな処理
  • デッドロック、リソースの競合 (race condition)
from multiprocessing import Pool
def task(n):
    return 2**n

with Pool(4) as p:
    res = p.map(task, range(1,5))
    print(res)