티스토리 뷰

업무 경험 및 성과

왜 Atomic Variable을 사용했을까?

주디 𝙹𝚞𝚍𝚢 2022. 11. 11. 19:14

 최근 진행했던 프로젝트에서 동시성 제어를 해결해야 했다. 자바에서 동시성 제어를 위해 제공하는 건 세 가지 방법이 있다. 첫째, synchronized, 둘째, Atomic variable, 셋째, volatile.

 나는 이 중 Atomic variable을 사용했는데, 왜 Atomic Variable을 사용했는지 이유를 정리해보고자 한다. 나름의 리서치를 통해 Atomic Variable을 사용하긴 했지만 반드시 Atomic Variable을 사용해야 한다고 주장하는 글도 아니다.


성능 저하를 막기 위해

 가장 일반적으로 알고 있는 synchronized 같은 경우는 가장 안전하다고 알려져 있지만, 성능 저하가 발생한다는 단점이 있다. 현재는 스케줄로 동작하지만 내가 작업한 부분의 경우, 후에 대규모 호출이 발생할 수도 있는 부분이었다. 그렇기 때문에 sychronized를 선택하지 않았다.


목적에 좀 더 부합하기 위하여

 찾아본 결과, volatile은 메모리 가시성을 위해 메인 메모리를 이용하는 것이 주목적이라고 생각했다. 그렇지만 내 경우 이 목적에 해당하지 않으므로 volatile은 제외했다.


Atomic variable은 CAS(Compare and Swap) 알고리즘으로 synchronized보다 효율적으로 동시성을 보장한다고 한다.(https://jaehoney.tistory.com/112) 자바병렬프로그래밍 책에서도 단일 연산 변수(Atomic Variable)는 Lock보다 훨씬 가벼우면서 세밀한 구조이고, 스레드가 경쟁하는 범위를 하나의 변수로 좁혀주는 효과가 있다고 서술되어 있다. 그리고 volatile의 경우, synchronized 블록으로 변수를 묶지 않고도 메모리 가시성을 확보할 수 있도록 해주는데, 출처에 따르면 여러 자바 구현체에서 그 기능이 명확하지 않아 혼란을 초래했기 때문에 Atomic Variable을 새로 만든 것 같다고 한다.(https://m.blog.naver.com/PostView.naver?blogId=jjoommnn&logNo=130037479493&navType=by) 나의 경우, 위와 같은 이유로 Atomic variable을 사용했다. 

300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함