2012-03-16 4 views
3

.NET 작업 병렬 라이브러리는 차단 작업에서 작업을 어떻게 처리합니까? C++ Concrt 라이브러리에 Context::Oversubscribe 메소드가 있지만 .NET 라이브러리에서 그런 것을 찾지 못했습니까? LongRunningTask 옵션이 차단 작업을 처리하는 해당 방법입니까?작업 병렬 라이브러리 - 차단 작업?

.i.e : C++에서 당신이 할 것 :

auto my_task_func = [] 
{ 
    //Do work... 
    Context::Oversubscribe(true); 
    // Short or long blocking op. 
    Context::Oversubscribe(false); 
    //Do more work. 

} 

답변

3

TPL은 작업 자체의 협조없이 최적의 스레드 수를 찾기 위해 언덕 등반 알고리즘을 사용합니다. 작업 완료율이 더 나아지지 않을 때까지 스레드를 계속 주입합니다.

+1

'ThreadPool'(뒤에서 TPL에 의해 사용됨)은 스레드 중 하나가 블로킹을 시작했다는 알림을 수신하고이 정보를 사용하여 새 스레드를 생성 할시기를 결정합니다. – svick

+0

svick, 좋은 의견입니다. 나는 또한 이것이 문서화되지는 않았지만 사실이라고 생각한다. 지금 당장은 그 참조를 찾을 수없는 것 같습니다. – usr

+2

실제로 문서인지 여부는 모르지만 C# *, 3rd edition, 759 페이지를 통해 * CLR입니다. "그러나 이러한 스레드 중 임의의 스레드가 자발적으로 차단되면 [...] Windows는 스레드 풀에 스레드 풀 중 하나 threads가 실행을 중지했습니다. 이제 스레드 풀은 [...] 차단 된 스레드를 대체 할 새 스레드를 만듭니다. " – svick

관련 문제