2010-12-26 3 views
12

현재 Task Parallel Library를 연구 중입니다. TPL이 실제로 CLR 수준의 스레드 풀 메커니즘을 사용한다는 것을 읽을 수 있습니다. 이 정보를 확인하는 기사를 찾을 수 없습니다. TPL은 각 스레드에 대한 작업 대기열을 가지며 균형 조정을 위해 특수한 작업 도용 알고리즘을 사용합니다. 내가 아는 한, 각 프로세서에 대해 하나의 스레드를 생성합니다. 스레드 풀은 .NET 4 이후 TPL의 작업 객체를 사용하기 시작했습니다.(어떻게) TPL은 (CLR) 쓰레드 풀을 사용합니까?

어떻게 TPL이 스레드 풀을 사용하는지 이해할 수 없습니다. 스레드 풀 패턴은 작업 항목이 대기열에 있고 스레드 풀의 여유 스레드가이 대기열에서 하나씩 걸리는 것을 나타냅니다. 그러나 TPL은 항목 (작업)을 스레드의 대기열에 저장하고 필요에 따라 작업 도용 작업을 수행합니다 ... 따라서 매우 다릅니다. 내 실수는 어디 갔지?

추가 질문 : 이것이 내 첫 번째 스택 오버플로 질문 이었기 때문에 적합한지 확실하지 않습니다. 그렇지?

+1

(그건 그렇고, 의문의 대상 이군요.) –

답변

9

TPL에서 TaskScheduler은 실제로 작업을 실행을 위해 대기시킵니다. Default 스케줄러는 쓰레드 풀을 사용할 것입니다.하지만 실제로 새로운 쓰레드 풀 구현은 믿을만합니다.

다니엘 나방에는 blog post이 있으며, 자세한 내용은 유용 할 수 있습니다.

+1

이 기사는 매우 유용합니다. 감사합니다. 혼란스러운 이유를 이해합니다 : 작업 논리와 작업 도용은 실제로 TPL의 일부로 설계되었습니다. 그러나 구현은 스레드 풀에 있습니다. 이 진화 된 스레드 풀은 "작업 도용 풀"으로 발전했습니다. 다시 한번 감사드립니다. – eks