이전

리뷰 (15)

한줄평
평점 분포
  • 리뷰 총점10 80%
  • 리뷰 총점8 13%
  • 리뷰 총점6 7%
  • 리뷰 총점4 0%
  • 리뷰 총점2 0%
연령대별 평균 점수
  • 10대 0.0
  • 20대 10.0
  • 30대 9.0
  • 40대 9.0
  • 50대 8.0

포토/동영상 (3)

리뷰 총점 종이책
동시성 프로그래밍
"동시성 프로그래밍" 내용보기
동시성 프로그래밍: Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z * 이 서평은 한빛미디어에서 도서를 제공받아 솔직하게 제작한 서평입니다.                  동시성 프로그래밍에 목마른 개발자에게 단비와도 같은 책이 출간되어 소개하고자 한다. 동시성 프로그래밍은 어렵다는 말을 많이 한다. 그 ‘어려움’은 두 가지로 나눌 수 있다
"동시성 프로그래밍" 내용보기

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

* 이 서평은 한빛미디어에서 도서를 제공받아 솔직하게 제작한 서평입니다. 

 

 

 

 

 

 

 

 

동시성 프로그래밍에 목마른 개발자에게 단비와도 같은 책이 출간되어 소개하고자 한다. 동시성 프로그래밍은 어렵다는 말을 많이 한다. 그 ‘어려움’은 두 가지로 나눌 수 있다. 동시성 프로그래밍의 구조를 이해하지 못하는 데서 느끼는 어려움과 동시성 프로그래밍의 본질적인 어려움이다. 이 책은 전자의 어려움을 해소하고 후자의 어려움에 본격적으로 도전할 수 있도록 돕기 위해 쓰였다. 

 

Rust 언어를 중심으로 어셈블리어, 그리고 C 언어를 사용해 CPU 아토믹 처리, 소프트웨어 트랜잭셔널 메모리, async/await 등 동시성 프로그래밍과 관련된 이론적 배경부터 구현까지 설계자 입장에서 살펴본다. 광범위한 시점과 다양한 측면에서 다루기 때문에 고도의 프로그래밍을 목표로 하는 개발자, 안정성과 성능 중심 기술 구현에 관심이 있는 개발자가 두고두고 볼 수 있는 책이다.

 

 

 

 

 

 

 

 

 

 

 

 

네트워크로 연결된 모든 시스템에는 동시성 프로그램이 적용되었다고 해도 과언이 아니다. 스마트폰으로 노래를 들으면서 웹 서핑을 하고, 화면을 분할해 동영상을 보면서 연락을 주고받는 것은 모두 동시성 프로그래밍 덕분이다. 우리 삶과 밀접하고 다양하게 이용되는 동시성 프로그래밍의 전반을 한 권에 담은 책으로 동시성 프로그래밍이 무엇인지 알고 싶은 분들에게 일독을 권한다

YES마니아 : 로얄 S****W 2022.04.25. 신고 공감 1 댓글 0
리뷰 총점 종이책
[리뷰/책] 동시성 프로그래밍
"[리뷰/책] 동시성 프로그래밍" 내용보기
한 줄 요약 : 병렬처리에 대한 바닥부터 다룬 심화학습 책   난 개발을 하며 병렬처리를 해야 할 때면 항상 긴장된다. 내가 원하는 대로 동작을 하지 않을 수도 있다는 두려움 때문이다.   왜 병렬처리를 두려워하게 됐을까? 생각해보면 대학교 다닐때도 운영체제, 시스템 구조 시간에 잠깐 배운 것이 전부이기 때문인 것 같다. 예를 들면 '컴퓨터에서 작업 처리는 프로세스 단위
"[리뷰/책] 동시성 프로그래밍" 내용보기

한 줄 요약 : 병렬처리에 대한 바닥부터 다룬 심화학습 책

 

난 개발을 하며 병렬처리를 해야 할 때면 항상 긴장된다.

내가 원하는 대로 동작을 하지 않을 수도 있다는 두려움 때문이다.

 

왜 병렬처리를 두려워하게 됐을까?

생각해보면 대학교 다닐때도 운영체제, 시스템 구조 시간에 잠깐 배운 것이 전부이기 때문인 것 같다.

예를 들면 '컴퓨터에서 작업 처리는 프로세스 단위로 메모리가 할당되고, 프로세스는 다시 프로세스의 논리적인 작업 단위인 한 개 ~ 여러 개의 스레드로 분할되어 처리된다.' 과 같은 두루뭉술한 내용말이다.

 

나의 두려움과 달리 병렬처리는 숨쉬듯이 사용되고 있다.
하지만 실제 개발을 하면서 병렬 처리를 할 때면 프로그래밍 언어에서 제공하는 메소드 코드를 쓰고, 실행하는 것에 그친다. 

 

이런 나에게 동시성 프로그래밍의 기본부터 다루는 《동시성 프로그래밍》 책은 좋은 참고서가 될 것 같다.

 

 

책 《동시성 프로그래밍》은 고급 언어(C, Rust와 같은 사용자 측면에 가까운 언어) 관점에서 사용법을 알려주는 책이라기보다는 동시성 프로그래밍의 기본 원리를 다루고 있다.

물론 설명하는 내용마다 프로그래밍 언어를 이용한 실습 예제도 담고 있다.
 

 

책 목차는 아래 사진과 같다.

운영체제, 컴퓨터 구조에 대한 내용을 다룬 책을 공부한 적이 있어서인지 목차의 내용은 익숙했다.

 

 

 

내용은 이론 설명, 실습 예제 순서로 일반적인 구성이다.

단, 이 책은 독자가 프로그래밍 경험이 있다는 전제로 설명을 이어나가기 때문에 프로그래밍 경험이 없는 독자라면 막막하게 느껴질 수 있다.

실습 코드는 주로 Rust 언어로 되어 있고, 일부는 C 언어로 되어 있다. 해당 언어에 경험이 없더라도 if와 같은 조건문, 함수(메소드) 호출, 변수 선언&할당 등 프로그래밍 경험이 있다면 흐름을 이해하는데에 무리는 없을 것 같다.

하드웨어에 가까운 수준에서 설명하다보니 어셈블리언어도 보이는게 놀라웠다.

 

아래 내용은 운영체제 전공책에 항상 등장하는 '식사하는 철학자' 문제에 대해 다룬 내용이다.

책의 장단점을 소개해야하는데 내가 어려워하던 병렬처리에 대해 전공책보다 더 깊이있게 다루고 있다보니 쉽지 않다.

그래서 병렬처리 경험이 있다면 한 번쯤은 보았을 내용을 다룬 부분을 사진으로 첨부했다.

 

 

 

책의 마지막장은 최종 심화 내용이다.

