2009-12-30 3 views
5

관리되는 스레드가 동일한 OS 스레드에서 실행되는 것을 보장하지 않습니다.관리되는 스레드가 OS 스레드를 전환하는 빈도는 얼마나됩니까?

CLR이 관리되는 스레드를 OS 스레드로 전환 할 수있는 경우 얼마나 자주이 문제가 발생합니까? 빈도에는 어떤 영향이 있습니까?

나는 전환이 일어나지 않게하는 방법에 대해 separate question가 있습니다. 2 등상은 너무 자주 발생하지 않을 것입니다. (1 분 미만이면 괜찮을 것입니다.)

답변

7

완전히 호스트에 따라 다릅니다. 특정 호스트가 주어진 경우 스레드 스위치가 발생할 수있는시기와 장소 (전혀없는 경우)는 보장 할 수 없습니다. 그러나

, .NET 2.0부터, 당신은 실행 코드가 기본 OS 스레드의 신원에 따라 호스트 알리기 위해 정적 BeginThreadAffinity 메소드를 호출 할 수 있었다 :

http://msdn.microsoft.com/en-us/library/system.threading.thread.beginthreadaffinity(VS.80).aspx

을 물론 스레드가 완료되면 EndThreadAffinity 메서드를 호출해야합니다 (EndThreadAffinity를 호출하지 않고 스레드를 끝내면 어떻게 될지 모르겠습니다.) 영향을 미칠 것이라고 상상할 수는 없지만 이 문제에 명시된 IMO) :

http://msdn.microsoft.com/en-us/library/system.threading.thread.endthreadaffinity(VS.80).aspx

4

지금까지 CLR의 현재 구현이 관리되는 스레드를 OS 스레드에 매핑합니다. 그러나 문서에 명시된 바와 같이 이것이 보장되지는 않습니다. 즉 구현 세부 사항이므로 아무 것도 가정 할 수 없습니다. 그것은 바뀔 수 있지만 문서의 조언이 1 : 1 매핑에 의존하면 안된다는 것입니다.

casperOne은 스레드 유사성을 설정할 수 있지만 그와 별개로 보장하지는 않습니다.

관련 문제