영한님, sleep(10) 이유가 궁금합니다.
108
작성한 질문수 96
안녕하세요. 영한님 궁금한 점이 있습니다.
sleep(10) 를 하면 동시 실행을 더 촉진할 수 있다는 것이 이해가 안됩니다.
예를 들어, 아래를 가정한다면요! 각 시간은 별도로 가정한 것입니다.
1번 쓰레드가 1.0초에 먼저 실행이 된 후 0.1 초 쉬었다가 실행이 되면 1.1초에 실행 가정,
2번 쓰레드가 1.1초에 먼저 실행이 된 후 0.1 초 쉬었다가 실행이 되면 1.2초에 실행 가정,
3번 쓰레드가 1.2초에 먼저 실행이 된 후 0.1 초 쉬었다가 실행이 되면 1.3초에 실행 가정,
...
그렇다면 각 쓰레드가 0.1초씩 쉬었다고 하더라도 결국에는 실행시점이
1.1초, 1.2초, 1.3초 다 다르다고 봐도 되지 않나요?
뭔가, sleep(10) 을 빠지게 되면 대부분 쓰레들이 비슷한 시점에 10ms 를 자고, 거의 동시에 깨어나서 increment() 를 실행하는 것 같은데 맞나요?
맞다면 왜 그런가요?
감사합니다!
답변 2
0
안녕하세요. highjune님
JVM, OS에서 스레드를 재우고 깨우는 방식에서 완전히 정확하게 깨어나지는 않습니다.
특정 주기로 스레드들을 깨우는데, 그 주기의 시간이 지난 스레드를 깨우는 것입니다. 물론 아주 짧은 순간이겠지요?
예를 들어서 0.01ms와 0.02ms 차이로 잠이 들면 깨우는 시간은 비슷하게 깨어날 수 있습니다.
그래서 동시 실행을 촉진할 수 있게 됩니다.
하지만 이것은 항상 그런것은 아니고 환경에 따라 달라질 수 있습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. highjune님.
스레드 프로그래밍에서 Thread.sleep(10)과 같은 짧은 sleep은 스레드의 동작을 조정하는 데 사용됩니다. 이 방법은 매우 짧은 시간 단위로 멀티스레딩을 조정하여 컨텍스트 스위칭을 발생시키고 더욱 균일하게 CPU 자원을 분배하는 데 기여할 수 있습니다.
동시 실행 촉진:
Thread.sleep(10)을 사용하면 특정 스레드가 CPU를 독점하는 것을 방지하고, 각 스레드가 잠깐씩 멈춰 다른 스레드가 CPU를 사용할 기회를 주므로 동시 실행이 촉진될 수 있습니다.컨텍스트 스위칭: 여러 스레드가 서로 다른 작업을 동시에 수행할 때, 짧은 sleep을 통해 컨텍스트 스위칭이 발생하게 됩니다. 이는 각 스레드가 공정하게 CPU 시간을 사용하게 허용하며, 비슷한 시점에 깨어나 작업을 수행하게 할 수 있습니다.
작업 동기화: 여러 스레드가
increment()와 같은 공유 자원에 접근할 때 동기화를 해야 합니다. sleep을 사용함으로써 컨트롤된 방식으로 동기화와 리소스 경쟁을 관리할 수 있습니다.
관련 내용에 대한 더 많은 정보는 아래 링크를 참고하시면 좋습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
모니터와 synchronized, ReentrantLock, 원자적연산 CAS관련해서 추가적으로 더 깊게 공부했는데 제가 이해한 것이 맞나요??
0
81
1
Future cancel기능을 사용했지만 interrupt가 발생하지 않을 때 어떻게 처리해야하나요?
0
70
2
2.스레드 생성과 실행 - 17P 그림 문의
0
70
2
자바 동시성 현업에서 사용예시가 궁금합니다
0
128
1
ReentrantLock 동작 원리에 대한 질문입니다.
0
79
1
synchronized 대신 join 을 사용하여 순서를 보장할 경우 해법이 아닌가요?
0
90
2
메모리 가시성 문제 질문
0
65
1
Future4-이유 질문
0
61
1
오타 제보
0
70
2
runnable 질문
0
91
2
자바가 아닌 다른 언어에서도
0
107
1
메모리 가시성 문제가 발생하는 이유
0
122
1
데몬스레드가 어떨 때 사용이 되는지 궁금합니다.
0
76
1
Future.cancel() 취소를 사용하는 예가 궁금합니다.
0
81
1
synchronized 와 인스턴스의 lock
0
88
2
synchronized 키워드만으로 메모리 가시성이 해결되는 이유가 궁급합니다.
0
60
1
[스레드 풀과 Executor 프레임워크1][문제와 풀이] `log("일부 작업이 실패했습니다.");` 실행되는 경우가 있을까요?
0
55
1
원자적 연산이 멀티스레드 상황에서 안전한 이유를 제대로 이해했는지 확인 부탁드립니다
0
64
2
자바 고급 1,2,3편 같이 진행해도 문제없나요
0
74
2
CPU 캐시 때문에도 잔액이 200원이 될 수 있나요?
0
101
2
synchronized 메서드와 join 관련 질문이 있습니다.
0
66
2
섹션 14. 115번 강의 내용 질문
0
79
2
교안에 있는 7페이지 데이터 영역
0
47
1
Executor 스레드 풀 관리 질문
0
103
2





