Inflearn brand logo image

인프런 커뮤니티 질문&답변

highjune님의 프로필 이미지
highjune

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

원자적 연산 - 시작

영한님, sleep(10) 이유가 궁금합니다.

작성

·

73

0

안녕하세요. 영한님 궁금한 점이 있습니다.

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 자원을 분배하는 데 기여할 수 있습니다.

  1. 동시 실행 촉진: Thread.sleep(10)을 사용하면 특정 스레드가 CPU를 독점하는 것을 방지하고, 각 스레드가 잠깐씩 멈춰 다른 스레드가 CPU를 사용할 기회를 주므로 동시 실행이 촉진될 수 있습니다.

  2. 컨텍스트 스위칭: 여러 스레드가 서로 다른 작업을 동시에 수행할 때, 짧은 sleep을 통해 컨텍스트 스위칭이 발생하게 됩니다. 이는 각 스레드가 공정하게 CPU 시간을 사용하게 허용하며, 비슷한 시점에 깨어나 작업을 수행하게 할 수 있습니다.

  3. 작업 동기화: 여러 스레드가 increment()와 같은 공유 자원에 접근할 때 동기화를 해야 합니다. sleep을 사용함으로써 컨트롤된 방식으로 동기화와 리소스 경쟁을 관리할 수 있습니다.

관련 내용에 대한 더 많은 정보는 아래 링크를 참고하시면 좋습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

highjune님의 프로필 이미지
highjune

작성한 질문수

질문하기