동시성(Concurrency)은 여러 작업이 겹치는 시간 동안 처리되는 것처럼 보이는 구조다. 단일 코어에서도 작업을 빠르게 전환하며 동시에 실행되는 것처럼 보인다.
동시성 vs 병렬성
동시성 (Concurrency):
단일 코어, 작업 전환
A ──→ B ──→ A ──→ B (빠른 전환)
병렬성 (Parallelism):
멀티 코어, 실제 동시 실행
코어1: A ──────────
코어2: B ──────────
python
# asyncio — I/O 바운드 작업에 적합
import asyncio
async def fetch(url):
# I/O 대기 중에 다른 코루틴 실행
await asyncio.sleep(1) # 실제로는 await session.get(url)
return f"data from {url}"
async def main():
tasks = [fetch(f"url{i}") for i in range(5)]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main()) # 5개를 ~1초에 완료 (순차라면 5초)
# threading — I/O 바운드
# multiprocessing — CPU 바운드 (GIL 우회)
관련 개념
참고문헌
- •Goetz et al. Java Concurrency in Practice