9가지 언어로 파헤치는 동시성 프로그래밍 핵심 개념!
by DD
3년 전
조회수 10
동시성 프로그래밍의 기본 개념과 병렬 처리, 멀티쓰레딩, 비동기 프로그래밍 용어 비교
쓰레드 풀, 경량 쓰레드, 비동기 프로그래밍을 활용한 동시성 프로그래밍 기법 소개
액터 모델, STM 등 메모리 공유 문제를 해결하는 다양한 동시성 설계 패턴 제시
쓰레드 풀과 경량 쓰레드의 동작 원리
쓰레드 풀은 쓰레드 생성 비용을 줄여 Context Switching 오버헤드를 감소시킨다. 구체적으로, 유휴 쓰레드를 재사용하여 I/O 작업의 반응성을 향상시킨다. 경량 쓰레드는 언어/런타임 레벨에서 태스크 쪼개기를 자동화하여 개발 편의성을 높인다.
Promise, Future, Async-Await의 비교
Promise와 Future는 비동기 작업의 결과를 표현하는 객체이며, Async-Await는 가독성을 높이는 문법적 설탕이다. 따라서 Future 중첩 문제를 해결하고, 코드 가독성을 향상시킨다. 반면, Async-Await는 문법적 설탕이므로, 근본적인 성능 개선을 보장하지는 않는다.
액터 모델과 STM의 장단점
액터 모델은 메모리 공유를 피하여 경쟁 상태를 방지하고, Swift에서 Reentrancy를 통해 데드락을 해결한다. STM은 트랜잭션 기반으로 데이터 일관성을 보장하지만, 롤백으로 인한 성능 저하가 발생할 수 있다. 따라서, 액터는 응답 없는 작업에, STM은 데이터 무결성이 중요한 경우에 적합하다.