메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

[리뷰] 동시성 프로그래밍

dong2***

|

2022-04-23

동시성 프로그래밍

Rust 언어를 중심으로 어셈블리어, C 언어를 사용해 CPU 아토믹 처리, 소프트웨어 트랜잭셔널 메모리, async/await 등 동시성 프로그래밍과 관련된 이론적 배경부터 구현까지 설계자 입장에서 살펴본다.

  • 저자 : 다카노 유키
  • 번역 : 김모세
  • 출간 : 2022-04-05

1.jpg

현 시대를 살고 있는 사람들은 남녀노소 누구나 핸드폰을 사용하고 있습니다. 2000년대 처럼 단순 통화, 문자뿐만 아니라 핸드폰으로 인터넷 방송이나 동영상을 시청하거나 게임, 웹 서핑등도 즐기고 있게 되었습니다. 특히 2014년부터 게임을 하면서 문자나 통화를 하거나, DMB 또는 유튜브를 시청하면서 그림을 그리는 등의 동시성 작업이 가능해지게 되었습니다.

 

동시성 프로그램밍은 쉽게 말하자면 스마트폰으로 스트리밍 음원(혹은 장치에 저장된 음원)을 들으면서 모바일 브라우저를 열어 웹 브라우징을 하고, 화면을 분할해 한쪽에 메모를 하거나 메신저 애플리케이션으로 메세지를 보내는 등의 네트워크로 연결된 모든 시스템에서 동시적으로 작업이 가능하게끔 하는 프로그래밍입니다.

동시성 프로그래밍의 개념은 대부분 저수준 언어(어셈블리 등)에서 구현되므로 추상화된 고수준 언어에서는 크게 신경을 쓰지 않는 경향이 있으며 고수준 언어와 저수준 언어의 소통을 담당하는 가상 머신 등에 그 역할을 모두 맡기면 된다고 말하기도 합니다. 그러나 런타임, 즉 프로그램이 작동하는 하드웨어, OS, 라이브러리 등에 관한 이해가 높을수록 실행속도가 높고 메모리 효율(성능)이 좋은 설계와 구현을 할 수 있습니다. 성능 향샹은 물론 구조적인 허점을 피해 보다 안전하고 유지보수성이 높은 소프트웨어를 만들 수도 있을 것입니다.

 

제가 이 책을 선택한 이유는 이 책이 동시성 프로그래밍의 구조를 이해하고 이를 통해 동시성 프로그래밍의 본질적인 어려움에 도전할 수 있도록 쓰였으며 동시성 개념에서 시작해 동시성 프로그래밍이 갖는 독특한 특징(동기 처리, 레이스 컨디션, 락, 비동기 처리, IO 다중화, 멀티태스킹 등), 어셈블리 언어와 알고리즘, 계산 모델에 이르는 광범위한 주제를 담고 있기 때문에 동시성 프로그램에 대한 기초를 탄탄히 학습할 수 있기 때문입니다.

 

이 책의 특성은 동시성 프로그래밍과 관련된 주제를 전반적으로 다루고 있고 흔히들 동시성 프로그래밍은 동시성 프로그램의 구조를 이해하지 못하는 데서 느끼는 어려움과 동시성 프로그래밍의 본질적 어려움때문에 개발자들이 많이 어렵다고 말을 하는데 이 책은 전자의 어려움을 해소하고 후자의 어려움에 본격적으로 도전할 수 있도록 해주는 입문서같은 책으로 다른 책과 다르게 어셈블리에서 알고리즘, 계산 모델에 이르는 광범위한 주제를 총체적으로 다룬 세계 최초의 책입니다. 또한 이 책은 C언어와 어셈블리 언어도 절반정도 사용하고 있지만 Rust언어를 주로 이용해서 설명하고 있는데 Rust 언어를 중심으로 선택한 이유는 Rust가 동시성 프로그래밍에서 안정성을 제공하고, 메모리를 고려해 코드를 작성할 수 있으며 async/await 등의 고급 개념을 적용하고 있기 때문입니다. 

 

구성

Chapter 1: 동시성과 병렬성

Chapter 2: 프로그래밍 기본

Chapter 3: 동기 처리1

Chapter 4: 동시성 프로그래밍 특유의 버그와 문제점

Chapter 5: 비동기 프로그래밍

Chapter 6: 멀티태스크

Chapter 7: 동기 처리2

Chapter 8: 동시 계산 모델

APPENDIX A: AArch64 아키텍쳐

APPENDIX B: x86-64 아키텍쳐

 

파트별로 나누어 봤을때 1장은 동시성의 개념과 주변 기술을 설명하고 동시성 프로그래밍이 중요한 이유에 대해 나오는데 대부분 컴퓨터 기술에 대해 설명하고 있고 2장은 어셈블리 언어, C 언어, Rust 언어 및 프로그래밍 언어의 기본 개념과 구문 등에 대해, 3~4장은 동시성 프로그래밍의 필수 사전 지식인 동기 처리 알고리즘과 동시성 프로그래밍 특유의 버그에 대해, 5장은 비동기 프로그래밍, 특히 IO다중화와 Rust 언어의 async/await에 관해 설명하는데 async/await를 구현하기 위한 기반 기술, 코루틴 및 IO다중화에 대해, 6장은 Rust 언어를 이용해 액터 모델을 사용자 공간에서 구현하는 멀티태스크에 대해, 7장은 공평한 동기 처리, 소프트웨어 트랜잭셔널 메모리(동기 처리 기법), 락프리 데이터 구조(알고리즘)와 문제점 등 보다 고도의 동기 처리 기술에 대해, 8장은 동시성 프로그래밍을 계산 모델의 측면에서 보았을 때에 대해 설명하고 있습니다.

 

개인적인 생각으로 학습은 프로그램 개발자로 취업을 희망하시거나 다른언어를 사용하여 취업한지 얼마 되시지 않는 이제 막 개발자로 시작한 초보자이신 분들께서는 C언어와 Rust 언어 둘 다 관련 입문서를 먼저 학습하시고, C 언어나 Rust 언어를 사용하시는 개발자분들은 C 언어 또는 Rust 언어 관련 입문서를 먼저 학습하시고 난 뒤 1장부터 시작하시면 좋을 것 같고 어느정도 경험이 있으신 분들(프로그램 개발자 2년차~)부터는 2장까지는 쭉 보시면서 동시성의 개념과 주변 기술, 어셈블리 언어, C 언어, Rust 언어의 기본 구문 등에 대해 숙지한다는 방식으로 보시고 3장부터 학습하시는 것이 좋을것 같습니다. 그리고 이책에서는 코드를 테스팅하는 환경의 OS로 리눅스를 사용하기 때문에 리눅스를 사용한 경험이 없으신 분들은 리눅스 기본 사용방법에 대해 알아두셔야 합니다

 

개인적으로 약간의 단점이 어쩌면 욕심일수도 있는게 좀더 많은 실습 예제가 담겨있으면 더 좋았지 않았을까라는 아쉬움이 있습니다.

 

저의 리뷰를 읽어주셔서 감사합니다. 다음에는 좀더 유용하고 좋은 책을 소개하면서 더 나은 리뷰를 통해 여러분께 책을 소개시켜드릴 수 있도록 더 노력하겠습니다.

 

 

 

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

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?