Должны ли ВСЕ действия в последовательности WF, содержащиеся в ParallelFor, быть AsyncCodeActivity? - PullRequest
0 голосов
/ 24 февраля 2011

AI имеет приложение WF 4, которое содержит рабочий процесс последовательности, имеющий ParallelFor, содержащий последовательность с тремя последовательными активациями. Первое из этих действий привязано к вычислениям (оно генерирует запросы на подпись сертификата), второе - к вводу-выводу (отправляет электронные письма), а третье задание также связано с вводом-выводом (обновляет базу данных).

Я изначально разработал их как CodeActivities и увидел, что они должны быть AsyncCodeActivities, чтобы действительно работать в многопоточном режиме. Поэтому я изменил первое связанное с вычислениями действие как AsyncCodeActivity и вижу, что оно выполняется многопоточным. (По крайней мере, я могу наблюдать гораздо более высокую загрузку процессора на моем компьютере разработчика, что наводит меня на мысль, что он теперь работает многопоточным)

Однако последующие задачи остаются как не асинхронные действия кода. Мои вопросы следующие:

  1. Должен ли я также преобразовать 2-е и 3-е действия в Async (подозреваю, что так и будет)?

  2. Если нет, то как обработка на самом деле выполняется в ParallelFor, когда первым является AsyncCodeActivitiy, а вторым и третьим - нет?

1 Ответ

1 голос
/ 24 февраля 2011

При всех дочерних действиях параллельно они планируются одновременно. Это значит поместить в очередь, и планировщик будет выполнять только один за раз. С асинхронными действиями это означает, что начало запланировано, и оно может порождать другие потоки, а конечная часть запланирована, когда она сигнализируется как выполненная, и действительно выполняется, когда планировщик обходит это.

На практике это означает, что для рабочих процессов, которые выполняются на сервере с большим количеством другой работы, асинхронное действие лучше всего использовать для асинхронного ввода-вывода, такого как сетевой или ввод-вывод базы данных. На сервере добавление нескольких потоков ЦП в уже занятую систему может даже замедлить работу. Если рабочий процесс выполняется на клиенте, имеет смысл как асинхронный ввод-вывод, так и работа процессора.

...