티스토리 뷰

읽은 책

실용주의 프로그래머 (6장)

숨_쉬듯 2022. 5. 25. 23:28

TIL (Today I Learned) 날짜

2022.5.25 (수)

오늘 읽은 범위

6장. 동시성

책에서 기억하고 싶은 내용을 써보세요.

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

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.

책을 읽으면서 그래서 실무에 어떻게 적용할 수 있지? 구체적으로 어떤 액션으로 이어갈 수 있지라고 질문하면서 책을 읽었다. 아직은 개념 자체도 낯설어서 업무에 적용할 구체적인 방법이 떠오르지가 않는다. 다시 읽으면서 조금 더 익숙해져야 될 것 같다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함