athere
반응형

아주 중요한 포인트예요!
asyncio가 병렬처럼 느껴지지만, 실제로는 진짜 병렬 처리는 아닙니다.
아래처럼 정리할 수 있어요:


1. ✅ asyncio는 동시성(concurrency) → 병렬(parallelism) 아님

구분 의미 실제 동작 방식 예시

동시성 여러 작업을 번갈아가며 실행 싱글 스레드에서 I/O 기다릴 때 다른 작업 실행 asyncio, await, aiohttp
병렬성 여러 작업을 동시에 실행 멀티코어에서 동시에 여러 스레드/프로세스 실행 threading, multiprocessing

2. ✅ asyncio는 실제로 어떻게 작동하나?

  • await 키워드가 붙은 부분에서 I/O 대기 중인 동안,
  • 이벤트 루프가 다른 작업을 실행하도록 스케줄링
  • CPU를 많이 쓰는 작업은 블로킹이 됨 (즉, 비효율)

2.1. 예시 (진짜 병렬처럼 보이는 이유):

<code />
async def fetch_klines(symbol): async with aiohttp.ClientSession() as session: async with session.get(f"https://api.binance.com/api/v3/klines?symbol={symbol}&interval=1m") as resp: data = await resp.json() return data
  • 여기서 await resp.json()은 네트워크 I/O 기다림
  • 그 시간 동안 다른 fetch_klines()도 실행됨 → "거의 동시에" 실행처럼 보임

3. ✅ 진짜 병렬이 필요한 경우?

  • CPU-heavy 작업 (예: 대량 데이터 연산, 백테스트 등)
  • asyncio는 이 경우 **멀티프로세싱(multiprocessing)**과 함께 써야 병렬 처리 가능
<code />
from multiprocessing import Pool with Pool(4) as p: results = p.map(cpu_heavy_function, symbol_list)

4. ✅ 결론: 요약 한 줄

asyncio는 I/O-bound 작업을 빠르게 "동시 처리"하기 위해 설계되었고,
실제 CPU 병렬 처리를 원한다면 multiprocessing이나 threading이 필요합니다.


필요하면 asyncio와 threading, multiprocessing을 섞어서 쓰는 하이브리드 구조 예제도 만들어 드릴 수 있어요!

반응형
profile

athere

@athere

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!