오늘의../이달의 책

[노개북] 실용주의 프로그래머 (6장. 동시성)

호마 2022. 3. 30. 01:35

오늘 읽은 범위 🔖 6장. 동시성 

📝 책에서 기억하고 싶은 내용
  • 용어 정의 (p. 241)
    • 동시성concurrency: 동시에 실행 중인 것처럼 행동하는 것 ex) 파이버fiver, 스레드, 프로세스 등을 사용
    • 병렬성parallelism: 실제로 동시에 실행되는 것 ex) 여러 개의 일을 동시에 할 수 있는 하드웨어. 코어가 여러개인 CPU, 여러대의 CPU 등
  • 시간적 결합temporal coupling 깨트리기
    • 보통 직선적 사고를 하기 마련이다. ...우리는 동시성을 확보해야 한다. 시간이나 순서에 의존하는 시간적 결합을 끊는 방법을 생각해 내야 한다. (p. 244)
    • 작업 흐름을 분석하라 -> 활동 다이어그램activity diagram 작성하기 (p. 244)
  • 공유 상태는 틀린 상태
    • 상태를 공유하는 것은 잘못된 것이라는 의미
    • 세마포어semaphore: 상호 배제 방법 중 하나로 한 번에 한 사람만이 가질 수 있는 무언가를 의미한다. 파이 진열장 위에 도깨비 인형(세마포어)을 두고 도깨비 인형을 손에 넣어야만 파이를 주문 받을 수 있도록 하여 하나 남은 파이를 이중 주문 넣지 않도록 해준다.
      • 코드 작성시 주로 잠금lock/잠금해제unlock, 획득claim/반환release 단어를 활용
    • 불규칙한 실패는 동시성 문제인 경우가 많다 (p. 257)
    • 언어에서 상호 배제mutual exclusion, mutex, 모니터monitor, 세마포어는 공유 리소스에 독점적으로 접근하는 것을 도와주는 라이브러리를 의미한다. (p. 257)
  • 액터와 프로세스
    • 액터actor 모델을 이용하여 동시성을 구현할 수 있다. (p.258)
    • Node.js용 Nact라이브러리를 사용하여 구현할 수 있고(p.260), 얼랭Erlang 언어는 액터 구현의 좋은 사례이다. (p. 265)
  • 칠판
    • kafka나 NATS 같은 메시지 시스템과 유사하다.
💭 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보기
  • 동시성, 병렬 처리는 개발 공부를 하면 가장 이해하기 어려운 부분 중 하나인것 같다. 성능면에선 훌륭하지만 구현하는데 시간이 걸리기 때문에 아직 실무에서 제대로 적용해본적 없다. 하지만 꼭 반영하고 싶은 부분이다. 
  • '불규칙한 실패는 동시성 문제인 경우가 많다'는 문장이 와닿았다. 전 회사에서 큰 이미지를 처리하기 위해 parallel를 사용했는데 오류가 확실하지 않을 땐 동시에 돌아가는 코드 안에서 데이터를 잘못 접근하는 경우가 많았다.
🔍 궁금하거나 잘 이해되지 않는 내용

 


오늘의 TIL 3줄 요약

  • 동시성concurrency과 병렬성parallelism은 다르다.
  • 상태를 잘못 공유하면 안된다.
  • 불규칙한 실패는 동시성 문제인 경우가 많다