[스레드 중지 – flag variable vs interrupt() - 2] 강의 Context Switch 관련 질문있습니다.
안녕하세요 선생님, 재밌게 강의 보고 있는 개발자입니다.
제가 [스레드 중지 – flag variable vs interrupt() - 2] 강의에서 9:15 즈음에, Thread.sleep(1) 을 통해서 Context Switch 를 강제하는 방법을 봤습니다. 결과적으로 정상 종료가 되었구요.
그런데 문득 의문점이 들더군요.
제 의문점을 기반으로 질문을 하자면 아래와 같습니다.
Question:
굳이 Thread.sleep(1) 을 하지 않아도
제 컴퓨터에는 이미 무수히 많은 프로세스와 쓰레드가 존재하니, 언젠가는 Java 의 Thread 도 Context Switch 가 일어나지 않나요??
그러면 결과적으로 계속 기다리면 언젠가는 Thread.sleep(1) 을 안 써도 실행한 main 문이 정상 종료되는게 맞지 않나요?
답변 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
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





