DAY 6
오늘 읽은 범위 : 6장 동시성
책에서 기억하고 싶은 내용을 써보세요.
비동기적
이기 때문이다.‘공유 상태 shared state’
다. 동시성의 해결 방안 중 액터(actor) 모델
이 있다, 액터 모델에서는 프로세스들이 독립적으로 수행되며 서로 데이터를 공유하지 않는다.
동시성
(동시에 일어나는 일들)과 순서
(시간의 흐름 속에서 일들의 상대적인 위치) 다.그렇게 함으로써 유연성도 얻을 수 있고, 작업 흐름 분석과 아키텍처, 설계, 배포와 같은 개발의 여러 측면에서 시간과 관련된 의존성도 함께 줄일 수 있다. 결과적으로 분석하기 더 쉽고 응답속도도 더 빠르며 더 안정적인 시스템을 만들 수 있을 것이다.
활동 다이어 그램, activity diagram
같은 표기법을 사용해서 작업 흐름을 기록하는 것이 한 방법이다.설계
가 필요하다.동시
작업이나 병렬
작업을 해서 이득
을 볼 수 있는 부분을 찾았다. 이제 어려운 부분이 남았다. 어떻게 안전하게 구현
할 수 있을까?
두 프로세스
가 같은 메모리 영역
에 쓰기가 가능하다는 점이 아니다. 문제는 어느 프로세스도 자신이 보는 메모리가 일관되어 있음을 보장할 수 없다
는 점
세마포어, semaphore
는 단순히 한 번
에 한 사람
만이 가질 수 있는 무언가다.세마포어를 획득
하는 작업을 ‘P’로, 반환하 는 작업을 ‘V’로 불렀지만,4 요즘은 ‘잠금lock/잠금 해제unlock’
, ‘획득claim/반환 release’
등으로 부른다.case_semaphore.lock()
if display_case.pie_count > 0
promise_pie_to_customer()
display_case.take_pie()
give_pie_to_customer()
end
case_semaphore.unlock()
세마포어를 확보
한 쪽은 평소처럼 계속 진행
한다. 세마포어를 얻지 못한
쪽은 세마포어를 얻을 수 있을 때 까지 멈춰 있는다. 즉, 기다린다.
약속을 지키지 않는 코드를 쓴다면 다시 혼돈
에 빠진다.책임
을 진열장을 사용하는 사람에게 전가
하기 때문이다.중앙
으로 집중시키자. 수정 가능한 리소스를 공유
하는 애플리케이션 코드 어디에서나
동시성 문제가 발 생할 수 있다.액터
와 프로세스
를 사용하면 흥미로운 방식으로 동시성을 구현할 수 있다. 공유 메모리 접근을 동기화하느라 고생할 필요도 없다액터
는 자신만의 비공개 지역 상태 (state)를 가진 독립적인 가상 처리 장치 (virtual processor) 다.프로세스
는 본래 더 일반적인 가상 처리기로, 보통 운영 체제가 동시성을 지원하기 위하여 구현한다.공유 상태 없는 동시성을 위하여 액터를 사용하라.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.
프로세스와 스레드라는 주제로 블로그 글을 작성을 한 적이 있었는 데, 글 작성시에 동시성이라는 개념을 이해를 잘 못했었던 기억이 난다.
이 책을 읽고 난 후에, 동시성이라는 것이 프로그래밍을 할 때 매우 중요한 개념이라는 것을 체감할 수 있었고 이해할 수 있는 좋은 경험을 쌓은 것 같다.
책 도중에 자바스크립트로 동시성에 대한 코드가 잠시 나왔었는 데, 그부분도 더 공부를 해보아야겠다.
항상 프로그램을 설계할 때 동시성 개념을 유의하며 작성해야겠다. 더 나은 코드를 설계하기 위하여 끊임없는 고민과 동료들과의 협업을 통하여 규칙을 잘 설정하는 것도 매우 중요하다.