6

Windows Azure의 Worker 프로세스에서 TPL을 사용하고 싶습니다. 내가 IJob에게 큐를 추가 찾고 있어요, 이것은 실행 방법이 있으므로 노동자가 구성됩니다 :TPL의 최대 작업은 무엇입니까?

루프 IJob.Run를 호출하는 GET 항목 오프 큐 사용 TPL,이 비동기 호출

입니다

하지만 TPL에 추가 할 수있는 최대 항목에 대해 조금 걱정이됩니까? 필자는 필요하다면 TPL Pool을 구축 할 수있어서 기쁘다.

건배, 애쉬.

답변

9

TPL의 주요 목표 중 하나는 걱정할 필요를 없애는 것입니다. 스레드 대신 작업으로 작업을 분해함으로써 스케줄러가이 작업을보다 적절하게 처리 할 수 ​​있습니다.

예약 할 수있는 "작업 수"에는 고정 된 상한선이 없습니다. ThreadPool을 사용하여 스케줄 된 태스크는 기본적으로 TaskScheduler를 사용하여 스케줄됩니다. ThreadPool은 .NET 4의 경우 작업에 따라 확장됩니다. 나 자신의 수영장을 만들려고하지 말 것을 강력히 권합니다 - 당신이 디폴트보다 더 잘 할 것 같지는 않습니다. 즉, 작업에 매우 비표준적인 동작이있는 경우 사용자 지정 TaskScheduler를 작성하는 것이 좋습니다.

또한, "가능한 한 큰"작업을 수행하는 것이 이상적임을 알아야합니다. 개별 작업과 관련된 오버 헤드가 있습니다. 작업량이 너무 적어서 오버 헤드가 적절한 수의 큰 "작업"이있는 경우보다 성능에 큰 영향을 줄 수 있습니다.

+1

'Task's가 너무 크면 다른 Task의 처리가 지연 될 수 있으므로 문제가 될 수 있습니다. 따라서 큰 '작업'을 사용하면 처리량은 향상되지만 대기 시간은 단축됩니다. – svick

관련 문제