저자는 Java를 배운 경험을 바탕으로 Go의 동시성(concurrency)도 비슷할 것이라고 예상했지만, 상당한 관점의 변화에 놀랐습니다. 핵심적인 차이점은 문법이 아니라, 각 언어가 동시성에 대해 어떻게 생각하도록 유도하는가에 있었습니다. Java는 스레드를 명시적으로 관리해야 하며, 객체를 생성하고 완료를 위해 조인(join)해야 합니다. 반면, Go는 `go` 키워드를 사용하여 시작되는 가볍고 일회용인 고루틴(goroutine)을 사용합니다. Java의 접근 방식은 스레드 중심적이며, 스레드 관리와 생명 주기에 초점을 맞추는 반면, Go는 작업을 조정하는 데 중점을 둡니다. Go는 `WaitGroup`을 사용하여 완료를 추적하며, 개별 스레드에서 전체 작업 완료로 초점을 이동시킵니다. 이러한 변화는 "여러 작업을 동시에 실행하고 대기"하는 간단한 문제를 두 언어에서 비교함으로써 나타납니다. Java에서는 개별 스레드를 관리하는 반면, Go에서는 작업을 정의하고 `WaitGroup`을 사용하여 전체 완료를 기다립니다. 이러한 변화는 Go의 동시성을 더 쉽게 이해하고 추론할 수 있게 해주며, 수행되는 작업에 더 집중하게 합니다. 저자는 Go의 모델이 독립적인 작업과 그 완료에 중점을 둔다는 것을 깨달았습니다. 이러한 작업 중심성은 Go에서 동시성 코드를 더 쉽게 이해할 수 있도록 해줍니다. 이러한 사고 방식의 변화는 Go의 동시성 모델을 훨씬 쉽게 이해하는 데 기여했습니다. `WaitGroup`은 필수적인 구성 요소로, 작업 완료에 집중할 수 있도록 해줍니다. 이러한 사고 방식의 변화는 저자가 Go의 동시성을 이해하는 데 핵심적인 역할을 했습니다.
dev.to
From Managed Threads to Independent Tasks: Rethinking Concurrency from Java to Go (Part 1)
Create attached notes ...
