티스토리 뷰
TIL (Today I Learned) 날짜
2022.5.25 (수)
오늘 읽은 범위
6장. 동시성
책에서 기억하고 싶은 내용을 써보세요.
- 동시성 : 둘 이상의 코드 조각이 실행될 때 동시에 실행 중인 것처럼 행동하는 것 - 소프트웨어 동작 방식
- 병렬성 : 실제로 동시에 실행되는 것 - 하드웨어 작업
- 시스템 규모가 어느 정도를 넘어가면 동시성을 고려하지 않고 작성하기란 거의 불가능하다.
- 사용자와 상호 작용을 하고, 데이터를 불러오고, 외부 서비스를 호출하는 일을 동시에 해야 하기 때문에 동시성은 필수다.
- 유연해지려면 A -> B 라는 시간적 결합에 의존하면 안 된다.
- 가장 큰 문제는 공유 상태(shared state)이다.
- 둘 이상의 코드 뭉치가 하나의 변경 가능한 데이터를 참조하고 있다면 공유 상태가 존재하는 것이다.
- 두 프로세스가 같은 메모리 영역에 쓰기가 가능한다 = 어느 프로세스도 자신이 보는 메모리가 일관되어 있음을 보장할 수 없다.
- 액터 모델
- 프로세스들이 독립적으로 수행되며 서로 데이터를 공유하지 않는 상태.
- 대신 채널을 통해 잘 정의된 단순한 의미론을 사용하여 의사소통한다.
- 시간적 결합 깨뜨리기
- 시간에서 신경써야 할 측면 2가지
- 동시성 (동시에 일어나는 일 들)
- 순서 (시간의 흐름 속에서 일들의 상대 위치)
- 시간에서 신경써야 할 측면 2가지
- 우리는 동시성을 확보해야 한다. 다시 말해 시간이나 순선에 의존하는 시간적 결합을 끊는 방법을 생각해 내야 한다.
- 얻는 이익 : 유연성 증가 , 작업 흐름 분석과 아키텍처, 설계, 배포와 같은 개발의 여러 측면에서 시간과 관련된 의존성을 함께 줄일 수 있다.
- 동시성 찾기
- 애플리케이션의 작업 흐름을 모델화하고 분석하는 작업 필요하다.
- 동시에 일어나도 되는 게 뭐고, 반드시 순서대로 일어나야 하는 건 어떤 것인지 찾아내야 한다.
- 미션 : '활동 다이아그램'을 사용해서 작업 흐름 기록해보기
- 동시 작업의 기회 - 기다리는 동안 더 생산적인 일을 CPU에게 맡기자
- 데이터 베이스를 조회할 때
- 외부 서비스에 접근할 때
- 사용자 입력을 기다릴 때
- 병렬 작업의 기회
- 하드웨어가 하는 일
- 리소스를 트랜잭션으로 관리하라.
- 제어를 중앙으로 집중시키자.
- 동시성 구현 방식
- 액터 : 자신만의 비공개 지역 상태(state)를 가진 독립적인 가상 처리 장치
- 관리하는 것이 하나도 없다.
- 오직 메세지만 받고, 메시지는 일방향이다. 답장이라는 개념이 없다.
- 메세지 끝날 때까지 중간에 다른 일을 하지 않는다. 한 번에 하나의 메시지를 처리한다.
- 공유 없는 동시성을 위할 때 사용된다.
- 프로세스 : 보통 운형 체제가 동시성을 지원하기 위해 구현하는 더 일반적인 가상 처리기
- 액터 : 자신만의 비공개 지역 상태(state)를 가진 독립적인 가상 처리 장치
- 칠판
- 특징
- 서로 존재를 알 필요가 없다.
- 원하는 때에 자유롭게 작성 가능하다.
- 데이터 도착 순서와 상관없이 칠판에 올라가면 적절한 규칙이 발동되도록 하면 된다.
- 특징
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.
책을 읽으면서 그래서 실무에 어떻게 적용할 수 있지? 구체적으로 어떤 액션으로 이어갈 수 있지라고 질문하면서 책을 읽었다. 아직은 개념 자체도 낯설어서 업무에 적용할 구체적인 방법이 떠오르지가 않는다. 다시 읽으면서 조금 더 익숙해져야 될 것 같다.
댓글