멀티스레드 환경의 난제, 경쟁 상태(Race Condition)와 그 해결 전략
·
CS
1. 경쟁 상태(Race Condition)의 이해경쟁 상태는 둘 이상의 스레드가 공유 자원에 동시에 접근하여 읽거나 쓰는 작업을 수행할 때, 최종 결과가 스레드들의 실행 순서에 따라 달라지는 현상을 의미합니다. 이는 주로 다음 세 가지 상황에서 발생합니다.원자적(Atomic)이지 않은 연산: 하나의 논리적인 연산이 실제로는 여러 개의 저수준 연산(예: 읽기, 수정, 쓰기)으로 구성될 때 발생합니다. 예를 들어, count++와 같은 간단한 증감 연산은 'count 값을 읽기', '읽은 값에 1 더하기', '새로운 값을 count에 쓰기'의 세 단계로 이루어집니다. 이 과정 중에 다른 스레드가 count 값에 접근하면 예상치 못한 결과가 발생할 수 있습니다.임계 구역(Critical Section): 공..
동기(Synchronous), 비동기(Asynchronous), 블로킹(Blocking), 논블로킹(Non-blocking)
·
CS
용어 정의: 무엇이 다를까?동기(Synchronous)코드 흐름요청한 작업이 끝나야 다음 코드 실행비동기(Asynchronous)코드 흐름요청한 작업과 무관하게 다음 코드 실행블로킹(Blocking)스레드 상태결과를 기다리는 동안 스레드가 멈춤논블로킹(Non-blocking)스레드 상태결과가 없어도 스레드는 계속 작동 조합별 예시 비교동기 + 블로킹작업 끝날 때까지 기다리고, 스레드도 멈춤InputStream.read()가장 기본적. 직관적이나 스레드 낭비 큼동기 + 논블로킹작업 결과를 바로 리턴받고, 그 결과로 흐름 제어SocketChannel.read()결과 없으면 0, 반복 확인 필요비동기 + 블로킹작업은 백그라운드에서 하지만, 결과 받을 때 기다림Future.get()submit은 비동기지만 ge..