성장通

[리뷰] 동시성 프로그래밍: Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z 본문

리뷰/도서 리뷰

[리뷰] 동시성 프로그래밍: Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z

백악기작은펭귄 2022. 9. 16. 23:47

* 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

동시성 프로그래밍: Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z

다카노 유키 저

 

 

동시성 프로그래밍 - 교보문고

Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z | 동시성 프로그래밍 구현과 이론을 이 정도로 넓게 다룬 책은 없다 네트워크로 연결된 모든 시스템에는 동시성 프로그램이 적용

www.kyobobook.co.kr


간단 서평

우리가 음원 스트리밍 어플로 음악을 들으면서 동시에 웹 서핑을 하고 메신저 앱으로 메시지를 하는 것.
이는 모두 동시성 프로그래밍 덕분이라고 해도 과언은 아니다.

 

싱글코어에서, 멀티태스킹을 위한 시분할을 구현하여 여러 일을 동시다발적으로 처리하는 동시성 프로그래밍은, 물리적으로는 단일 업무를 수행하지만 논리적으로는 여러 가지 업무를 동시에 수행할 수 있게 해준다.


물론 최근에는 하드웨어의 발전으로 멀티 코어가 가능해지면서 물리적으로도 여러 일을 동시에 처리하는 병렬 프로그래밍이 많이 사용되지만, 동시성 프로그래밍을 잘 이해할 필요는 여전히 존재한다.

동시성 프로그래밍의 구조를 이해하고, 동기 처리, 레이스 컨디션, 비동기 처리 증 다양한 특징들을 정확히 숙지한다면 훨씬 성능 좋고 안정적이며 유지보수성이 높은 소프트웨어를 만들 수 있다.

 

이 책은 어셈블리 언어와 알고리즘, 계산 모델에 이르는 광범위한 주제를 담고 있는만큼 동시성 프로그래밍을 공부하고자 하는 사람들에게는 항상 가지고 다니며 참고할만한 가이드가 되리라 생각한다.

 

사실 동시성 프로그래밍의 개념은 어셈블리, C와 같은 저수준 언어에서 다루는 경우가 많은만큼 고수준 언어인 파이썬의 입지가 커지고 있는 요즘에는 배우려 하는 사람들이 많지는 않을 것 같다.
하지만 그런만큼 동시성 프로그래밍을 완벽히 숙지한 개발자는 매년 쏟아져나오는 많고 많은 개발자 사이에서 더욱 돋보이게 되지 않을까 싶다.

 

솔직히, 개발자보다는 리서처의 길을 가겠다는 핑계로 효율적인 개발을 등한시하였었는데, 그런 나에게 이 책은 다시금 나를 일깨우는 신선한 자극이 되었던 것 같다.

 

C, C++보다는 파이썬의 화려함과 간편함에 길들여진 (마치 나같은) 사람들에게 특히 추천한다.


목차

CHAPTER 1 동시성과 병렬성
1.1 프로세스
1.2 동시성
1.3 병렬성
1.4 동시 처리와 병렬 처리의 필요성

 

CHAPTER 2 프로그래밍 기본
2.1 어셈블리 언어
2.2 C 언어
2.3 Rust 언어

 

CHAPTER 3 동기 처리 1
3.1 레이스 컨디션
3.2 아토믹 처리
3.3 뮤텍스
3.4 세마포어
3.5 조건 변수
3.6 배리어 동기
3.7 Readers-Writer 락
3.8 Rust 동기 처리 라이브러리
3.9 베이커리 알고리즘

 

CHAPTER 4 동시성 프로그래밍 특유의 버그와 문제점
4.1 데드락
4.2 라이브락과 굶주림
4.3 은행원 알고리즘
4.4 재귀락
4.5 의사 각성
4.6 시그널
4.7 메모리 배리어

 

CHAPTER 5 비동기 프로그래밍
5.1 동시 서버
5.2 코루틴과 스케줄링
5.3 async/await
5.4 비동기 라이브러리

 

CHAPTER 6 멀티태스크
6.1 멀티태스크
6.2 협조적 그린 스레드 구현
6.3 액터 모델 구현

 

CHAPTER 7 동기 처리 2
7.1 공평한 배타 제어
7.2 소프트웨어 트랜잭셔널 메모리
7.3 락프리 데이터 구조와 알고리즘

 

CHAPTER 8 동시 계산 모델
8.1 수학적 표기
8.2 λ 계산
8.3 액터 모델
8.4 π 계산

 

APPENDIX A AArch64 아키텍처
A.1 레지스터
A.2 기본 연산 명령
A.3 메모리 읽기 쓰기
A.4 조건부 명령 실행과 점프
A.5 호출 규약
A.6 예

 

APPENDIX B x86-64 아키텍처
B.1 레지스터
B.2 AT&T 기법
B.3 기본 연산 명령