세 가지 동시성 모델 — GIL, Virtual Thread, Goroutine
CPython 의 GIL 은 멀티스레드 CPU bound 를 차단하고 우회법을 강제한다. Java 는 OS 스레드 1:1 의 비용을 Java 21 virtual thread 로 우회해 thread-per-request 를 살렸다. Go 는 처음부터 M:N 스케줄러로 goroutine 을 경량화했다. 세 모델이 같은 백엔드 워크로드에서 다른 결정으로 이어진다.
CPython 의 GIL 은 멀티스레드 CPU bound 를 차단하고 우회법을 강제한다. Java 는 OS 스레드 1:1 의 비용을 Java 21 virtual thread 로 우회해 thread-per-request 를 살렸다. Go 는 처음부터 M:N 스케줄러로 goroutine 을 경량화했다. 세 모델이 같은 백엔드 워크로드에서 다른 결정으로 이어진다.
Go의 동시성 모델은 CSP를 기반으로 Goroutine과 Channel을 핵심 도구로 제공한다. 각 도구의 동작 원리와 선택 기준을 정리한다.
Go의 동시성 패턴 세 가지(mutex, channel, lock-free)를 직접 구현하고 벤치마크하며 체화한 과정의 기록.
트랜잭션은 원자성, 락은 직렬성을 담당한다 — 서로 대체재가 아니다. 격리 수준의 기본 읽기로는 못 막는 Lost Update 를 비관적 락과 낙관적 락이 어떻게 메우는가, 그리고 선택 기준.
Rust Book Chapter 20의 멀티스레드 HTTP 서버를 따라 구현하며 소유권과 동시성이 타입 레벨에서 강제되는 것을 체감한 기록.