2011. 9. 27. 13:02
단일 연산 변수 클래스 JAVA이야기2011. 9. 27. 13:02
단일 연산 변수(atomic variable)는 락보다 훨씬 가벼우면서 세밀한 구조를 갖고 있으며, 멀티프로세서 시스템에서 고성능의 병렬 프로그램을 작성하고자 할 때 핵심적인 역할을 한다.
단일 연산 변수를 사용하면 스레드가 경쟁하는 범위를 하나의 변수로 좁혀주는 효과가 있으며, 이 정도의 범위는 프로그램에서 할수 있는 가장 세밀한 범위이다.
락의 특성
- 락을 두고 경쟁이 발생하면 대기 상태에 들어가는 스레드가 나타나는데, 일부 스레드가 대기 상태에 들어가면 전체적인 CPU사용률과 공유된 메모리 버스의 동기화 트래픽이 줄어드는 효과가 있다.
- 즉, 실행가능한 큐에 쌓이는 스레드가 적어지게됨
- 반면에, 단일 연산 변수를 사용하면 경쟁 조건에 대한 처리 작업의 책임이 경쟁하는 스레드에게 넘어간다.
경쟁이 적거나 보통의 경쟁 수준에서는 단일 연산 변수를 사용해야 확장성을 높일 수 있다.
경쟁 수준이 아주 높은 상황에서는 락을 사용하는 쪽이 경쟁에 더 잘 대응하는 모습을 알 수 있다.
단일 연산 변수를 사용하면 스레드가 경쟁하는 범위를 하나의 변수로 좁혀주는 효과가 있으며, 이 정도의 범위는 프로그램에서 할수 있는 가장 세밀한 범위이다.
락의 특성
- 락을 두고 경쟁이 발생하면 대기 상태에 들어가는 스레드가 나타나는데, 일부 스레드가 대기 상태에 들어가면 전체적인 CPU사용률과 공유된 메모리 버스의 동기화 트래픽이 줄어드는 효과가 있다.
- 즉, 실행가능한 큐에 쌓이는 스레드가 적어지게됨
- 반면에, 단일 연산 변수를 사용하면 경쟁 조건에 대한 처리 작업의 책임이 경쟁하는 스레드에게 넘어간다.
경쟁이 적거나 보통의 경쟁 수준에서는 단일 연산 변수를 사용해야 확장성을 높일 수 있다.
경쟁 수준이 아주 높은 상황에서는 락을 사용하는 쪽이 경쟁에 더 잘 대응하는 모습을 알 수 있다.
'JAVA이야기' 카테고리의 다른 글
java thread 내생각 (0) | 2011.11.03 |
---|---|
넌블로킹 알고리즘 (0) | 2011.09.27 |
AbstractQueuedSynchronizer (0) | 2011.09.26 |
Semaphore와 CountDownLatch (0) | 2011.09.26 |
ReentrantLock (0) | 2011.09.26 |