← 질문 목록
#74깊이 0

스레드를 늘려도 CPU 병렬성이 없는 이유는?

언어 · 런타임기초동시성

CPython 기본 빌드에서는 같은 인터프리터에 속한 스레드 하나만 한 시점에 파이썬 바이트코드를 실행한다. CPU 연산 스레드를 늘리면 GIL 경합과 전환 비용만 커질 수 있다.

순서스레드 A스레드 B스레드 C
1바이트코드 실행GIL 대기GIL 대기
2GIL 대기바이트코드 실행GIL 대기
3GIL 대기GIL 대기바이트코드 실행

셋을 띄워도 한 칸에 하나만 돈다. 코어가 넉넉해도 마찬가지다. 늘린 만큼 기다리는 줄만 길어진다.

기준CPU 연산I/O 대기
스레드 효과GIL 경합대기 중 다른 스레드 실행
주된 선택멀티프로세스스레드·비동기

대기하는 많은 I/O 호출과 일부 네이티브 확장은 GIL을 놓는다. 그래서 네트워크 작업이나 GIL을 해제하는 수치 연산은 스레드로도 겹쳐 실행할 수 있다.

멀티프로세스는 CPU 병렬성을 얻지만 메모리와 직렬화 비용을 낸다. GIL도 복합 연산의 논리적 경쟁까지 막지 않으므로 공유 상태는 따로 동기화해야 한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

스레드를 늘려도 CPU 병렬성이 없는 이유는?