Поток данных TPL, MaxDegreeOfParallelism против балансировки нагрузки

Через поток данных TPL можно назначить MaxDegreeOfParallelism для параллельной работы блока, другой способ - «сбалансировать нагрузку», подключив источник к нескольким целевым объектам, ограничив BoundedCapacity каждого целевого блока.

Вопрос, в чем разница между двумя подходами, зачем мне вообще беспокоиться о балансировке нагрузки, если я могу просто установить MaxDegreeOfParallelism?


person TOMMY WANG    schedule 01.06.2015    source источник
comment
В этом методе балансировки нагрузки нет смысла.   -  person i3arnon    schedule 01.06.2015


Ответы (1)


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

Для связывания с несколькими целевыми объектами требуется либо блок широковещательной рассылки (который вам не нужен, поскольку он будет публиковаться во всех целевых блоках), либо предикат для определения потока. Это будет запутанным и очень запутанным, поскольку вам нужно будет отслеживать, в каком блоке будет следующее сообщение. TPL больше соответствует модели Actor, где сообщение - это состояние, поэтому попытка ввести такое состояние динамического связывания на самом деле не соответствует модели.

person James Lucas    schedule 01.06.2015
comment
Вы ошибаетесь, вы можете довольно легко добиться балансировки нагрузки, связавшись с несколькими ограниченными блоками (без каких-либо предикатов или BroadcastBlock). Но @ i3arnon прав, нет смысла так делать. - person svick; 01.06.2015