독서일지/클린 코드

클린 코드 독서일지 - Day 24

Sadie Kim 2023. 11. 27. 22:28

동시성

동시성 : 여러 스레드를 동시에 돌리는 것

동시성을 구현한 코드를 깨끗하게 짜는 것은 어렵고 복잡하다.

동시성이 필요한 이유

동시성은 무엇과 언제를 분리하는 전략.
스레드가 하나인 프로그램은 무엇과 언제가 서로 밀접하지만, 이를 분리하면 프로그램을 작은 협력 프로그램 여럿으로 나눌 수 있다. => 구조/효율 개선 가능.
또한 응답 시간과 작업 처리량 개선을 위해 동시성 구현을 꼭 해야만 하는 경우도 있음 -> 웹 사이트의 정보 수집기.

미신과 오해

동시성과 관련된 일반적인 미신과 오해는 다음과 같다.

  • 동시성은 항상 성능을 높여준다.
    -> X, 동시성은 때로 성능을 높여준다.
    대기 시간이 아주 길어 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독립적인 계산이 충분히 많은 경우에만 성능이 높아진다.
  • 동시성을 구현해도 설계는 변하지 않는다.
    -> X, 단일 스레드 시스템과 다중 스레드 시스템은 설계가 판이하게 다르다.
  • 웹 또는 EJB 컨테이너를 사용하면 동시성을 이해할 필요가 없다.
    -> X, 실제로는 컨테이너가 어떻게 동작하는지, 어떻게 동시 수정이나 데드락 같은 문제를 피할 수 있는지 알아야 한다.

반대로 동시성과 관련된 타당한 생각 몇 가지는 다음과 같다.

  • 동시성은 다소 부하를 유발한다. 성능 측면에서 부하가 걸리며 코드도 더 짜야 한다.
  • 동시성은 복잡하다.
  • 일반적으로 동시성 버그는 재현하기 어렵다. 그래서 진짜 결함으로 간주되지 않고 일회성 문제로 여겨 무시하기 쉽다.
  • 동시성을 구현하려면 흔히 근본적인 설계 전략을 재고해야 한다.

난관

동시성을 구현하기 어려운 이유 : 두 스레드가 동일한 코드를 거쳐가는 경로는 수없이 많은데, 그 중 일부 경로가 잘못된 결과를 내놓기 때문이다.