본문 바로가기
[Java Concurrency] 활동성 최대로 높이기 #1 [Java Concurrency] 활동성 최대로 높이기 #1 - 안정성(safety)와 활동성(liveness) 사이에는 밀고 당기는 힘이 존재하는 경우가 많다. 스레드 안전성을 확보하기 위해서 락을 사용하곤 하는데, 락이 우연찮게 일정한 순서로 동작하다 보면 락 순서에 따라 데드락이 발생하기도 한다. 시스템 자원 사용량을 적절한 수준에서 제한하고자 할 때 스레드 풀이나 세마포어를 사용하기도 하는데, 동작하는 구조를 정확하게 이해하지 못하고 있다면 더 이상 자원을 할당받지 못하는 또 다른 형태의 데드락이 발생할 수 있다. - 자바 어플리케이션은 데드락 상태에서 회복할 수 없기 때문에 항상 프로그램의 실행 구조상 데드락이 발생할 가능성이 없는지 먼저 확인해야 한다. 10.1. 데드락 - 데이터베이스 시스템.. 2017. 5. 1.
[Effective Java] 스레드 스케쥴러에 의존하지 말자 [Effective Java] 스레드 스케쥴러에 의존하지 말자 - 많은 스레드가 runnable 상태일 때는 어떤 스레드를 실행시킬 것인지, 그리고 얼마 동안 실행시킬 것인지를 스레드 스케쥴러가 결정한다. 운영체제에서는 공정하게 그런 결정을 내리려고 하겠지만, 그 정책은 서로 다를 수 있다. 따라서 잘 작성한 프로그램은 그런 정책의 상세한 내용에 매달려서는 안 된다. 정확성이나 성능을 스레드 스케줄러에 의존하는 프로그램이라면 그 어떤 것도 이식성이 없어질 가능성이 크다. - 강력하고, 응답성이 좋고, 이식성이 있는 프로그램을 작성하는 가장 좋은 방법은, runnable 상태의 평균 스레드 개수가 프로세서의 개수보다 그리 크지 않게 하는 것이다. 이렇게 하면 스레드 스케줄러는 선택의 여지 없이 runnab.. 2017. 3. 17.
반응형