업무로 분석하는 프로그램들이 주로 실시간, 동시에 돌아가야 하는 기능들이 많다보니

내부적인 소스코드도 병렬로 동시에 동작하는 코드들이 많이 포함되어 있는데요.

하지만... 어떤 원리와 흐름으로 짜여진 코드인지를 잘 파악을 못하다 보니 코드리딩과 분석에 어려움이 많았습니다.

 

그러던 차에 읽게된 "동시성 프로그래밍" 책!

 

 

 

동시성 프로그래밍이란, 쉽게 이해하자면 스마트폰을 예시로 들어 스마트폰애서 음악을 들으면서 인터넷을 하고, 분할 화면에서 카카오톡을 보내고 사진도 찍고, 유투브도 보고... 이 모든 것을 동시에 실행시켜서 할 수 있다는 것입니다. 

 

처음부터 나오는 개념은 동시성과 병렬성이 차이가 있다는 것이었습니다. 저는 여태 같은 개념으로 알고 있어서 혼용해서 쓰고 있었는데요...

 

동시성은 2개 이상의 프로세스가 동시에 계산을 진행하는 상태를 나타내는 용어이고,

병렬성은 같은 시각에 여러 프로세스가 동시에 계산을 실행하는 상태를 의미한다고 합니다.

 

얼핏 보면 정의를 봐도 같은 개념인 것 같지만, 이 책에서는 그림으로 프로세스 A와 B의 상태를 놓고 구분을 합니다.

즉, A 프로세스 실행상태 + B 프로세스 실행상태 = 동시성 (O) 병렬성(O) 둘다 가짐

    A 프로세스 실행상태 + B 프로세스 대기상태  = 동시성 (O) 병렬성(X) 으로 보고,

 

"병렬성" 은 대기상태를 제외하고 두 개 이상의 프로세스들이 같이 "실행상태" 일 때만 병렬 실행으로 봅니다.

 

그렇게 놓고 보면 동시성은 병렬성을 포함하면서 조금 더 큰 개념이라고 할 수 있습니다.

이 책은 동시성 프로그래밍을 다루고 있으니 같은 시간에 여러 프로세스가 같이 실행되거나(병렬성), 대기 중에도 다른 일을 할 수 있는(동시성) 처리가 가능해지면서 보다 효율적인 리소스 활용과 여러 프로세스의 공평한 실행, 편리함을 누릴 수 있습니다. 반면에 실행 패턴이 복잡해지기 때문에 동시성 프로그래밍을 잘 이해하여 설계, 구현하는 것이 중요합니다. 

 

이 책에서는 동시성 프로그래밍의 원리를 어셈블리 언어, C 언어, Rust 언어를 구현하면서 설명합니다. 

어셈블리 언어를 통해 주로 동시성 프로그래밍의 개념이 구현되는 저수준 언어에서 동시성 프로그래밍의 동작원리를 보다 심층적으로 이해할 수 있어서 어셈블리 언어를 구현 예시로 들었고, C언어는 운영체제(OS)의 구현 언어이기도 하고 하나의 프로세스 내에서 여러 개의 스레드가 동작하는 멀티스레드용 라이브러리(Pthread) 등 다양한 라이브러리들이 C언어로 구현되어 있기 때문에 C언어도 동시성 프로그래밍의 원리를 이해하는 하나의 언어로써 이 책에서의 구현 언어 예시로 선정하였다고 합니다. 또, Rust는 동시성 프로그래밍에서 안정성을 제공하고 메모리를 고려하여 코드 작성도 가능하고 async, wait 등의 고급 개념도 적용하고 있기 때문에 예시를 들었다고 합니다. Rust는 저도 잘 모르는 언어인데, 동시성 프로그래밍 관점으로 더 고려해서 만들어진 언어라고 합니다.

 

이 책에서는 컴퓨터 학과 전공이라면 운영체제 시간에 배우는 동기 처리 알고리즘과 관련된 기본적인 설명 뿐만 아니라 동시성 프로그래밍의 버그 혹은 문제점/특징(데드락, 라이브락, 재귀락, 의사 각성, 시그널), 관련 회피 방법(은행원 알고리즘, 메모리 배리어) 등도 설명합니다. 

 

그리고 비동기 프로그래밍과 IO 다중화, async/await 사용 방법과 구조, 멀티태스크와 공평한 동기처리, 소프트웨어 트랜잭셔널 메모리(STM, Software transactional memory), lock-free data 구조 등 고도화된 동기 처리 기술도 다룹니다. 

 

이 책의 좋은 점은 샘플 코드와 샘플코드의 설명이 구체적인 점, 용어의 정의를 명확하게 제시하는 점, 어려운 원리를 도식화하여 설명하고 있는 점, 특정 방법의 구현 방법만 제시한 것이 아니라 문제점과 대안까지 잘 제시하고 있는 점입니다.

 

그래서 동시성 프로그래밍을 구현하는 다양한 기법들과 그 방법들이 빠질 수 있는 버그 혹은 문제점, 그리고 방안까지 잘 습득할 수 있는 전문서적이라고 할 수 있습니다. 

 

동시성 프로그래밍을 이렇게 기초부터 전문적으로, 말그대로 A-Z를 다루는 책은 처음 본 것 같은데요.

그래서 컴퓨터 전공자로서는 (물론, 지금은 프로그래밍/구현/개발과는 조금 관련성이 떨어진 (분석) 일을 하지만...) 어려운 주제이지만 관심이 많이 갑니다. 

 

이 책은 C언어를 어느 정도 알고(문법을 아는 정도), 메모리 구조를 간단하게 알고 있으면 읽기가 좀더 편해집니다.

컴퓨터 알못이 읽기에는 난이도가 꽤 높은 책이고, 워낙 동시성 프로그래밍 자체가 개념부터 용어, 구조들이 일단, 그냥... 어렵습니다. 그래서 저도... 이 책을 읽고 이해하기까지 진도가 빨리 나가지 않더라고요.

 

그럼에도 불구하고 동시성 프로그래밍을 전반적으로 이해하기에 제일 좋은 책이라는 점에서 프로그래머라면 한번쯤은 꼭 읽어보거나 옆에 둘 만한 좋은 IT 서적이라는 생각이 듭니다. 

 

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