6장 동시성 서론
데이비드 토머스, 앤드류 헌트
느낌표 ! (인상 깊은 문장 | 문맥)
동시성(concurrency)은 둘이 상의 코드 조각이 실행될 때 동시에 실행 중인 것처럼 행동하는 것이다.
p.241
병렬성(parallelism)이란 실제로 동시에 실행되는 것이다.
p.241
동시성이나 병렬성을 지원하는 코드를 쓰는 건 왜 그렇게 어려울까? 한 가지 이유는 우리가 프로그래밍을 순차적 시스템으로 배워서다. 그리고 우리가 쓰는 언어의 기능이 순차적으로 사용할 때는 비교적 안전하지만, 동시에 두 가지 일이 일어날 수 있으면 골칫거리로 변해서다. 가장 큰 문제는 공유상태다. 단순히 전역 변수만을 이야기하는 것이 아니다. 둘 이상의 코드 뭉치가 하나의 변경 가능한 데이터를 참조하고 있다면 공유 상태가 존재하는 것이다.
p.242
비동기 호출을 통해 프로그래밍을 하다보면 간단한 문제의 경우는 아무런 문제가 느껴지지 않지만 비동기 호출이 얽히기 시작하면 에러 핸들링부터 난관인 경우를 경험하곤 한다. 물론 그 문제를 쉽게 풀 수 있는 방법이 존재하겠다만 동시성을 지원한다는 것은 꽤 골치 아플 가능성도 있다. 이 때 저자는 공유상태라는 원흉을 뽑는다. 책임이 명확해야 서로의 영역을 덜 침범할 것이기 때문일 것이다.
액터 모델에서는 프로세스들이 독립적으로 수행되며 서로 데이터를 공유하지 않는다. 대신 채널을 통해 잘 정의된 단순한 의미론을 사용하여 의사소통한다.
p.243
액터의 행동을 나열하고 프로그래밍을 한다면 데이터의 흐름을 알기엔 매우 직관적일 것 같다. 액터 모델을 사용하면 어떤 식의 장점이 있는지 아직 경험해보지 못했는데 좀 더 찾아보고 추후 필요할 때 사용해봐야겠다.
6장 서론 느낌
6장 서론에서는 액터 모델을 사용해서 동시성 문제를 간소화해보고 싶은 생각이 들게한다.