스레드가 좋다는 결론이 아니라, 프로세스 대비 비용 구조와 그 대가로 떠안는 동기화 부담을 같이 보는지 가르려는 질문이다.
멀티태스킹은 프로세스 단위로 시간을 나눠 동시 실행감을 만들지만, 프로세스 전환은 메모리 매핑·캐시·페이지 테이블까지 갈아끼우는 무거운 작업이라 자주 일어날수록 비용이 커진다. 또 프로세스 사이는 주소공간이 격리돼 있어 데이터를 주고받으려면 IPC라는 별도 채널을 거쳐야 한다. 스레드는 같은 프로세스의 메모리(특히 힙)를 공유하면서 실행 단위만 가볍게 늘리는 방식이라, 전환 비용이 낮고 협업이 쉬워진다. 대신 공유 메모리에서 가시성·원자성 문제가 새로 생겨 락·CAS·메모리 모델 같은 동기화 비용을 떠안고 가야 하고, 진짜 코어 병렬이 필요하면 멀티프로세싱이라는 또 다른 축을 같이 본다.
스레드 수를 늘렸는데 처리량이 오히려 떨어진 지점을 측정해 본 경험이 있다면 동기화·전환 비용 사례로 연결할 수 있다
공유 상태를 메시지 패싱·불변 객체로 바꿔 락을 줄인 경험이 있다면 동시성 모델 선택 관점에서 말할 수 있다
CPU 바운드 작업을 별도 프로세스로 빼본 적이 있다면 스레드 한계와 멀티프로세싱 자리를 엮을 수 있다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.