클린코드 13장에서는 동시성을 아주 가볍게 다루고 있다.
더 자세한 내용은 뒤쪽 동시성II 또는 관련된 서적을 읽는 게 좋을 것 같다.
객체는 처리의 추상화다. 스레드는 일정의 추상화다.
- 제임스 O. 코플리엔
동시성이 필요한 이유
- 동시성은 결합을 없애는 전략이다.
- 무엇과 언제를 분리하는 전략이다.
- 응답 시간과 작업 처리량 개선이라는 요구사항으로 인해 직접적인 동시성 구현이 불가피하다.
하지만
- 동시성은 다소 부하를 유발한다.
- 동시성은 복잡하다.
- 일반적으로 동시성 버그는 재현하기 어렵다. 일회성 문제로 여겨 무시하기 쉽다.
- 동시성을 구현하려면 흔히 근본적인 설계 전략을 재고해야 한다.
동시성 방어 원칙
- 동시성 코드는 다른 코드와 분리하라
- 자료 범위를 제한하라 (코드 내 임계영역을 synchronized 키워드로 보호)
- 자료 사본을 사용하라
- 스레드는 가능한 독립적으로 구현하라
결론
- 공유 객체 하나에는 메서드 하나만 사용한다.
- 동기화하는 부분을 작게 만들어야 한다.
- 종료 코드는 시간을 투자해 올바로 구현해야 한다.
- 문제를 노출하는 테스트 케이스를 작성해야 한다.
- 시스템의 실패를 '일회성'으로 치부하면 안 된다.
- 스레드 환경 밖에서 생기는 버그와 스레드 환경에서 생기는 버그를 동시에 디버깅하면 안 된다.
- 다양한 설정에서 실행할 목적으로 다른 환경에 쉽게 끼워 넣을 수 있는 코드를 구현해야 한다.
- 처음부터 모든 목표 플랫폼에서 코드를 돌려야 한다.
- 흔들기 기법을 사용해 오류를 찾아낸다.
'Book > 클린코드' 카테고리의 다른 글
[클린코드] 15장 JUnit 들여다보기 (0) | 2023.09.21 |
---|---|
[클린코드] 14장 점진적인 개선 (0) | 2023.09.21 |
[클린코드] 12장 창발성(創發性) (0) | 2023.09.17 |
[클린코드] 11장 시스템 (0) | 2023.09.17 |
[클린코드] 10장 클래스 (0) | 2023.09.17 |