CS

[실용주의 프로그래머] 6장. 동시성

Rosie_dev 2022. 3. 30. 00:15

DAY 12,13 오늘 읽은 범위: 6장. 동시성

📚 책에서 기억하고 싶은 내용?


'동시성'이란 동시에 실행 중인 것처럼 행동하는 것을 의미하고,
'병렬성'이란 실제로 동시에 실행되는 것이다.

  • 동시성은 파이퍼, 스레드, 프로세스 등을 사용
  • 병렬성은 멀티코어나 여러 대의 컴퓨터를 이용

작업흐름 분석을 통해 동시성을 개선하라.

  • 시간적 결함 → 동시성, 순서
  • 활동 다이어그램을 사용하면서 동시에 수행할 수 있는데도 아직 동시에 하고 있지 않은 활동들을 찾아내서 병렬성을 극대화할 수 있다.
  • 엘릭서의 컴파일러
    시작할 때 빌드 프로젝트를 여러 모듈로 쪼갠 후, 각각을 병렬로 컴파일한다. 가장 바깥쪽 모듈의 컴파일이 완료되었다는 것은 모든 코드가 컴파일되었다는 것이다.
  • 동시성을 고려한 설계
    자바의 멀티 쓰레드 기능으로 동시성을 고려하게 된다. thread safe
    더 깔끔한 인터페이스를 설계하는 방향을 고려한게 된다.
    예) C의 strtok보다 Java의 StringTokienizer를 이용한 설계가 유지보수하기에도 더 깔끔하다.

공유 상태는 틀린 상태다.

  • 세마포어
    상호배제, 뮤텍스, 모니터
    단순히 한 번에 한 사람만이 가질 수 있는 무언가
    lock/unlock, claim/release
  • 트랜잭션 없는 갱신

공유 상태 없는 동시성을 위해 액터를 사용하라.

  • '액터'는 자신만의 비공개 지역상태를 가진 독립적인 가상 처리 장치다. 우편함이 비어있을 때만 잠든다.
  • '프로세스'는 운영체제의 동시성을 위해 구현하는데, 이 챕터에서 프로세스는 액터처럼 만들어 제한적으로 사용하는 경우의 프로세스를 말한다.
  • 액터는 관리하는 것이 없고, 외부에서 지역상태 접근이 불가능하며, 일방향 메시지 성격을 띤다.
  • 액터는 공유된 상태가 없어 동시성 관리할 필요가 없다.
  • 얼랭(Erlang)과 런타임

칠판을 이용해 작업흐름을 조율하라.

  • 일반적인 분산 애플리케이션을 작성할 때는 시스템 내부의 모든 분산 트랜잭션과 상호작용마다 서로 구별되는 API 호출을 만드느라 상당한 시간을 소모하기 마련이다.

 

🤩 오늘 읽은 소감?


이전에 작성한 내용이 개정 전 책이라서 목차가 상당히 달라진 것을 이제 알았다.
그래서 고쳐놓느라 이번에는 저절로 이전 분량도 새로 정리하는 복습시간이 되었던 것 같다.
다행이도 2일의 시간이 주어져서 감사했다.

 

특히나 아이스크림 스쿱이야기를 하는 부분에서는 복잡한 로직의 코드를 작성했던 경험이 있어 반성하게 됐는데, 이 부분에 대한 자세한 방안을 코드로 보여주면 더 좋았겠다는 생각이 들었다.

 

공유상태에 대한 개념은 더 학습이 필요할 것 같다.

 

 궁금한 점이나 잘 이해되지 않는 내용


  • 세마포어 처리를 위한 라이브러리

 

 

 

실용주의 프로그래머 - 교보문고

The Pragmatic Programmer숙련공에서 마스터로프로그래밍은 대체로 머리로 하는 일이지만 한편으로는 몸에 새겨져야 하고 때로는 그 이상의 통찰을 발휘해야 하는 상황에 맞닥뜨리게 되는 복합적인

www.kyobobook.co.kr

 

댓글