동시성 이슈란

여러 프로세스나 스레드가 동시에 실행되는 상황에서 발생하는 문제들을 총체적으로 지칭한다고 한다.

 

이 문제들을 대략적으로 살펴보면

 

첫번째, 레이스 컨디션(Race Condition)두 개 이상의 스레드가 데이터를 동시에 수정하려고 할 때 발생하는 상황을 말한다. 

이는 두 명 이상의 사람이 한 장의 종이에 동시에 문장을 동시에 적으려고 할 때 발생하는 문제와 비슷하다.

예를 들어, 한 사람이 '안녕' 이라는 단어를 적으려고 했는데, 동시에 다른사람이 '니하오' 라고 적으려고 한다면, 종이에는 '안녕니하오'와 같은 원하지 않는 문장이 적힐 수 있다.

 

두번째, 데드락(Deadlock)두 개 이상의 스레드가 서로 필요한 자원을 가지고 있어서 둘 다 진행할 수 없는 상태를 말한다.

이는 두명의 사람이 서로의 작업을 기다리며 아무것도 하지 못하는 상황과 비슷하다. 

예를 들어, A와 B라는 사람이 있는데, A와 B가 둘다 서로의 작업이 끝나면 일을 시작해야지 하고 생각하며 서로의 작업이 끝날때까지 기다리는 상황을 말한다. 만약 A와 B가 서로의 작업이 끝나기를 기다리며 아무것도 하지 않는다면, 둘은 영원히 서로를 기다릴 것이다.

 

세번째, 스타베이션(Starvation)특정 스레드나 프로세스가 계속해서 자원을 얻지 못하고 대기 상태에 머무르는 것을 말한다.

이는 밥을 먹으려고 줄을 서는 상황에서 계속해서 새치기를 당하고 있는 상황과 비슷하다

이는 보통 자원을 배분하는 정책이나 스케줄링 알고리즘이 잘못되었을 때 발생할 수 있다.

 

네번째, 마지막으로 라이브락(LiveLock)은 두 개 이상의 스레드나 프로세스가 서로 다른 작업을 진행하려고 하지만, 서로의 작업으로 인해 진행할 수 없는 상황을 말한다.

이는 두 사람이 길을 가다 마주쳤을때 서로 길을 피하려다가 같은 방향으로 피하게 되어 자꾸 마주치게 되는 민망한 상황과 비슷하다. 

 

언뜻 보면 작업이 대기중이라는 면에서 데드락과 비슷한 상황이지만, 데드락은 아무것도 하지 않고 서로의 작업을 기다리는 상황이고, 라이브락은 서로 움직이지만 결과적으로 작업이 대기중인 상황이다.

'Java > 스프링 AOP' 카테고리의 다른 글

콜백 패턴  (0) 2023.08.02
전략 패턴  (0) 2023.08.02
템플릿 메서드 패턴  (0) 2023.07.31
쓰레드 로컬(Thread Local)  (0) 2023.07.28
인공지능과 사랑에 빠졌던 건에 대하여  (0) 2023.07.28

+ Recent posts