2010년 12월 26일 일요일

비관적(Pessimistic) 락과 낙관적(Optimistic) 락 (작성중)

비관적(Pessimistic) 락
  • 단어의 의미 그대로 어떠한 처리를 위해서 Lock을 점유하고 해제하는 정책이
    비관적인 가정(내가 업데이트하려고 하는 레코드를 다른 사용자도 업데이트하려고 할 것이다)하에서
    이루어지는 형태
  • 예를 들어서, 어떤 업데이트 작업을 하려고 하는데, 이 작업을 위해서 먼저 검색이 필요하다고 가정해보자.
    이때, 비관적 락 기반으로 작성된 로직이라면, 검색하기 전부터 락을 먼저 점유하고 모든 작업을
    진행하게 될 것이다.
  • 이 방식은 각 프로세스들의 락 점유 시간을 연장시키기 때문에 동시성이 떨어지게 된다.
  • 대신 Deadlock의 발생 가능성이 낮아지게 된다.

낙관적(Optimistic) 락
  • 낙관적 락은 비관적 락과 거의 반대 개념으로 생각하면 될듯 하다.
    (내가 업데이트하려고 하는 레코드를 다른 사용자는 접근하지 않을 것이다.)
  • 위의 업데이트 시나리오로 비교해본다면, 낙관적 락은 검색은 그냥 진행하고,
    최종 업데이트 하는 과정에서만 락을 점유하게 된다.
  • 낙관적 락은 락 점유 시간을 최소화하기 때문에 동시성이 좋아지게 된다.
  • 하지만, 뒤늦은 락 점유로 인해서 Deadlock의 가능성이 높아지게 된다.

댓글 없음:

댓글 쓰기