본문 바로가기
책/실용주의 프로그래머

[TIL] 6장 동시성

by 정선한 2022. 5. 26.
728x90
반응형

6장 동시성

오늘의 TIL 3줄 요약

  • 공유상태는 틀린 상태다.

1. 책에서 기억하고 싶은 내용

동시성(병행성) : 동시에 실행 중인 것처럼 행동하는 것. (fiber, thread, process를 통한 구현)
병렬성 : 실제로 동시에 실행되는 것. (하드웨어적 장치의 필요)
세상은 비동기적이므로 코드 상에서는 동시성이 필요하다.

<33. 시간적 결합 깨뜨리기>
시간적 결합(temporal coupling)
소프트웨어의 설계요소로서 시간의 역할 - 동시성과 순서
사람들은 보통 직선적인 사고를 한다. 하지만 이렇게 생각하다 보면 시간적 결합을 필연적으로 만들어 낸다.
따라서 우리는 이러한 시간적 결합들을 끊어내어 현실세계와 같은 동시성을 확보해야 한다.

작업흐름을 모델 화하고 분석하여 동시성을 개선할 수 있다. 이런 과정에서 쓰이는 도구가 활동 다이어그램과 같은 도구이다.
동시 작업의 기회와 병렬 작업의 기회

<34. 공유 상태는 틀린 상태>
공유 상태는 틀린 상태다. 문제는 상태들이 공유되었다는 점이다.
비 원자적 갱신
 - 두 프로세스가 같은 메모리 영역에 쓰기가 가능하다면 이 상태에서의 가장 큰 문제는 그 어느 프로세스도 자신이 바라보고 있는 메모리가 일관되어있음을 보장할 수 없다는 점이다.
 - 데이터를 가져와 갱신하는 동작이 원자적이지 않기 때문에 발생. 실제값이 나의 의도와 다른 시점에 변경될 수 있다.
세마포어 : 단순히 한 사람만 가질 수 있는 무언가.
 - 데이터를 갱신하고 싶을 땐, 세마포어를 소유하고 있어야만 가능하다는 규칙을 도입.
 - 그러나 세마포어를 소유하고 있지 않으면 해당 코드는 동작할 수 없음.

공유 메모리는 동시성 문제의 원인으로 많이 지목된다. 하지만 수정 가능한 리소스를 가지고 있는 앱에서는 내부의 코드 어디에서나 동시성 문제가 발생할 수 있다.
리소스는 명백하지 않을 수 있기 때문이다.

<35. 엑터와 프로세스>
"작가가 없다면 이야기는 쓰이지 않을 것이다. 배우(actor)가 없다면 이야기는 생명을 얻지 못할 것이다."
엑터와 프로세스를 이용하여 동시성을 구현할 수 있다.
 - 엑터 : 자신만의 비공개 지역 상태를 가진 독립적인 가상 처리장치.
 - 프로세스 : 일반적인 가상 처리기. 운영체제가 동시성을 지원하기 위하여 구현.

엑터는 언제나 동시성을 가진다.
 - 시스템이 저장하는 상태는 오직 메시지와 엑터의 지역 상태뿐이다.
 - 모든 메시지는 일방향이며 답장이라는 개념은 없다.
 - 엑터는 한 번에 하나의 메시지만 처리할 수 있다.
따라서 엑터들은 아무것도 공유하지 않을 상태를 가지면서 비동기적으로 실행시킬 수 있다.

<36. 칠판>
칠판에 자료가 쌓이면 그 속에서 무엇인가 연결고리를 찾아내서 자신의 관찰이나 추측을 붙인다.
"자유방임주의"적 동시성이다. 
독립된 프로세스, 에이전트, 엑터 중 누군가는 칠판에 수집한 사실을 붙이고, 누군가는 떼어낸다. 사실을 조합하거나 처리할 수도 있고 더 많은 정보를 덧붙일 수도 있다. 칠판은 사람들이 서서히 결론에 도달하도록 돕는다.

728x90
반응형