Максимальное количество зерна Microsoft Orleans на силос

Я тестирую Microsoft Orleans на предмет возможности использования в качестве среды распределенных вычислений. Похоже, это может сработать, однако мне было интересно, как установить максимальное количество активных зерен в данном бункере?

Мои зерна не будут привязаны исключительно к процессору и будут выполнять некоторые операции ввода-вывода и другие связанные задачи. Я беспокоюсь, что если я позволю ему разгуляться, это приведет к огромному количеству экземпляров, которые затормозят все это.

Возможна ли такая конфигурация силоса?


person Telavian    schedule 10.07.2015    source источник


Ответы (3)


Orleans очень хорошо подходит для работы, не связанной с процессором. Зерна Orleans предназначены для использования Task<T> для асинхронности вместо потоков, поэтому вы всегда должны выполнять асинхронный ввод-вывод, используя функцию C# [async/await][1].

Если вам абсолютно необходимо выполнить блокирующий ввод-вывод, вы можете выполнить ввод-вывод вне контекста зернистости и await результат в зерне, например:

var result = await Task.Run(() => {
  // Perform blocking work.
  return 43;
});
person Reuben Bond    schedule 12.07.2015

Лучше разгрузить все блокирующие операции в пул потоков и оставить значение MaxActiveThreads по умолчанию (#cores). По сути, вы никогда не захотите блокировать потоки Orleans (эти MaxActiveThreads). Этот орлеанский поток должен выполнять легкие вычисления и выполнять внешние асинхронные вызовы (к другим зернам или внешним службам). все тяжелые вычисления должны выполняться не в потоках Orlean.

Вы можете сделать это и по-прежнему поддерживать однопоточные гарантии выполнения. См. здесь: http://dotnet.github.io/orleans/Advanced-Concepts/External-Tasks-and-Grains

person Gabi Kliot    schedule 23.07.2015

Похоже, что XML-файл конфигурации бункера имеет такую ​​возможность.

<Scheduler MaxActiveThreads="15"/>

XSD для него указан онлайн.

person Telavian    schedule 10.07.2015