달력

1

« 2025/1 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2011. 9. 27. 13:50

넌블로킹 알고리즘 JAVA이야기2011. 9. 27. 13:50

- 특정 스레드에서 작업이 실패하거나 또는 대기 상태에 들어간 경우에, 다른 어떤 스레드라도 그로 인해 실패하거나 대기 상태에 들어가지 않는 알고리즘을 대기 상태에 들어가지 않는 알고리즘, 즉 넌 블로킹 알고리즘이라고 한다.
- 즉, "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
:
Posted by НooпeУ


Code Start Code End