피드로 돌아가기
Dev.toBackend
원문 읽기
Lock-free CAS 기반 AtomicInteger 도입으로 동시성 병목 해결
Java Concurrency: From Threads to Thread Safety — Part 1
AI 요약
Context
JVM Heap memory 공유로 인한 Race Condition 발생 및 데이터 오염 위험 존재. 기존의 synchronized 방식은 고부하 환경에서 Thread 간의 과도한 Blocking 및 Context Switching으로 인한 성능 저하 유발.
Technical Solution
- Runnable 인터페이스 채택을 통한 클래스 확장성 확보 및 Thread 생성 구조 최적화
- Callable 및 FutureTask 도입으로 비동기 작업의 Return Value 처리 및 Exception 전파 구조 설계
- synchronized 키워드를 통한 객체 단위 Lock으로 데이터 일관성 확보 및 Thread 상태 제어
- 하드웨어 수준의 Compare-And-Swap(CAS) 메커니즘 기반 AtomicInteger 적용으로 Lock-free 구조 구현
- Contention 수준에 따른 Spin-lock(Atomic)과 Sleep-lock(synchronized)의 선택적 적용 전략 수립
실천 포인트
- 단순 작업 실행 시 run() 대신 start() 호출 여부 확인 - 비동기 결과값이 필요한 경우 Runnable 대신 Callable/FutureTask 검토 - 저빈도 Lock 경합 시에는 synchronized 사용, 고빈도 경합 시에는 Atomic 클래스 검토 - Atomic 연산 사용 시 CPU 사용량 증가(Spinning) 가능성을 고려한 부하 테스트 수행