오늘 읽은 범위 🔖 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를 사용했는데 오류가 확실하지 않을 땐 동시에 돌아가는 코드 안에서 데이터를 잘못 접근하는 경우가 많았다.
🔍 궁금하거나 잘 이해되지 않는 내용
- 파이버fiver: 스레드보다 가벼운 실행 단위를 의미한다. 한 스레드 안에서 여러개의 파이버가 돌아간다. 사용자 공간 스레드user-space thread라고도 한다.
- 스레드와 파이버는 각각 실(thread), 섬유(fiber)의 연관된 어원을 가지고 있기도 하다.
- 참고: https://medium.com/@jooyunghan/%EC%BD%94%EB%A3%A8%ED%8B%B4%EA%B3%BC-%ED%8C%8C%EC%9D%B4%EB%B2%84-9e93c12bce30
- 활동 다이어그램activity diagram
- 원자적atomic: 더 이상 쪼갤 수 없는 상태를 의미함
- 러스트Rust의 데이터 소유권: https://rinthel.github.io/rust-lang-book-ko/ch04-01-what-is-ownership.html
- 영속성Persistence: 어떤 데이터를 생성한 프로그램이나 프로세스의 실행이 종료되더라도 그 데이터가 DB나 파일로 저장되어있어서 사라지지 않는 특성을 의미, JAVA의 JPA의 특성으로 유명하다.
오늘의 TIL 3줄 요약
- 동시성concurrency과 병렬성parallelism은 다르다.
- 상태를 잘못 공유하면 안된다.
- 불규칙한 실패는 동시성 문제인 경우가 많다
'오늘의.. > 이달의 책' 카테고리의 다른 글
[노개북] 실용주의 프로그래머 (8장. 프로젝트 전에) (0) | 2022.04.04 |
---|---|
[노개북] 실용주의 프로그래머 (7장. 코딩하는 동안) (0) | 2022.04.02 |
[노개북] 실용주의 프로그래머 (Mission 2) (0) | 2022.03.29 |
[노개북] 실용주의 프로그래머 (5장. 구부러지거나 부러지거나) (0) | 2022.03.26 |
[노개북] 실용주의 프로그래머 (4장. 실용주의 편집증) (0) | 2022.03.25 |