inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

스레드 중지 – flag variable vs interrupt() - 2

[스레드 중지 – flag variable vs interrupt() - 2] 강의 Context Switch 관련 질문있습니다.

해결된 질문

680

식빵

작성한 질문수 56

2

안녕하세요 선생님, 재밌게 강의 보고 있는 개발자입니다.

제가 [스레드 중지 – flag variable vs interrupt() - 2] 강의에서 9:15 즈음에, Thread.sleep(1) 을 통해서 Context Switch 를 강제하는 방법을 봤습니다. 결과적으로 정상 종료가 되었구요.

 

그런데 문득 의문점이 들더군요.

제 의문점을 기반으로 질문을 하자면 아래와 같습니다.

Question:

굳이 Thread.sleep(1) 을 하지 않아도
제 컴퓨터에는 이미 무수히 많은 프로세스와 쓰레드가 존재하니, 언젠가는 Java 의 Thread 도 Context Switch 가 일어나지 않나요??
그러면 결과적으로 계속 기다리면 언젠가는 Thread.sleep(1) 을 안 써도 실행한 main 문이 정상 종료되는게 맞지 않나요?

java concurency multithread synchronisation

답변 2

1

정수원

네 그것도 맞는 말씀이긴 합니다.

하지만 running 이 true 인 상태에서 스케줄러가 어떤 시점에 어떤 우선순위로 첫번째 스레드를 중단하게 될지 알지 못하고 우리가 의도하는 바는 running 이 false 가 되면 바로 종료되길 원하는 것입니다.

그래서 volatile 이나 Atomic 연산을 통해 메인메모리로부터 바로 running 값을 가지고와서 작업을 종료하는 것이 가장 안전하고 약간 우회적으로 sleep 을 주게 되면 바로 대기하고 깨어나서 실행하게 되니 스케줄러로 하여금 바로 중단할 수 있는 힌트를 주는 것이라 볼 수 있습니다.

그리고 while 문을 돌고 있는 상황이면 해당 스레드가 계속 cpu 를 점유할 수도 있습니다.

0

식빵

저는 아무리 while 문이더라도 언젠가는 Thread Context Switch 가 한번은 일어나서,
결국은 java process 가 끝나지 않을까 했는데, Thread.sleep(1) 사용하지 않은 코드를
실행하고 30분째 기다려도 안 끝나네요.
혹시 이게 선생님 말씀대로 while 문에 의한 지속적인 cpu 점유 때문일까요??

1

정수원

사실 이 부분은 자바로 재현하기가 쉽지는 않습니다.

아마 예제를 실행하는 PC 의 CPU 코어가 많다면 첫번 째 스레드와 두번째 스레드는 각 CPU 에서 돌아갈 가능성도 있습니다. 그러면 컨텍스트 스위칭이 일어나지 않겠죠

하지만 sleep 을 하게 되면 일단 대기로 빠지게 되니 캐시에서 제거된다고 이해하시면 됩니다.

말씀하신 것처럼 이론상으로는 식빵님의 견해도 틀리지는 않습니다.

그러나 그것이 전적으로 OS 의 스케줄링에 의한 부분이다 보니 직접 코드로 재현하기는 어렵고 개념적으로만 아셔도 될 것 같습니다.

0

식빵

설명 감사합니다!

0

선종우

오 저도 강의 듣다가 궁금했던 부분인데 이해되었스빈다

멀티스레드 단일스레드

0

57

0

new Condition 부분 질문

0

85

1

13:00 강의 내용 이해 질문

0

99

1

강의 출시 질문 있습니다.

0

117

1

InterruptedExceptionThreadStopExample 질문입니다.

0

94

2

instance.getMyField()의 값이 왜 다른가요?

0

116

1

해당 강의 내용 무단 도용 신고

0

211

2

Thread Waiting 상태 관련 질문 드립니다.

0

186

1

단일연산변수 api

0

126

0

synchronized 블럭과 메인메모리 반영

0

148

0

실무에서 자바가 제공하는 락을 사용하는 경우

1

244

1

뮤텍스나 세마포어는 busy waiting이 없는 게 맞을까요?

0

160

1

16:50부분에서 타입락 질문드립니다.

0

110

2

16분 7초 뮤텍스 코드 관련해 질문드립니다.

0

160

2

동기화가 보장된다고 하더라도 스레드간 데이터 불일치가 발생할 수 있지 않나요??

0

202

2

리액티브-part2

0

180

2

문자열 풀 값을 이용한 String 변수

0

207

2

스레드 라이브러리는 커널과 같은 역할을 하지 못하나요?

0

173

1

자식 프로세스를 쓰는 이유

0

188

1

커널 모드 전환시 질문이 있습니다!

0

146

1

[공유] setName 시 threadName이 1부터 시작하는 이유

0

180

1

synchronized = 모니터

0

288

2

Thread의 Context Switching 문의드립니다.

1

260

1

동기 & 논블록킹 질문 드립니다.

0

234

2