자바 병렬 프로그래밍 - 활동성

업데이트:

활동성 문제

데드락

가장 흔한 활동성 문제는 락 순서에 의한 데드락이다.

가능하다면 한번에 하나 이상의 락을 사용하지 않도록 프로그래밍하는 것이 작업량을 많이 줄일 수 있다.

두 개 이상의 락을 한번에 사용해야 한다면, 항상 일정한 순서를 두고 여러 개의 락을 확보해야만 한다.

프로그램 내부의 모든 스레드에서 필요한 락을 모두 같은 순서로만 사용한다면, 락 순서에 의한 데드락은 발생하지 않는다.

오픈 호출 방법을 사용해 메서드를 호출하면 한 번에 여러 개의 락을 사용하는 경우를 많이 줄일 수 있고, 띠라서 여러 개의 락을 사용하는 부분을 쉽게 찾을 수 있다.

  • 오픈 호출 : 락을 전혀 확보하지 않은 상태에서 메서드를 호출하는 것!

스레드 덤프를 활용하면 데드락 분석이 가능하다.

  • SIGQUIT 시그널(kill -3) 을 이용하면 스레드 덤프가 생성된다. (이외에도 여러 방법이 있다)

소모 starvation

소모 상태는 스레드가 작업을 진행하는 데 필요한 자원을 할당받지 못하는 경우 발생한다. 스레드 우선 순위를 적절치 못하게 설정했을 때 발생할 수 있다.

일반적인 상황에서는 스레드 우선 순위를 변경하지 않고 그래도 사용하는 방법이 가장 현명할 것이다.

참고

책 ‘자바 병렬 프로그래밍’

댓글남기기