Reference

    [Effective-Java] Chapter11 #84. 프로그램의 동작을 스레드 스케줄러에 기대지 말라

    📌 이식성을 높이는 방법 💡 정확성이나 성능이 스레드 스케줄러에 따라 달라지는 프로그램이라면 다른 플랫폼에 이식하기 어렵다. 실행 가능한 Thread 평균 개수를 Processor 개수보다 지나치게 많아지지 않도록 하라. 그래야 Scheduler가 고민할 거리가 줄어든다. 실행 준비가 된 Thread들은 맡은 작업을 완료할 때까지 계속 실행되도록 만들어라 전체 Thread 수는 훨씬 많을 수 있고, 대기 중인 Thread는 실행 가능하지 않다. (실행 가능한 Thread 수를 구분하라는 의미) 각 Thread가 어떤 유용한 작업을 완료한 후에 다음 일거리가 생길 때까지 대기하도록 만들어라. 실행 가능한 Thread 수를 적게 유지하는 주요 기법 Thread는 당장 처리해야 할 작업이 없다면 실행돼서는 안..

    [Effective-Java] Chapter11 #83. 지연 초기화는 신중히 사용하라

    ⚔️ 지연 초기화는 양날의 검 소프트웨어 시스템은 Application 객체를 제작하고 의존성을 서로 연결하는 준비 과정과 준비 과정 이후에 이어지는 Runtime 로직을 분리해야 한다. 제작(Construction)과 사용(use)은 아주 다르다. 시작 단계는 모든 Application이 풀어야 할 관심사(Concern)다. 지연 초기화는 관심사 분리가 제대로 이루어지지 않는 좀스러운 방법 중 하나다. public Service getService() { if (service == null) service = new MyServiceImpl(); return service; } 장점 실제 필요한 시점에 객체를 생성하므로 불필요한 부하를 줄인다. Class와 Instance 초기화 때 발생하는 순환 문제..

    [Algorithm Strategies] 3-8. 동적 계획법

    구종만님의 "프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략"을 기반으로 공부한 내용입니다. 📕 목차 1. 도입 2. 와일드카드 (문제 ID: WILDCARD, 난이도: 중) 3. 전통적인 최적화 문제들 4. 합친 LIS (문제 ID: JLIS, 난이도: 하) 5. 원주율 외우기 (문제 ID: PI, 난이도: 하) 6. Quantization (문제 ID: QUANTIZE, 난이도: 중) 7. 경우의 수와 확률 8. 비대칭 타일링 (문제 ID: ASYMTILING, 난이도: 하) 9. 폴리오미노 (문제 ID: POLY, 난이도: 중) 10. 두니발 박사의 탈옥 (문제 ID: NUMB3RS, 난이도: 중) 1. 도입 • 중복되는 부분 문제 • 메모이제이션을 적용할 수 있는 경우 • 메모이제이션 구현 패..

    [Effective-Java] Chapter11 #82. 스레드 안정성 수준을 문서화하라

    📌 API 문서 API 문서는 해당 클래스와 Client 사이의 중요한 계약이다. Multi-thread 환경에서 메서드가 어떻게 동작하는지 명시하지 않으면 Client는 나름의 가정을 해야 한다. 가정이 틀리다면 Client 프로그램은 Synchronize를 충분히 하지 못한다. (Item 78) 혹은 동기화를 지나치게 한 상태가 된다. (Item 79) API 문서에 synchronized 한정자가 모이는 메서드는 Thread-safe와 연관이 없다. 메서드 선언에 synchronized 한정자를 선언할지는 구현 이슈일 뿐 API에 속하지 않는다. Thread-safe는 있고, 없고 기준이 아니라, 그 안에서도 안전성의 수준이 나뉜다. 📌 Levels of thread safety 다음은 Thread..