2013-10-13 3 views
9

В настоящее время я работаю над приложением, которое опирается на множество различных веб-сервисов для получения данных. Поскольку я хочу модулировать каждую услугу и иметь некоторую зависимость там (service1 должен запускаться до службы 2 и 3 и т. Д.), Я запускаю каждую службу в своей собственной задаче.Сколько задач слишком много?

Задачи сами по себе являются либо

  1. работает активно, то есть они посылают их запрос к веб-службы и ожидает ответа или обработки ответа

  2. ожидания (с помощью монитора и тайм-аут) - как только задача завершает выполнение всех задач ожидания и проверяет, завершены ли их зависимости

Теперь система runni с тем, что я бы назвал хорошей производительностью (тем более, что производительность довольно незначительна), однако приложение создает целый ряд задач.

Итак, на мой вопрос: ~ 200 задач в этом сценарии слишком много? Создают ли они столько накладных расходов, чтобы в принципе не-поточный подход был бы лучше?

+0

Вероятно, это зависит от (1) задач, которые необходимо выполнить, и (2) гранулярности модулей. –

+0

Задачи в основном направлены только на отправку запросов в веб-сервис, то есть отправку запроса на твиттер-каналы с очень незначительной обработкой (твиты фильтров). Я начинаю новую задачу для каждого элемента, что означает около 1-30 задач, выполняемых «одновременно» и не ожидающих зависимости. Обычно около одного модуля на каждый веб-сервис (в настоящее время около 10 - 15 модулей). – Scurals

+0

Похоже на то, что это будет возможно, так как «запуск» просто означает ожидание ответа сервера ... –

ответ

10

Общий ответ: «Измерение, измерение, измерение» :) Если у вас нет проблем с производительностью, вы не должны начинать оптимизацию.

Я бы сказал, что 200 задач в порядке. Красота задач по сравнению с потоками - это их низкие накладные расходы по сравнению с «реальными» потоками и даже пулом потоков. TaskScheduler гарантирует, что все аппаратные потоки будут использоваться как можно больше с наименьшим количеством переключения потоков. он делает это с помощью различных трюков сосать, выполняя дочерние задачи серийно, крадя работу из очередей на других потоках и так далее.

Вы также можете дать TaskScheduler некоторые подсказки о том, что конкретная задача будет делать через TaskCreationOptions


Если вы хотите, чтобы некоторые числа, проверить это сообщение, как вы можете видеть, Tpl довольно дешевые с точки зрения накладных
http://www.palmmedia.de/Blog/2010/1/19/net-40-performance-of-task-parallel-library-tpl

Это еще одна интересная статья на эту тему
http://msdn.microsoft.com/en-us/magazine/cc163552.aspx

+1

«Другая интересная статья» мертва - вы помните, на что она ссылалась? – Default

Смежные вопросы