Многозадачность с Windows Service - PullRequest
0 голосов
/ 23 октября 2018

Мне нужно запустить от 6 до 8 экземпляров одного и того же консольного приложения параллельно из одной службы Windows, исключение в любых случаях не должно приводить к остановке основной службы.Каждый экземпляр будет использовать оставшуюся веб-службу с уникальной учетной записью AD, для инициализации экземпляра потребуется отдельная информация о конфигурации.Служба Windows будет работать для всех пользователей (даже не вошли в систему) или может быть запущена с одной учетной записью службы.Мой вопрос заключается в том, какой фактор необходимо учитывать в приведенном выше сценарии

  1. Должен ли я использовать многопоточность или запускать многопроцессорные
  2. Потребуется ли мне изолировать каждый процесс с помощью домена приложения?
  3. Нужно ли мне назначать GUID перед запуском каждого экземпляра?
  4. Какой должна быть рекомендация, которой я должен следовать?
  5. Как сохранить наилучший контроль над экземплярами, например, если один экземпляр незавершено или повешено еще, другие должны продолжать служить?

1 Ответ

0 голосов
/ 23 октября 2018
  1. Если я использую многопоточность или запускаю многопроцессорную обработку

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

Потребуется ли мне изолировать каждый процесс с помощью домена приложения?

Нет, это отдельный процесс, они уже изолированы, если не решат использовать общие ресурсы.

Нужно ли назначать GUID перед запуском каждого экземпляра?

Понятия не имею, зачем вам GUID?Вы говорите нам

Какой должна быть рекомендация, которой я должен следовать?

Рекомендуется не запускать консольное приложение несколько раз.Я хочу поместить функциональность в код и взять на себя ответственность за то, что он делает и как он это делает.

Как сохранить лучший контроль над экземплярами, например, если один экземпляр не был завершен или завис, а другой должен продолжать обслуживаться?

Это полностью детали вашей реализации.Если эти процессы зависают, возможно, вам придется их убить.а как это контролировать?TPL, задачи, потоки, CancellationTokens, Timers, это ваше дело ..

Обновление

Вы голосовали за многопроцессорность по многопоточности?Я хотел понять, что является преимуществом или недостатком использования PROC и запуска нескольких exe по сравнению с параллельной потоковой передачей.Какой из них лучше.Просто экземпляры обновлений не попадут ни в одну общую файловую систему (папку).и как App Domain будет иметь какое-либо значение?

У них обоих есть свои преимущества.

Отдельный процесс полностью отделен от ресурсов операционной системы, которые они совместно используют.Подобно отдельным доменам приложений, он настолько же изолирован, насколько вы можете создать структуру .net.Если вам нужна полная изоляция, возможно, стоит рассмотреть отдельный процесс.

Недостатком отдельных процессов является то, что вы не можете легко выделять и распределять ресурсы.

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

...