Я не могу сказать, говорите ли вы вообще или конкретно .NET AppDomain
.
Я собираюсь предположить, что .NET AppDomain
и почему он может быть действительно полезным, когда вам нужна эта изоляция внутри одного процесса.
Например:
Допустим, вы имеете дело с библиотекой, в которой есть определенные рабочие классы, и у вас нет выбора, кроме как использовать этих рабочих и не можете изменить код.Ваша задача - создать Windows Service , которая управляет указанными работниками и гарантирует, что все они работают и работают параллельно.
Достаточно легко, верно?Ну, ты надеялся.Оказывается, ваша рабочая библиотека склонна к выдаче исключений, использует конфигурацию static
и, как правило, представляет собой просто PITA.
Вы можете попробовать запустить их в своем собственном процессе, но следите за ними, вы 'Вам нужно будет реализовать namedpipes или попытаться вдумчиво проанализировать STDIN и STDOUT процесса.
Что еще вы можете сделать?Ну, на самом деле AppDomain
это решает.Я могу создать AppDomain для каждого работника, дать им собственную конфигурацию, они не могут испортить друг друга, изменив свойства static
, потому что они изолированы, и, кроме того, если библиотека разорвется, и мне не удалось пойматьисключение, это не беспокоит рабочих в их области.И во время всего этого я все еще могу легко общаться с этими работниками.
К сожалению, мне пришлось сделать это до
РЕДАКТИРОВАТЬ: начал писать это какответ на комментарий, но слишком большой
Отдельные процессы могут отлично работать во многих сценариях, однако бывают моменты, когда они могут стать проблемой.Я не говорю, что нужно использовать AppDomain поверх другого процесса.Я думаю, что это редко, когда вам понадобится отдельный процесс или AppDomain, но как только он вам понадобится, вы определенно узнаете.
Основная проблема, которую я вижу с процессами в сценарии, который я описал выше, заключается в том, что процессы имеютих собственные недостатки, которые легче устранить с помощью AppDomain.
Процесс может стать мошенническим, перестать отвечать на запросы и потерпеть крах в любой момент.
Если вы управляете процессами, вам необходимо отслеживать идентификатор процесса и отслеживать его состояние.IPC - это здорово, но для того, чтобы наладить правильное общение по мере необходимости, требуется время.
В качестве примера, скажем, ваш процесс просто умирает.Чем ты занимаешься?В зависимости от механизма, который вы выбрали для мониторинга, возможно, коммуникационный поток умер, возможно, работа завершена, и вы по-прежнему показываете это как «обработку».Чем ты занимаешься?
Теперь, что происходит, когда у вас есть 20 процессов и ваше приложение управления умирает.У вас нет никакой реальной информации, все, что у вас есть, - это 20 "myprocess.exe", и, возможно, теперь нужно начать анализ аргументов командной строки, с которыми они были запущены, чтобы увидеть, какие работники у вас действительно есть.Очевидно, что с AppDomain все 20 тоже умерли бы, но вы действительно что-то выиграли с этим процессом?Вам по-прежнему нужно кодировать возможность восстановления, однако теперь вы должны также закодировать все восстановление для своих процессов, а не просто запускать резервные копии рабочих.
Как и в любом другом программировании, существует 1000 различных способов достижения одной и той же цели.Вам решать, какое решение вы считаете наиболее подходящим.