컴퓨터가 병렬(동시성) 작업을 어떻게 처리할지 그 기준이 되는 처리 모델에 대해 다루고 있다.

내가 업무에 사용하는 자바 언어 구현을 쫓아가면 마지막엔 네이티브(native) 코드를 만난다.

업무를 하면서도 '컴퓨터가 알아서 잘 처리해주겠지'라는 안일한 생각으로 넘겼지만 이 책의 내용을 하나 하나 읽다보니  네이티브 코드는 어떻게 구현되는지 궁금증이 다시 떠올랐다.  

 

 

 

깊이 있는 내용을 다루다보니 아직 다 읽지는 못했다.

조금씩 읽고 익히다보면 읽겠지?

 

병렬 처리에 대해 막연하게 이론과 그 구성 원리까지 깊이있게 다루는 책이기 때문에 두고두고 볼 생각이다.

만약 이 책을 읽다가 포기할 것 같다면 《7가지 동시성 모델》 부터 읽어보면 좋을것 같다.

내가 읽었던 기억이 맞다면 《동시성 프로그래밍》에 비해 약간 더 넓은 주제를다루고 있지만 난도는 낮기 때문이다.

물론 두 권을 같이 읽으며 부족한 부분을 보충하면 읽으면 좋을것 같다.

 

 

 

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

리뷰를 위해 한빛미디어에서 책을 제공받았지만 주관적인 생각을 그대로 적었습니다.



출처: https://erinyees.tistory.com/120 [Erinyees의 블로그]

출처: https://erinyees.tistory.com/120 [Erinyees의 블로그]

y*****n 2022.04.25. 신고 공감 1 댓글 0
리뷰 총점 종이책
[서평] 동시성 프로그래밍
"[서평] 동시성 프로그래밍" 내용보기
동시성 프로그래밍에 대한 책이 많지 않아 그와 관련된 지식을 많이 쌓을 수 없었지만, 이번에 만난 다카노 유키님의 펴낸 '동시성 프로그래밍'이란 책을 만나 조금 어려운 내용이었어도 동시성 프로그래밍에 대해 어느 정도 지식을 쌓을 수 있었다. 동시성 프로그래밍이란 의미를 구글링해서 찾아보면 여러개의 작업 또는 쓰레드를 효율적으로 사용하도록 만드는 프로그래밍을 뜻한
"[서평] 동시성 프로그래밍" 내용보기


 

동시성 프로그래밍에 대한 책이 많지 않아 그와 관련된 지식을 많이 쌓을 수 없었지만, 이번에 만난 다카노 유키님의 펴낸 '동시성 프로그래밍'이란 책을 만나 조금 어려운 내용이었어도 동시성 프로그래밍에 대해 어느 정도 지식을 쌓을 수 있었다.

동시성 프로그래밍이란 의미를 구글링해서 찾아보면 여러개의 작업 또는 쓰레드를 효율적으로 사용하도록 만드는 프로그래밍을 뜻한다. 이는 하드웨어, OS, 라이브러리와 많은 관련이 있는데, 대부분 저수준 언어로 구현되므로 추상화된 고수준 언어에서는 신경쓰지 않는 부분이 있기는 하다.
하지만 저자는 '동시성 프로그래밍'이 무엇인가?에 대한 질문에는 쉽게 답할 수 없다고 한다. 그것은 추상적인 이미지를 떠올릴 수는 있지만, 구체적으로 '이런 것이 동시성'이다라 표현하기는 쉽지 않다고 한다.


 

그래서 이 책은 동시성 프로그래밍의 구조를 이해하고 이를 통해 동시성 프로그래밍의 본질적인 어려움에 도전할 수 있도록 쓰였다고 한다. 이 책을 통해 동시성 개념을 이해하고, 동시성 프로그래밍이 갖는 독특한 특징(동기 처리, 레이스 컨디션, 락, 비동기 처리, IO 다중화, 멀티태스킹 등), 어셈블리 언어와 알고리즘, 계산 모델 등 광범위한 주제를 접할 수 있게 한다.

이 책에 사용된 예제는 주로 Rush라는 언어로 작성되었고, 간혹 C언어나 어셈블리 언어로 작성되었다. Rust는 동시성 프로그래밍 관점에서 심사숙고해 만들어진 프로그래밍 언어이며, 저자가 예제의 언어로 선택한 이유를 책을 읽으면서 이해하게 될 것이라고 한다. 아무래도 Rust는 처음 접하는 언어이다보니 주로 사용하는 C언어와는 이해하는데 시간이 많이 걸렸다. 그리고 로우 레벨의 소스코드와 그와 관련된 기술이다보니, 오래전 배운 내용들을 다시 꺼내는데도 오래 걸렸다. 업무에 사용하지 않는 기술들이긴 하지만, 너무 모르고 살았다는 자책감이 들기도 했다. 하지만 동시성 프로그래밍을 이해하면서 이 책을 읽으니 예전에 배웠던 지식이 조금씩 살아나는 것 같았다.

책 속에서도 동시성 프로그래밍에 대한 기술적인 설명뿐만 아니라 그 기술을 구현한 소스 코드에 대해 설명하는 공간을 많이 할애한 것 같다. 긴 설명보다는 다이어그램이나 소스 코드에 대한 설명이 독자들에게 더 이해를 높여주기 때문일 것이다. 이 책의 대상독자도 초보자가 아닌 소프트웨어 구현 단계의 대학생, 대학원생, 사회인이다. 그러기 떄문에 어느정도 지식을 갖추고 이 책을 임해야 할 것이다.
책에서 사용된 코드는 역자의 깃허브를 통해 다운로드 받을 수 있다.
https://github.com/mosekim/concurrent_programming

시스템의 안정 및 하드웨어의 성능 및 OS의 최적화를 위해서 동시성 프로그래밍을 꼭 공부해보는 것을 추천한다.

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

#동시성프로그래밍 #동시성 #병렬성 #비동기 #멀티태스크 #한빛미디어 #OREILLY

m******n 2022.04.24. 신고 공감 1 댓글 0
리뷰 총점 종이책
프로그래밍 성능을 끌어올리고 싶은 시니어 프로그래머들이 봐야할 책
"프로그래밍 성능을 끌어올리고 싶은 시니어 프로그래머들이 봐야할 책" 내용보기
그렇다. 이 책은 초보자나 주니어 프로그래머들 보다는 프로그램 성능을 담당하고 있는 시니어 프로그래머 이상급이 봐야되는 책이다. 저자의 말에서 이 책이 다른 책과 다른 점이 무엇이냐 묻는 질문에 저자는 다음과 같이 답했다. "어셈블리에서 알고리즘, 계산 모델에 이르는 광범위한 주제를 총체적으로 다룬 세계 최초의 책입니다." 책의 대부분의 예제 코드는 Rust를 이용한다
"프로그래밍 성능을 끌어올리고 싶은 시니어 프로그래머들이 봐야할 책" 내용보기

 

