반응형
아주 중요한 포인트예요!
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을 섞어서 쓰는 하이브리드 구조 예제도 만들어 드릴 수 있어요!
반응형
'IT > SystemTrading' 카테고리의 다른 글
1분당 API 제한이 2400회일 경우 더 빠르게 처리하는 방법은 크게 두 가지입니다: (0) | 2025.04.07 |
---|---|
위험 고지 의무, 알려야할까? (1) | 2024.10.10 |
시스템 트레이딩 전략의 기초 요소 3가지 (0) | 2024.07.15 |
시스템 (알고리즘) 트레이딩 기초 (0) | 2024.06.23 |