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) 다.프로세스는 본래 더 일반적인 가상 처리기로, 보통 운영 체제가 동시성을 지원하기 위하여 구현한다.공유 상태 없는 동시성을 위하여 액터를 사용하라.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.
프로세스와 스레드라는 주제로 블로그 글을 작성을 한 적이 있었는 데, 글 작성시에 동시성이라는 개념을 이해를 잘 못했었던 기억이 난다.
이 책을 읽고 난 후에, 동시성이라는 것이 프로그래밍을 할 때 매우 중요한 개념이라는 것을 체감할 수 있었고 이해할 수 있는 좋은 경험을 쌓은 것 같다.
책 도중에 자바스크립트로 동시성에 대한 코드가 잠시 나왔었는 데, 그부분도 더 공부를 해보아야겠다.
항상 프로그램을 설계할 때 동시성 개념을 유의하며 작성해야겠다. 더 나은 코드를 설계하기 위하여 끊임없는 고민과 동료들과의 협업을 통하여 규칙을 잘 설정하는 것도 매우 중요하다.