그렇다. 이 책은 초보자나 주니어 프로그래머들 보다는 프로그램 성능을 담당하고 있는 시니어 프로그래머 이상급이 봐야되는 책이다.
저자의 말에서 이 책이 다른 책과 다른 점이 무엇이냐 묻는 질문에 저자는 다음과 같이 답했다.
"어셈블리에서 알고리즘, 계산 모델에 이르는 광범위한 주제를 총체적으로 다룬 세계 최초의 책입니다."
책의 대부분의 예제 코드는 Rust를 이용한다.
Rust 언어를 사용한 이유는 동시성 프로그래밍에서 안정성을 제공하고,
메모리를 고려해 코드를 작성할 수 있으며 async/await 등의 고급 개념을 적용하고 있기 떄문이라고 한다.


저자는 책의 대상 독자를 '대학교 3,4학년 또는 대학원생 및 사회인'을 대상으로 삼았다고 한다.
그러나 프로그래밍 비기너인 내 관점에서는 적어도 시니어급 이상의 프로그래머들이 대상이 되는 책이다.
왜냐하면 한국에서 어셈블리어까지 생각하는 C언어 프로그래머는 별로 없다고 생각하기 때문이다.
해외쪽은 모르겠으나 한국에서는 점점 더 C 언어를 배울려고 하지 않는다.
22년 4월 기준 어느 학원 홈페이지에서 C++ 강의는 단 1개가 있으며, 수강 후기는 2개가 고작이다. 반면에 자바스크립트 등은 수강 후기가 비교가 안될 정도로 많다.
최신 언어에서는 GC와 언어단에서 알아서 잘 해주는데 그걸 왜 프로그래머가 고민하면서 구현해야되느냐고 질문한다.
OS부터 대부분 언어에서 속도와 성능을 중요시 여기는 부분을 어떤 언어로 구현했는지 모르는건가...


이 책에서는 프로그래밍 기본 문법 지식을 설명하긴 한다
약 30페이지 가량 설명하는데 어느 쓰레기 책들 처럼 처음부터 자세히 설명하는 것이 아니다.
동시성 프로그래밍을 하기 위해서 C언어에서는 어떤 키워드와 라이브러리가 쓰이는지(volatile와 Pthreads 등) 설명하고, Rust 언어에서는 C언어와 어떻게 다른지에 초점을 둔다.
Rust 언어를 사용해본 사람이 그렇게 많지 않은데다가 어떤 점이 다르고,
그렇기에 어떻게 사용해야 되는지, 이 책에서 왜 Rust 언어를 선택했는지를 볼 수 있었다.


이 책의 핵심은 6장이다. 멀티태스크에 대해 설명한 장이지만, 가장 중요한 부분은 Rust 언어를 이용해 액터 모델(Actor model)을 사용자 공간에서 구현한 것이다.
단순히 개념이 이러이러하다는 것을 직접 구현하여 보여준다는 점은 멋진 일이다.
이 챕터뿐만 아니라 여러 부분에서 도움되는 내용이 많았다.
다만 내 프로그래밍 실력이 매우 부족하여 제대로 따라가지 못하는 점이 한탄스러웠다.


책 페이지 수에 비해 가격이 좀 비싸다고 느낄 수 있지만, 충분히 그 값을 한다고 생각한다.
나는 프로그래밍 성능을 생각하기 이전에 구현부터 똑바로 해야하는 비기너 단계이므로,
어떠한 개념이 있고 어떠한 느낌으로 동작한다는 느낌만 가지고 책을 읽었다.
현재 맡은 업무에서도 성능을 중요시 여기고 있지만, 아직까지는 내가 손댈 부분이 아니라고 판단된다. 
리 속에 있는 개념들을 전부 어느 정도 구현할 줄 아는 단계가 오고
시간/공간 복잡도가 아닌 프로그램 성능을 고려해봐야될 때가 오면 이 책을 다시 펼쳐서 볼 것이다.


마지막으로 어느 고수분이 책의 후기를 기술한 트위터 글을 찾았기에 링크를 추가하며 리뷰를 마친다.
https://twitter.com/codingdodobird/status/1516029738367991808

a***y 2022.04.24. 신고 공감 1 댓글 0
리뷰 총점 종이책
동시성을 시작하며..
"동시성을 시작하며.." 내용보기
오늘 리뷰할 책은 "동시성 프로그래밍" 책이다. 오레일리(OREILLY) 책은 전문성이 높아 좋아하는 분야 중 하나라서 왠만하면 책을 사서 보는 편이다.   우리가 아는 동시성 이라고 하면 java 기준으로는 Thread  javascript로는 ajax 나 async/await를 생각을 많이 할 것이다. Spring5에서는 webflux라는 기능이 추가되며 성능이 최적화가 필요한 지금 개발환경에서는 굉장히
"동시성을 시작하며.." 내용보기

 

 

오늘 리뷰할 책은 "동시성 프로그래밍" 책이다.

오레일리(OREILLY) 책은 전문성이 높아 좋아하는 분야 중 하나라서 왠만하면 책을 사서 보는 편이다.

 

우리가 아는 동시성 이라고 하면 java 기준으로는 Thread  javascript로는 ajax 나 async/await를 생각을 많이 할 것이다.

Spring5에서는 webflux라는 기능이 추가되며 성능이 최적화가 필요한 지금 개발환경에서는 굉장히 중요한 기술이다.

 

동기를 어려워 하는 이유중 하나가 락처리나 멀티태스킹, 예외 처리를 관리하기 힘들기 떄문에 집입 장벽이 높으면 편이며, 엄청난 데이터를 한번에 처리하는 곳이 아니면 잘 사용하지 않아 노하우가 쌓이기 어려운 것이다.

 

 

 

 

 

이 책은 그러한 개발자들을 위해 동시성의 개념들과 사용법을 해소하는과 한편 프로젝트 도입 전에 읽는 입문서 같은 느낌의 책이다.

하지만 이 책의 아쉬운 점은 C언어나 Rust 같은 비주류의 언어를 사용하는 예제로 되어 있어 다른 언어를 불편함을 느끼면 거부감이 들 수 도 있다.

하지만, 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 아키텍쳐

 

파트별로 봐도 처음에는 동기식을 한 번 보고, 비동기를 진행하는 만큼 그렇게 어려운 내용은 다루기 않는다는걸 알 수 있다.

비동기에 관련하여 관심있는 분들은 한번 보는 것이 좋을 것같다.

 

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

 

