러스트는 안전성, 우수한 성능, 간결한 문법, 비동기 프로그래밍 지원 등 현대적인 프로그래밍 환경에 최적화된 언어로 꼽힌다. 비록 러스트가 학습하기 어려운 언어이지만, 여러 해 동안 개발자들로부터 큰 주목을 받고 있는 이유이기도 하다. 더불어 마이크로소프트, 구글, 아마존 같은 글로벌 IT 기업들에서 러스트를 적극적으로 활용하고 있다. 현재 인프라 환경은 멀티 코어 프로세서의 보편화로 동시성과 병렬성이 중요해지면서 그 중요도는 지금보다 더 높아질 것이고, 러스트는 미래의 언어가 될 것이다.
이 책은 러스트의 안전성과 빠른 속도라는 강점을 최대한 활용하는 방법을 소개한다. 특히 러스트의 메모리 모델을 중점으로 다루며, Arc나 Mutex와 같은 동시성 도구가 어떻게 동작하는지를 다양한 예제 코드와 함께 자세히 설명한다. 이를 통해 독자는 고수준의 실무 경험을 쌓을 수 있으며, 러스트를 활용한 효과적인 동시성 프로그래밍에 대한 이해를 한층 더 향상시킬 수 있다. 러스트를 처음 배우려는 개발자뿐만 아니라, 다른 언어에서 동시성 코드를 개발하려는 개발자에게도 유용한 핵심 가이드가 되어줄 것이다.
Contents
CHAPTER 1 러스트 동시성의 기초
1.1 러스트의 스레드
1.2 범위 스레드
1.3 스레드 소유권과 레퍼런스 카운팅
1.4 소유권 대여와 데이터 경합
1.5 내부 가변성
1.6 스레드 안전성: Send와 Sync
1.7 잠금: 뮤텍스와 RwLock
1.8 대기: 파킹과 조건 변수
요점 정리
CHAPTER 2 아토믹
2.1 아토믹한 데이터 load 및 store 연산
2.2 fetch-and-modify 연산
2.3 compare-and-exchange 연산
요점 정리
CHAPTER 3 메모리 순서
3.1 메모리 순서 재정렬과 최적화
3.2 메모리 모델
3.3 happens-before 관계
3.4 느슨한 메모리 순서
3.5 해제 순서와 획득 순서
3.6 소비 순서
3.7 순차적으로 일관된 순서
3.8 펜스
3.9 자주 발생하는 오해
요점 정리
CHAPTER 4 스핀 락 구현해보기
4.1 가장 간단한 구현체
4.2 Unsafe 스핀 락
4.3 잠금 가드를 사용한 안전한 인터페이스
요점 정리
CHAPTER 5 채널 구현해보기
5.1 간단한 뮤텍스 기반 채널
5.2 언세이프 원샷 채널
5.3 런타임 검사를 통한 안전성
5.4 타입을 사용한 안전성
5.5 할당을 피하기 위한 소유권 대여
5.6 차단
요점 정리
CHAPTER 6 Arc 구현해보기
6.1 기본적인 레퍼런스 카운팅
6.2 위크 포인터
6.3 최적화
요점 정리
CHAPTER 7 프로세서 이해하기
7.1 프로세서 명령어
7.2 캐싱
7.3 재정렬
7.4 메모리 순서
요점 정리
CHAPTER 8 운영체제의 기본 요소
8.1 커널 인터페이스
8.2 pOSIX
8.3 리눅스
8.4 맥OS
8.5 윈도우
요점 정리
CHAPTER 9 잠금 구현해보기
9.1 뮤텍스
9.1.1 시스템 콜 피하기
9.1.2 좀 더 최적화해보기
9.1.3 벤치마킹
9.2 조건 변수
9.2.1 시스템 콜 피하기
9.2.2 가짜 깨우기 피하기
9.3 읽기/쓰기 잠금
9.3.1 쓰기 스레드의 무의미한 반복 피하기
9.3.2 쓰기 고갈 피하기
CHAPTER 10 아이디어와 제안
10.1 세마포어
10.2 RcU
10.3 잠금 없는 연결 리스트
10.4 큐 기반 잠금
10.5 parking lot 기반 잠금
10.6 순차 잠금
10.7 교육용 자료
Author
마라 보스,윤인도
러스트 라이브러리 팀의 리더. 러스트 표준 라이브러리를 유지하고 러스트에서 실시간 제어 시스템을 구축한다. 그녀가 설립한 회사 Fusion Engineering에서 수년간 동시성 시스템을 운영했다. 또한 러스트 시스템에서 가장 많이 사용되는 라이브러리를 유지하고 안전에 중요한 시스템을 매일 작업하면서 실무에 실제로 적용할 수 있는 경험을 쌓았다.
러스트 라이브러리 팀의 리더. 러스트 표준 라이브러리를 유지하고 러스트에서 실시간 제어 시스템을 구축한다. 그녀가 설립한 회사 Fusion Engineering에서 수년간 동시성 시스템을 운영했다. 또한 러스트 시스템에서 가장 많이 사용되는 라이브러리를 유지하고 안전에 중요한 시스템을 매일 작업하면서 실무에 실제로 적용할 수 있는 경험을 쌓았다.