작성
·
53
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
강의 중 sleep(10) 코드를 넣고, 계산 속도가 너무 빨라서 , 다른 스레드와 동시 실행을 위해 잠깐 쉬었다가 실행을 한거라는데 이게 이해가 잘 안됩니다
제 생각엔 빨리 실행되어야 여러 스레드들이 동시에 공유변수 value에 접근해서 동시 실행될때가 많을 것 같은데, 왜 잠깐 쉬었다가 실행해야 더 충돌 횟수가 많아져서 result가 낮은 값이 나오는지 모르겠습니다.
sleep(10)을 하면 실행 속도가 느려져서 오히려 경쟁 상태가 완화되어야하는거 아닌가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 한조님.
질문해주신 sleep(10)
의 사용 목적에 대해 설명드리겠습니다. 멀티스레드 환경에서는 특정 로직이 너무 빨리 수행될 경우, 스레드 간 경쟁 상태가 발생하기도 전에 한 스레드가 작업을 마치게 될 수 있습니다. 이 때문에 교착 상태나 Race Condition을 명확히 테스트하고자 할 때 일부러 스레드 대기의 시간을 줌으로써 스레드들이 더 자주 충돌하도록 상황을 유도할 수 있습니다.
Race Condition 유도:
sleep
을 추가하면, 각 스레드가 해당 지점에서 잠시 멈추게 됩니다. 이로 인해 다른 스레드가 같은 구간에 동시에 접근할 가능성이 높아지면서 여러 스레드가 동일한 자원에 접근할 가능성을 높입니다. 따라서 스레드 간 충돌 상황(Race Condition)을 더 쉽게 관찰하거나 테스트할 수 있습니다.학습 목적:
동시성 문제는 실제 시스템에서는 다양한 요인에 의해 자주 발생하기 때문에 이를 학습하기 위해서는 인위적으로 실험을 조정한 것입니다.
비슷한 주제에 대한 추가 설명 및 토론이 담긴 게시물들이 있어 공유드립니다:
제가 제공하는 정보가 도움이 되었기를 바라며, 추가적인 질문이나 다른 사항이 있다면 언제든지 질문해 주세요. 곧 지식공유자님이 더 깊이 있는 답변을 해주실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 감사합니다.