l*******3 2022.04.24. 신고 공감 1 댓글 0
리뷰 총점 종이책
동시성 프로그래밍
"동시성 프로그래밍" 내용보기
사진 삭제 Concurrent Programming, 428 page   # 요약 - 동시성 프로그램의 전반적인 기초를 닦을 수 있는 책 - 동기 처리, race condition, lock, 비동기 처리, IO Multiplexing, Multitasking 등 # 장점 - 동시성 프로그래밍을 다루는 책이 많지 않은데, 이에 대한 갈증을 해소할 수 있었고, 특히 점점 활발하게 사용되고 있는 Rust 를 이용해서 설명하기에 많은 지식
"동시성 프로그래밍" 내용보기

Concurrent Programming, 428 page

 

# 요약

- 동시성 프로그램의 전반적인 기초를 닦을 수 있는 책

- 동기 처리, race condition, lock, 비동기 처리, IO Multiplexing, Multitasking 등

# 장점

- 동시성 프로그래밍을 다루는 책이 많지 않은데, 이에 대한 갈증을 해소할 수 있었고, 특히 점점 활발하게 사용되고 있는 Rust 를 이용해서 설명하기에 많은 지식을 쌓기에 적합함

- 단순히 Rust에 한정된 이야기가 아니라, 파이썬의 자바스크립트의 비동기 프로그래밍(async/await)에도 적용가능하기 때문에, 활용성이 높음

# 단점

- Rust의 문법에 대해서 상세히 설명하지는 않기 때문에, 책을 읽는 동시에 어느 정도 구글링을 하며 Rust에 대해서 이해가 필요함

- 주제 자체도 어렵고, 내용도 쉽지 않음. 컴퓨터 관련 전공의 고학년 학부생이나 동시성 프로그래밍의 기초를 쌓고 싶은 대학원생이 읽으면 좋을 듯

- 학부 수준의 OS, Programming Language, Computer Architecture 정도는 알아야, 책에서 설명하는 Process/Thread, Assembly, Lambda Calculation 에 대해서 더 깊이 있게 이해할 수 있을 것으로 보임

---

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

