Thread.Sleep(): 종종 나쁜 생각인 이유
Thread.Sleep()
은 프로그래밍에서 흔히 사용되는 방식이지만 단점으로 인해 종종 비판을 받기도 합니다. 이 글에서는 문제가 되는 이유를 설명하고 더 나은 대안을 제시합니다.
Thread.Sleep()
Thread.Sleep()
에는 몇 가지 주요 문제가 있습니다.
Thread.Sleep(n)
호출은 n-밀리초 단위의 정확한 일시 중지를 보장하지 않습니다. 운영 체제의 스레드 스케줄링으로 인해 실제 지연 시간은 더 길어질 수 있습니다.Thread.Sleep()
으로 스레드를 차단하면 이러한 리소스가 불필요하게 연결됩니다.더 나은 대안: WaitHandles
비동기 대기의 경우 WaitHandles
가 더 나은 선택입니다. 이를 통해 스레드는 애플리케이션을 완전히 차단하지 않고도 특정 이벤트나 신호를 기다릴 수 있습니다.
예시:
폴링에 Thread.Sleep()
을 사용하여 결함이 있는 예를 살펴보겠습니다.
<code class="language-csharp">while (true) { doSomework(); Thread.Sleep(5000); }</code>
WaitHandle
:
<code class="language-csharp">AutoResetEvent waitHandle = new AutoResetEvent(false); while (true) { doSomework(); waitHandle.WaitOne(5000); }</code>
Thread.Sleep()
이 허용되는 경우
Thread.Sleep()
가 적절할 수 있는 제한된 상황은 다음과 같습니다.
핵심 요약
Thread.Sleep()
은 단순해 보이지만 리소스 비효율성, 부정확한 타이밍 및 차단 동작으로 인해 대부분의 비동기 프로그래밍 작업에 적합하지 않습니다. WaitHandles
다중 스레드 애플리케이션에서 스레드 동기화를 관리하는 보다 강력하고 효율적인 접근 방식을 제공합니다.
위 내용은 코드에서 Thread.Sleep()을 피해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!