- 특정 스레드에서 작업이 실패하거나 또는 대기 상태에 들어간 경우에, 다른 어떤 스레드라도 그로 인해 실패하거나 대기 상태에 들어가지 않는 알고리즘을 대기 상태에 들어가지 않는 알고리즘, 즉 넌 블로킹 알고리즘이라고 한다.
- 즉, "A가 실패하더라도 나는 영향을 받지 않는 알고리즘"
- 또한, 각 작업 단계마다 일부 스레드는 항상 작업을 진행 할 수 있는 경우 락 프리 알고리즘이라고 한다.
- 스레드간의 작업 조율을 위해 CAS 연산을 독점적으로 사용하는 알고리즘을 올바로 구현한 경우에는 대기 상태에 들어가지 않는 특성과 락 프리 특성을 함께 가지게 된다.
- 여러 스레드가 경쟁하지 않는 상황이라면 CAS연산은 항상 성공하고, 여러 스레드가 경쟁을 한다고 해도 최소한 하나의 스레드는 반드시 성공하기 때문에 성공한 스레드는 작업을 진행할 수 있다.
- 즉, CAS 연산은 해당 스레드가 직접 비교하고 같다면 바꾸는 역할을 하므로, 경쟁이 없다면 무조건 성공할 것이고 경쟁을 한다면 최소한 하나의 스레드는 성공하므로 작업을 계속 진행할 수 있다.
- 넌블로킹 알고리즘은 데드락이나 우선 순위 역전등의 문제점이 발생하지 않는다.
- 물론, 지속적으로 재시도만 하고 있을 가능성도 있기 때문에 라이브락 등의 무넺점이 발생할 가능성도 있기는 하다.
- 즉, "A가 실패하더라도 나는 영향을 받지 않는 알고리즘"
- 또한, 각 작업 단계마다 일부 스레드는 항상 작업을 진행 할 수 있는 경우 락 프리 알고리즘이라고 한다.
- 스레드간의 작업 조율을 위해 CAS 연산을 독점적으로 사용하는 알고리즘을 올바로 구현한 경우에는 대기 상태에 들어가지 않는 특성과 락 프리 특성을 함께 가지게 된다.
- 여러 스레드가 경쟁하지 않는 상황이라면 CAS연산은 항상 성공하고, 여러 스레드가 경쟁을 한다고 해도 최소한 하나의 스레드는 반드시 성공하기 때문에 성공한 스레드는 작업을 진행할 수 있다.
- 즉, CAS 연산은 해당 스레드가 직접 비교하고 같다면 바꾸는 역할을 하므로, 경쟁이 없다면 무조건 성공할 것이고 경쟁을 한다면 최소한 하나의 스레드는 성공하므로 작업을 계속 진행할 수 있다.
- 넌블로킹 알고리즘은 데드락이나 우선 순위 역전등의 문제점이 발생하지 않는다.
- 물론, 지속적으로 재시도만 하고 있을 가능성도 있기 때문에 라이브락 등의 무넺점이 발생할 가능성도 있기는 하다.
'JAVA이야기' 카테고리의 다른 글
Java Pattern Group 사용하기 (0) | 2011.11.05 |
---|---|
java thread 내생각 (0) | 2011.11.03 |
단일 연산 변수 클래스 (0) | 2011.09.27 |
AbstractQueuedSynchronizer (0) | 2011.09.26 |
Semaphore와 CountDownLatch (0) | 2011.09.26 |