c*****8 2022.04.24. 신고 공감 1 댓글 0
리뷰 총점 종이책
저수준(어셈블리어)에서 고수준(러스트)까지 확실하게 배우는 동시성 프로그래밍
"저수준(어셈블리어)에서 고수준(러스트)까지 확실하게 배우는 동시성 프로그래밍" 내용보기
국내에 러스트(Rust)관련 서적이 2권밖에 출간되지 않은 상황에서 '동시성 프로그래밍 - Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z'의 출간 소식은 반가움을 넘어선 무언가 설레임을 가져다 주었다. 일본어를 하나도 모르기에 오레일리 재팬에서 이 책의 원서(https://www.oreilly.co.jp/books/9784873119595/)가 출간된지도 몰랐었다. 역자 '김모세'님의 발빠른
"저수준(어셈블리어)에서 고수준(러스트)까지 확실하게 배우는 동시성 프로그래밍" 내용보기

국내에 러스트(Rust)관련 서적이 2권밖에 출간되지 않은 상황에서 '동시성 프로그래밍 - Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z'의 출간 소식은 반가움을 넘어선 무언가 설레임을 가져다 주었다. 일본어를 하나도 모르기에 오레일리 재팬에서 이 책의 원서(https://www.oreilly.co.jp/books/9784873119595/)가 출간된지도 몰랐었다. 역자 '김모세'님의 발빠른 번역으로 원서 출간일(21년 8월)과 큰 차이 없이 한국어 번역판이 출간하였고 그 책이 지금 내 손에 쥐어지게 되었다.

 

 <국내 출간된 러스트 서적>

 

 * 러스트 핵심 노트(한빛미디어) https://www.hanbit.co.kr/store/books/look.php?p_code=E2088508957

 * 러스트 프로그래밍 공식 가이드(The Rust Programmming Language, 제이펍) https://jpub.tistory.com/987

 

이 책은 책의 부제목에서 명시한 것처럼 동시성 프로그래밍의 A부터 Z까지를 알려주는 것이 목적이다. 타 언어에 비해서 러스트(Rust)는 러닝 커브가 높아 초보자가 배우기에 쉽지 않은 언어이다. 여타의 다른 러스트 서적에서도 어느 정도의 C, C++, Python, Java 등의 언어 경험이 있는 상태에서의 학습을 요구하는 것이 일반적이다. 그리고 다른 러스트 서적에서는 하나의 챕터(절)만을 할애해서 동시성 프로그래밍에 대해서 짧은 소개만을 할 뿐이지만 이 책은 동시성 프로그래밍의 정의에서 부터 필요성 그리고 어셈블리와 C에서의 경험을 바탕으로 차근차근 동시성 프로그래밍에 대해서 접근을 한다.

 

한빛미디어의 '7가지 동시성 모델 - 프로그래머라면 알아야 할 미래를 품은 7가지 동시성 모델'

https://www.hanbit.co.kr/store/books/look.php?p_code=B3745244799

 

에서의 접근과는 사뭇 다른 방식으로 동시성 프로그래밍을 설명한다.

 

저자는 이 책을 올바르게 이해하기 위해서는 어셈블리, 러스트에 대한 경험은 없더라도 C언어는 어느 정도 익숙함을 전제로 하고 있다.

어셈블리와 C로 저수준에서 설명하고 똑같은 내용을 러스트로 간결하고 편리하게 구현할 수 방법을 설명해 주고 있다.

 

1장>

동시성 프로그래밍에 한 챕터만을 할애할 경우 동시성과 병렬성을 명확히 구분하지 않고 하나로 간주하고 설명을 진행하는 경우가 많은데, 이 책에서는 동시성과 병렬성을 명확히 구분지으는 것으로 시작한다.

동시성 : 2개 이상의 프로세스가 동시에 계산을 진행하는 상태

병렬성 : 같은 시각에서 여러 프로세스가 동시에 계산을 실행하는 상태

 

동시 처리와 병렬 처리가 중요한 이유는 성능 향상에 있고 효율적인 계산 리소스 활용, 공평성(공정성), 편리성을 내세우며 동시 처리가 필요함을 설명하며, 이는 복잡성을 안고 있음을 설명하며 챕터를 마무리 한다.

 

2장>

군더더기 없이 어셈블리 언어의 기초에 대해 짧지만 최대한 쉽게 설명을 해주고 있다.

레지스터를 다루는 방법, volatile 그리고 POSIX Pthreads 라이브러리를 이용한 스레드의 생성/종료 그리고 스택과 힙을 구분지어 상세히 설명하고 있다. C언어는 이미 익숙한 독자를 대상으로 하고 있으므로 복습하는 차원에서 무리 없이 읽을 수 있다.

러스트 언어에 약 30페이지를 할애하고 있다. 러스트 미경험자도 독자 대상에 두고 있으므로 상대적으로 할애한 분량이 많다. 타 러스트 서적에 비교하여 꼭 필요한 부분을 잘 간추려 최대한 간단히 설명한다. 소유권, 클로저, 참조, 라이프타임, 차용, 트레이트 등 굵직굵직한 내용들을 간결히 설명하고 있다. 짧은 설명에 러스트에 매료되었길 바란다.

 

3장>

동기 처리가 필요한 이유(레이스 컨디션)를 설명하고 CPU 지원의 아토믹(Atomic) 명령을 이용한 처리를 학습한다.

동기 처리의 기본인 뮤텍스, 세마포터, 조건 변수를 설명하고 이어서 배리어 동기(Barrier Sync), Readers-Writer락, Pthread(러스트의 동기 처리 라이브러리 내부에서 사용)를 설명한다.

설명이 간결할 뿐만 아니라 여러 용어들을 설명하기 위해 일상 생활에서의 예를 적절히 사용하여, 동기 처리 관련 용어에 익숙하지 않은 독자에게 쉬운 이해를 돕는 것이 인상적이다.

앞서와 마찬가지로 이러한 것들을 C와 어셈블리로 설명하고 이어서 러스트로 전환시켜 모던 동기화 라이브러리를 사용한 모던 동기 처리 기법을 다시한번 살펴본다.

단순히 라이브러리로의 전환히 아닌 원천적으로 실수를 방지하기 위해 러스트에서 제공하는 타입 시스템을 이용하도록 안내한다.

 

마무리는 CPU에서 아토믹 명령을 지원하지 않을 경우 활용 가능한 베이커리 알고리즘으로 마무리 하고 있는데, 단순히 아모믹(Atomic) 명령으로 일일히 처리하지 않고 알고리즘 차원에서의 지원에 대해 살펴본다.

 

4장>

익숙한 동시성 프로그래밍에서의 문제점인 데드락으로 시작한다. 특히, RwLock을 러스트에서 사용할 경우 발생할 수 있는 데드락을 피하기 위해 러스트의 _(언더바)를 사용하여 손쉽게 변수를 파기 시켜 데드락 발생을 피할 수 있는 방법을 설명한다.

3장에 이어 고급 주제를 다룬다. 재귀 락(Recusive Lock), 의사 각성(Spurious Wakeup), 시그널(멀티스레드와 궁합이 좋지 않지만 필요하면 사용이 용이한 signal_hook 크레이트에 대한 안내를 해주고 있다) 등은 당장에는 필요가 없어 보일지 몰라도 나중에 필요에 의해 쉽게 찾아서 도움이 될 수 있을 것 같다.

마지막으로 러스트에서 atomic을 사용할 때 Ordering 타입을 왜 지정하고 어떻게 사용할 수 있는지를 어셈블리 레벨에서 메모리 배리어(또는 메모리 펜스) 명령 부터 차근 차근 설명해 주고 있다. 어셈블리 레벨에서의 설명으로 명확히 Ordering 타입 지정에 대한 상세한 내용을 알 수 있다.

 

5장>

다른 모던 언어를 사용해보았을 경우 익숙한 Future 및 async/awit를 설명한다. 러스트에서는 언어차원에서 코루틴을 지원하지 않지만 Futures 트레이트를 사용하여 좀 더 추상적인 비동기 프로그래밍이 가능함을 확인하고 함수의 중단과 재개를 수행할 수 있는 코루틴을 구현할 수 있음을 소개 한다.

이어서 러스트에서 실질적으로 표준이 되버린 Tokio 크레이트를 사용하여 await를 추가하여 일반적으로 사용하던 라이브러리와 유사한 형태로 비동기 프로그래밍이 가능함을 보여준다. Tokio에 대해 자세히 알 수 있는 기회는 아니지만 Tokio의 편리함과 강력함을 알 수 있게 해주며, 여기서의 맛(?)을 기억하여 좀 더 다양하게 이용할 수 있도록 공식 문서를 참고하도록 안내하고 있다.

 

6장>

비선점적 멀티태스킹과 선점적 멀티태스킹을 명확히 구분하고, 비선점적 멀티태스킹에서 무한 루프가능성이 있음을 알려준다. 애플리케이션 구현입장에서는 크게 신경을 쓰지 않아도 될 수 있지만 선점적 멀티태스킹에 비해 비선점적 멀티태스킹은 컨텍스트 스위칭을 덜 일어나므로 성능에서 약간의 이득을 얻을 수 있다.

 

(3절의 액터 모델(Actor Model)은 모든 것을 액터로 다루고 멀티 프로세스끼리 메시지를 교환하는 동시 계산 모델로 필요한 경우 별도로 찾아 이용할 수 있을 것이다.)

 

7장>

챕터의 제목 '동기 처리2'에서 알 수 있듯이 3장 '동기 처리1'에 이어 공평성이나 데드락 같은 문제를 해결하기 위한 좀 더 발전된 동기 처리 주제를 다룬다. STM(Software Transactional Memory)은 기존 락 기법과 달리 데드락이 발생하지 않는 동기 처리 기법이다. 마지막으로 여러 프로세스에서 동시에 접근 가능한 데이터 구조인 락프리(Lockfree, 배타락을 이용하지 않고 처리를 수행하는 데이터 구조 및 그에 대한 조작 알고리즘을 총칭) 데이터 구조를 설명하고 있다.

 

8장>

1장에서 '동시성과 병렬성'에 대해 정의하였고 저자는 그것이 매우 추상적이었다고 간주하며, 대표적인 동시 계산 모델인 액터 모델(채널을 이용하지 않고 모든 것을 액터(프로세스)를 사용해 직접 통신을 수행)과 ∏ 계산(프로세스 사이의 데이터 교환을 채널을 이용해서 수행)을 사용하여 동시 처리에 관해 형식적으로 정의한다. 수식이 많아 다소 거부감이 들 수 있을 수 있지만 ML에 익숙해 져야 하는 시점(?)에서 좀더 수학적, 학문적으로 접근해 볼 수 있는 기회를 주고 있다.

 

요약>

쉽게 발견되는 오타가 간간히 눈에 띄지만 학습에 있어 크게 방해가 될 정도는 아니다. 다만 아직 러스트 관련 용어가 확실히 자리잡지 않은 상태에서 몇몇 용어가 '영어 -> 일본어 -> 한국어'로 전환되는 과정에서 어색한 부분이 있는 점은 다소 아쉬운 점이다.

원저자가 대학 교수여서 그런지 강의 경험이 많아서인지 몰라도 매 챕터의 시작마다 적절한 비유를 통한 설명이 인상적이었다.

이 책을 통해서, 동시성 프로그래밍의 깊이 있는 이해 그리고 동시성, 비동기 프로그래밍에서의 러스트의 강력함을 경험하고 국내 러스트 사용자이 많아지는 계기가 되었으면 한다.

 

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

YES마니아 : 로얄 n***u 2022.04.24. 신고 공감 1 댓글 0
리뷰 총점 종이책
Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z
"Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z" 내용보기
< 동시성 프로그래밍 > | 다카노 유키 지음 | 김모세 옮김 | 한빛미디어   일반 서버 개발자라면 한번쯤은 concurrent programming을 해본 경험이 있을 것이다. C 언어를 사용하든 Java 언어를 사용하든 Python 언어를  사용하든 multi-process 또는 multi-thread 개념을 지원하기 때문에 이를 이용해서 concurrent programming에 대한 개념과 동작에 대해 어느 정도 이해하고
"Rust, C, 어셈블리어로 구현하며 배우는 동시성 프로그래밍 A to Z" 내용보기

 

< 동시성 프로그래밍 > | 다카노 유키 지음 | 김모세 옮김 | 한빛미디어

 

일반 서버 개발자라면 한번쯤은 concurrent programming을 해본 경험이 있을 것이다. C 언어를 사용하든 Java 언어를 사용하든 Python 언어를  사용하든 multi-process 또는 multi-thread 개념을 지원하기 때문에 이를 이용해서 concurrent programming에 대한 개념과 동작에 대해 어느 정도 이해하고 있는 사람이 많을 것 같다. 하지만 thread나 process를 생성하고 실행하는 함수를 활용해서 프로그래밍하는 것과 그 개념을 제대로 이해하고 프로그래밍하는 것에는 큰 차이가 있다. 이 책은 이런 관점에서 제대로 된 concurrent programming에 대한 개념을 설명하고 다양한 언어로 된 샘플 코드를 제시하고 설명하고 있다.

이 책은 총 8장으로 구성되어 있다. 먼저 concurrent programming에 대한 개념과 기술을 소개하고 concurrent programming이 중요한 이유에 대해 설명한다. 또한 concurrent programming을 위한 어셈블리, C, Rust 언어에 대한 기본 개념과 문법 등을 설명한다. 개인적으로 Rust 언어에 대한 개발 경험은 없지만 대략 문법적인 구조를 이해하고 샘플 코드에 설명되어 있는 설명만 읽어도 대략적인 코드에 대해 이해할 수 있었던 것 같다. 따라서 Rust 언어에 대해 잘 모르더라도 큰 부담을 가지지 말고 책을 계속 읽어나가면 될 것 같다.

그 다음부터는 동기화 처리에 대한 주요 알고리즘 및 기술에 구조에 대해 설명한다. 특히 atomic 연산과 mutex, semaphore 등 동기화 처리에 필수적인 개념에 대해 자세히 설명하고 있다. 이 동기화는 기본적으로 race condition이라고 하는 concurrent programming에서 할상 발생할 수 있는 현상을 제어하기 위해 필요하며 추가적으로 deadlock에 대한 개념과 이를 회피하기 위한 알고리즘에 대해 설명한다.

그 다음 장 부터는 세부적인 주제별로 자세히 설명한다. 비동기 프로그램을 구현하기 위한 다양한 방법을 설명하고, 멀티태스크의 개념과 전략, STM(Software Transactional Memory)에 대한 설명과 공평성을 보장하는 lock에 대해 설명한다. 마지막 장에서는 동시 계산 모델에 대해 설명하면서 액터 모델과 파이 계산, 람다 계산 등의 개념을 소개하면서 자유변수 및 변환, 간략화에 대한 소개를 한다. 가장 어려웠던 부분 중의 하나였던 것 같고 아직도 그 개념을 정확히 이해하기는 어려웠던 것 같다. concurrent programming에 대한 개념을 이해하고 활용하고자 할때 8장은 건너뛰어도 괜찮지 않을까 생각한다.

전반적으로 개념 소개 및 필요한 이유, 그리고 샘플 예제가 잘 소개되어 있어서 이해하는 데 별 문제는 없었다고 생각한다. concurrent programming에 대해 이 정도로 다양한 기술과 개념이 한권에 담겨 있는 책은 잘 보지 못한 것 같다. 또한 샘플도 잘 설명되어 있어서 실제 실행시켜 보면서 그 개념을 파악할 수 있도록 구성되어 더 좋았던 것 같다.

한편으로는 몇가지 아쉬움이 있는 부분도 존재한다. 일단 각 예제에 대해 설명까지만 하고 실제 실행 결과를 보여주지 않아 실제 실행해 보기전까지는 그 결과를 예측하기 어렵다는 것이다. 책에 충분히 설명이 있긴 하지만 그래도 실행 결과를 보여줬더라면 조금 더 이해하기 좋지 않았을까 생각한다. 다른 한편으로는 번역에 대한 아쉬움이다. 거의 같은 페이지에서 일부는 한글로 일부는 영문으로 번역된 부분이 있다. 좀 더 일관성있게 번역되었더라면 더 좋지 않았을까 생각한다(이 책의 원 저자가 일본인이기 때문에 원본이 그랬을 수도 있다. 하지만 번역하면서 그런 부분까지 손봤더라면 하는 아쉬움은 있다). 이 부분은 120 페이지의 "다음 그림은 RW락의 읽기락과 뮤텍스락의 실행속도를 비교한 것이다"와 121 페이지의 "다음 그림은 RW락의 Write락과 mutex락의 실행속도를 비교한 것이다"이다.

추가적으로 몇몇 오타가 있는 것 같다.
54 페이지 : 중간 예제에서 "enum Rule" 은 "enum Role"로 수정되어야 한다.
58 페이지 : 코드 설명하는 부분 3에서 "뒤에 기술한 -> 32"는 "뒤에 기술한 -> u32"로 수정되어야 할 것 같다.
120 페이지는 위에 언급한 부분 참조
178 페이지 : 반복서버(interactive server)는 그냥 인터렉티브 서버로 그대로 적는 것이 좋을 것 같다.

하지만 전반적으로 책을 읽고 이해하는 데에는 문제가 없기 때문에 concurrent programming에 대한 개념을 이해하고 활용하고자 한다면 충분히 기본 도서로 사용할 수 있을 것 같다.


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

y******n 2022.04.22. 신고 공감 1 댓글 0
리뷰 총점 종이책
[서평] 동시성 프로그래밍
"[서평] 동시성 프로그래밍" 내용보기
이 책은 동시성 프로그래밍의 구조를 이해하고 이를 통해 동시성 프로그래밍의 본질적인 어려움에 도전할 수 있도록 쓰였다 동시성 프로그래밍의 구조를 먼저 이해한다면 이를 활용할 수 있는 더 많은 방법도 찾을 수 있다 동시성 개념에서 시작해 동시성 프로그래밍이 갖는 독특한 특징(동기 처리, 레이스 컨디션, 락, 비동기 처리, IO 다중화, 멀티태스킹 등) 어셈블리 언어와 알고
"[서평] 동시성 프로그래밍" 내용보기

이 책은 동시성 프로그래밍의 구조를 이해하고 이를 통해 동시성 프로그래밍의 본질적인 어려움에 도전할 수 있도록 쓰였다

동시성 프로그래밍의 구조를 먼저 이해한다면 이를 활용할 수 있는 더 많은 방법도 찾을 수 있다

동시성 개념에서 시작해 동시성 프로그래밍이 갖는 독특한 특징(동기 처리, 레이스 컨디션, 락, 비동기 처리, IO 다중화, 멀티태스킹 등)

어셈블리 언어와 알고리즘, 계산 모델에 이르는 광범위한 주제를 담고 있으므로 오랫동안 옆에 두고 동시성 프로그래밍에 도전해볼 수 있을 것이다

이 책은 주로 Rust 언어를 이용해서 설명하지만 C 언어와 어셈블리 언어도 절반 정도 사용한다

Rust 언어를 중심으로 선택한 이유는 Rust가 동시성 프로그래밍에서 안정성을 제공하고, 메모리를 고려해 코드를 작성할 수 있으며 async/wait 등의 고급 개념을 적용하고 있기 때문이다

C 언어와 어셈블리 언어도 함께 사용해 설명한 이유는 Rust의 배경이 되는 구조도 설명하기 위해서다

기존 프로그래밍 언어는 C나 C++ 같이 하드웨어나 OS 설명에 적합한 언어이거나 Erlang이나 Haskell 같이 고도의 추상화를 설명하기에 적합한 언어였다

Rust는 이 두 가지를 동시에 설명할 수 있는 최상의 언어다

Rust는 동시성 프로그래밍 관점에서 심사숙고해 만들어진 프로그래밍 언어다

예제 코드

https://github.com/moseskim/concurrent_programming

 

 

이 책은 동시성 프로그래밍에 관한 책으로 동시성과 비슷한 용어로 병렬성이 있으며 두 용어에 관해 함께 설명한다

실제 동시성과 병렬성을 같은 의미로 사용하는 경우가 많고 이 단어들의 해석에 상당한 혼란이 있는 것으로 보인다

 

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

 

동시성은 2개 이상의 프로세스가 동시에 계산 중인 상태에 있는 것이라면 병렬성은 같은 시각에서 여러 프로세스가 동시에 계산을 실행하는 상태를 의미 한다

즉 여러 프로세스가 동시에 실행 중일 때 이를 병렬로 작동하고 있다고 말한다

두가지 용어에 대해 거의 같은 용어라고 알고 있었는데 각 용어에 대한 의미를 명확하게 알게 된 것 같다

 

이 책은 Rust 언어를 중심으로 설명하지만 C 언어와 어셈블리 언어도 함께 사용해 설명하므로 어셈블리 언어의 기본 내용이 수록 되어있다

어셈블리 언어에 대해서 잘 모른다면 의 내용을 이해하기 위해 반드시 읽어보아야 한다

이 책에서는 AArch64와 x86-64 어셈블리를 이용하기 때문에 이 두가지에 대해 간단히 설명한다

AArch64는 Arm의 64bit 아키텍처이며, x86-64는 AMD와 Intel CPU의 CPU 아키텍처이다

 

두번째로 C언어의 기본에 대해서도 수록되어있다 C언어는 모든 언어의 기초가 되는 언어로 꽤 대중적인 언어이므로 대충 검색으로도 기본 문법을 습득할 수 있지만 이미 C언어에 대해 알고 있는 사람이라면 에서 안내하는 기본내용 정도만 읽어도 충분할 것이다

 

챕터 3에서부터는 본격적으로 핵심내용이 시작되는 단원이다

챕터 3에서는 동기 처리 알고리즘에 대해서 설명하고 있다

동시성 프로그래밍에서도 여러 프로세스 사이에 협조가 필요한데 여러 프로세스 사이에 타이밍 동기화, 데이터 업데이트 등을 협조적으로 수행하는 처리를 동기 처리라 부른다

동기 처리가 필요한 이유인 레이스 컨디션(race condition)을 설명한뒤 C 언어와 어셈블리를 이용해 현대적인 CPU에서 이용할 수 있는 아토믹(atomic) 연산 명령과 아토믹 처리를 설명한다

또한 동기 처리의 기본인 뮤텍스, 세마포어(semaphore), 조건 변수, 배리어 동기(barrier synchronization), Readers-Writer락, Pthread를 설명한다

그리고 C 언어와 어셈블리를 이용해 원시적인 명령과 함수를 보다 깊이 이해해본다

 

레이스 컨디션(race condition)이란? 경합 상태라 불리며, 여러 프로세스가 동시에 공유하는 자원에 접근합에 따라 일어나는 예상치 않은 이상이나 상태를 의미한다

동시성 프로그래밍에서는 이 레이스 컨디션을 일으키지 않고 올바르게 프로그래밍하는지가 중요한 문제라고 한다

동시성 프로그래밍에서 매우 중요한 부분이므로 저수준 언어에서 레이스 컨디션 컨트롤에 대한 확실한 개념을 인지하고 있어야 할 것 같다

 

5장 부터는 비동기 프로그래밍에 대해 다루고 있다

작성한 순서대로 작동하는 프로그래밍 모델을 동기 프로그래밍이라 부른다면 비동기 프로그래밍은 독립해서 발생하는 이벤트에 대한 처리를 기술하기 위한 동시성 프로그래밍 기법을 총칭한다

비동기 프로그램에서는 어떤 순서로 실행되는 가는 코드에서 판별할 수 없으며 처리 순서는 이벤트 발생 순서에 의존한다

비동기 프로그램을 구현하는 방법으로는 콜백함수나 시그널을 이용하는 방법이 있으나 이 장에서는 OS에 의한 IO 대중화 방법과 현재 많은 프로그래밍 언어에서 채용하고 있는 비동기 프로그래밍 방법인 Future, async/await를 설명한다

이후 Rust의 async/await를 이용한 비동기 라이브러리의 실질적인 표준인 Tokio를 이용한 비동기 프로그래밍 예를 다룬다

 

이 챕터에서 클라이언트로부터 요청받은 순서대로 처리하는 서버인 반복 서버와 요청을 동시에 처리하는 동시 서버를 알아보고 직접 구현해보면서 두 서버의 처리 성능과 차이점을 알아본다

반복서버는 커넥션 요청을 받아 클라이언트로부터 데이터를 수신하고, 송신 처리를 완료하지 않으면 다음 클라이언트의 처리를 수행하지 못한다

동시 서버는 클라이언트로부터의 커넥션 요청, 데이터 도착 등의 처리를 이벤트 단위로 세세하게 분류하여 이벤트에 따라 처리를 실행해 처리량을 향상 시킬 수 있다

 

코루틴(coroutine)는 이 책에서는 중단과 재개가 가능한 함수를 총칭한다

코루틴을 이용하면 함수를 임의의 시점에 중단하고, 중단한 위치에서 함수를 재개할 수 있다

코루틴이라는 용어는 1963년 콘웨이의 논문에 등장했으며 COBOL과 ALGOL 프로그래밍 언어에 적용되었다

현재 코루틴은 대칭 코루틴(symmetric coroutine)과 비대칭 코루틴(asymmetric coroutine)으로 분류된다

 

챕터7 동기 처리2에서는 공평성을 보장하는 락에 관해 설명한다

이어서 소프트웨어 트랜잭셔널 메모리(Software Transactional Memory, STM)를 설명한다

STM은 기존 락 기법과 달리 데드락이 발생하지 않는 동기 처리 기법이다

마지막으로 여러 프로세스에서 동시에 접근 가능한 데이터 구조인 락프리(Lockfree 데이터 구조를 설명한다

락프리 데이터 구조를 이용하면 배타락 등을 이용하지 않고도 여러 프로세스에서 업데이트할 수 있는 데이터 구조를 구현할 수 있다

이 장에서 구현은 모두 스레드를 이용하므로 프로세스가 아니라 스레드로 표기하지만 이들 알고리즘은 커널 내 프로그램에도 적용할 수 있다

 

약한 공평성을 보장하는 배타 제어 알고리즘에서는 락을 우선적으로 획득할 수 있는 스레드가 설정되고, 우선 스레드는 순서대로 바뀐다

차례로 락을 획득 가능하게 함으로써 약한 공평성을 보장한다

 

약한 공평성을 보장하는 락은 유한 횟수 안에서 반드시 락을 획득한다

한편 구현을 할 때는 이론적으로 약한 공평성을 만족하지는 않지만 락 획득에서의 경합을 줄이는 알고리즘을 이용하는 경우가 있다

티켓락은 그런 알고리즘의 하나로 리눅스 커널 안에도 구현되어 있다

 

락프리(lockfree)란 배타락을 이용하지 않고 처리를 수행하는 데이터 구조 및 그에 대한 조작 알고리즘을 총칭한다

아토믹하게 데이터를 업데이트 하기 위해 Compare and Swap(CAS) 명령을 이용한다

이 절에서 락프리 데이터 구조 가운데 가장 기본적인 락프리 스택을 설명한 후 락프리 데이터 구조에 관한 여러 가지 문제와 락프리 데이터 구조 분류를 설명한다

 

동기 통신에서는 동시에 송수신이 이루어지며 송신과 수신을 할 때 암묵적인 배리어 동기 처리를 하는 것이 특징이다

서평

주로 고수준언어만 사용해보았고 저수준언어의 동시성 프로그래밍에 대해 깊이 생각해본적이 없었던 것 같다

이 책은 자칭 어셈블리에서 알고리즘, 계산 모델에 이르는 광범위한 주제를 총체적으로 다룬 세계 최초의 책이라고 한다

실제로 동시성 프로그래밍의 구현과 이룬을 포함해 매우 폭넓은 범위를 다루고 있으며

요즘 매우 인기 있는 언어인 Rust 언어를 중심으로 진행되고 있으므로 Rust의 동시성 프로그래밍 기법에 관심이 있는 사람이라면 꼭 읽어보기를 추천한다

실제 동시성 프로그래밍 테스트를 위해 Intel CPU외에 Arm 기반의 CPU에서 테스트 해보고 싶다면 아마존 EC2에서 Arm CPU를 선택한 인스턴스에서 충분히 테스트해볼 수도 있다

이 책에서 매우 유용했던 부분은 동시성 프로그래밍의 용어에 대한 명확한 의미와 구조 그리고 구체적인 구현 방법들에 대해 설명하고 다른 방법이나 동기식 처리와 어떠한 차이점이 있는지 그리고 동시성 프로그래밍에서 발생할 수 있는 문제점을 어떻게 해결해나갈 수 있는지 과정을 보여주고 다양한 기법들을 설명해주는 부분들이 매우 좋았다

개인적으로 동시성 프로그래밍에 대해 깊이 알고 싶다면 이 책을 여러번 정독하면서 개념들을 명확히 이해하는 것이 매우 도움이 될 것이라는 생각이 들었다

개인적으로 매우 만족스러운 책이였으며 저수준 언어의 동시성 프로그래밍에 대해서 공부하고 싶다면 이 책을 읽어보는 것을 적극 추천한다

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

r******1 2022.04.18. 신고 공감 1 댓글 0
리뷰 총점 종이책
동시성 프로그래밍
"동시성 프로그래밍" 내용보기
사실 프론트엔드 개발자로서 JS같은 고수준의 언어를 주로 다뤄왔기에, 프로세스나 스레드 수준의 여러 일들에 대해서는 제대로 이해하지 못한 채 개발을 하고있다는 생각이 자주 들었었는데요. 그 와중에 이 책을 읽게 되었습니다. 고수준의 영역에서는 아주 당연하게 비동기, 논블로킹 로직을 작성하면서 너무 당연해 간과하기 쉬웠던 부분이었는데 책을 읽으며 태스크의 동시성과 비
"동시성 프로그래밍" 내용보기

사실 프론트엔드 개발자로서 JS같은 고수준의 언어를 주로 다뤄왔기에, 프로세스나 스레드 수준의 여러 일들에 대해서는 제대로 이해하지 못한 채 개발을 하고있다는 생각이 자주 들었었는데요. 그 와중에 이 책을 읽게 되었습니다.

고수준의 영역에서는 아주 당연하게 비동기, 논블로킹 로직을 작성하면서 너무 당연해 간과하기 쉬웠던 부분이었는데 책을 읽으며 태스크의 동시성과 비동기성을 보장하기 위해 더 낮은 수준 단에서는 무슨 일이 일어나야 하는지 좀 더 이해해보는 계기가 되었던 것 같습니다. 컴퓨터 구조나 운영체제 시간에 배웠었던 CPU 자원의 문제나, 병렬적으로 스레드나 프로세스의 일을 처리할때 고려해야하는 여러 고민들을 흥미롭게 소개하고 있는 책입니다.

C, 어셈블리, Rust언어로 코드 예제가 제시되는데, 이를 위해 책의 앞선 부분에서 자세한 설명이 나오는 부분이 인상깊었습니다. 특히 Rust는 웹 생태계에 점점 들어오고 있는 언어이기도 한데요, 이번에 Rust에 대한 설명을 읽으면서 확실히 관심이 더 깊어진 것 같습니다. 소유권이나 차용 등 엄격한 GC와 메모리 관리를 위한 언어적 장치들이 확실히 인상 깊었던 것 같아요.

d*****3 2022.04.24. 신고 공감 1 댓글 0