억대 연봉을 위한 인간수업
반응형

java는 멀티 스레드(Multi-Thread) 프로그래밍이 가능한 언어이다. 동시에 여러 가지 일을 할 수 있도록 하는 멀티 스레드, 그리고 스레드는 자바의 중요한 특성인데 cpu의 사용률을 높이기 위해 사용한다. 멀티 스레드 구현을 효과적으로 하기 위해 Atomic과 CAS 같은 개념이 사용된다.

 

Atomic

  • synchromized는 lock을 사용해 다른 스레드가 wating 하는 상황이 발생한다.
  • 이걸 해결하기 위해 non-blocking한 방법으로 Atomic연산 사용
  • Atomic연산의 핵심 원리가 바로 CAS(Compare and swap)이다
  • atomin 자료형은 기본 자료형의 동기화를 보장해주는데 내부에서 CAS 알고리즘을 사용
  • atomic 변수는 멀티 스레드 환경에서 원자성을 보장해주기 위해 나온 개념
    • 원자성 : 연산 작업이 하나라도 실패하면 전부 실패해야 하고, 작업이 성공하면 모두 성공해야 하는 성질

 

Compare and swap

  • CAS는 멀티 스레딩 환경에서 이전에 언급한 synchronized외의 동시성 처리를 위한 방법 중 하나이다
  • 동기화를 위해 비교한 후 바꿔주는 것
  • 멀티 스레드에서 변수 값을 참조할 때, 메인 메모리에서 참조하지 않고 각 cpu 캐시 영역에서 메모리값을 참조한다. 이때 스레드에 저장된 값과 메모리에 저장된 값을 비교해 값이 일치하는 경우 새로운 값으로 바꿔주고, 일치하지 않으면 실패 후 재시도한다.
  • 여기서 CAS는 lock을 걸지 않고 변수마다 동기화를 사용한다.

 

ABA Problem

  • CAS에서 공유 객체에 대한 변화를 감지하지 못했을 경우 문제가 발생하게 된다.
  • 이런 경우를 ABA Problem이라 한다.
  • 이걸 해결하기 위해 DCAS(double check CAS)를 사용한다.
  • 사용 방법은 CAS(값) && CAS(값) 으로 이중 체크하는것
반응형

'Develop > Java' 카테고리의 다른 글

[Java] this. 의미  (0) 2023.06.03
[Java] Concurrent HashMap과 Concurrent List  (0) 2023.05.29
[Java] Synchronized 동기화 예제  (0) 2023.05.14
[Java] Synchronized VS Reentrant 차이  (0) 2023.05.14
[Java] Thread란?  (0) 2023.05.14
profile

억대 연봉을 위한 인간수업

@회뜨는참치

이 글이 당신에게 조금이라도 도움이 된다면 좋겠습니다.