티스토리 뷰
동시성은 결합을 없애는 전략. 무엇(what)과 언제(when)을 분리하는 전략인데, 이렇게 하면 애플리케이션 구조와 효율이 극적으로 나아짐.
예를 들어, 웹 애플리케이션이 표준으로 사용하는 서블릿 모델에서는 원칙적으로 각 서블릿 스레드는 다른 서블릿 스레드와 무관하게 자신만의 세상에서 돌아감.
동시성을 정확히 구현하도록 해야하는 이유는 구조적 이점, 응답 시간과 작업 처리량 개선 등의 요구사항이 있기 때문.
1. 동시성은 때로 성능을 높여준다.
2. 단일 스레드 시스템과 다중 스레드 시스템은 설계가 판이하게 다르다.
3. 동시성은 다소 부하를 유발한다.(코드도 더 짜야 한다.)
4. 동시성은 복잡하다.
5. 일반적으로 동시성 버그는 재현하기 어렵다.
6. 동시성을 구현하려면 흔히 근본적인 설계 전략을 재고해야 한다.
동시성 방어 원칙
1. 단일 책임 원칙 : 동시성 코드는 다른 코드와 분리하라
2. 자료 범위를 제한하라(공유 객체를 사용하는 코드 내 임계영역을 synchronized 키워드로 보호할 것)
3. 자료를 캡슐화하라
4. 공유 자료를 사용하지 말고 자료 사본을 사용하라
5. 스레드는 가능한 독립적으로 구현하라
스레드 코드를 구현할 때 고려할 것
1. 스레드 환경에 안전한 컬렉션을 사용할 것
- java.util.concurrent 패키지가 제공하는 클래스는 다중 스레드 환경에서 사용해도 안전하며, 성능도 좋음. 실제로 ConcurrentHashMap은 거의 모든 상황에서 HashMap보다 빠름. 동시 읽기/쓰기를 지원하며, 자주 사용하는 복합 연산을 다중 스레드 상에서 안전하게 만든 메서드로 제공
'클린코드' 카테고리의 다른 글
[클린코드 요약] 12. 창발성 (0) | 2021.05.10 |
---|---|
[클린코드 요약] 11. 시스템 (0) | 2021.05.04 |
[클린코드 요약] 10. 클래스 (0) | 2021.04.19 |
[클린코드 요약] 9. 단위 테스트 (0) | 2021.04.15 |
[클린코드 요약] 8. 경계 (0) | 2021.04.07 |