Re[15]: Замена кода "на лету"
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.06.09 07:06
Оценка:
Здравствуйте, netch80, Вы писали:

N>А теперь если сравнить, например, с Java (сразу дисклеймер — все мои знания про эти её возможности только по документации) — организация кода в виде именованных классов с глобально уникальными именами (причём фиксированными в момент компиляции кода) резко усложняет возможность замены кода на лету, ибо существование двух одноимённых классов невозможно — а, значит, замена потребует

N>1) сохранения всех данных, хранимых в объектах этих классов, в некотором внешнем (для них) хранилище (в памяти, чтобы сохранить всякие открытые файлы)
N>2) собственно фазы перезагрузки кода
N>3) восстановления состояния из хранилища

N>что может длиться уже секунды, а то и минуты, с остановкой всей полезной работы.


N>Насколько я знаю, в .NET точно так же. Если ошибаюсь — исправьте, это будет мне полезно в плане оценки, куда двигать систему дальше.


В .NET несколько другой механизм.
Единица загрузки в .NET — сборка, единица выгрузки — домен. В один домен может быть загружено несколько сборок с одинаковыми именами (если они не strongname). Кроме того есть механизм shadowcopy, который позволяет не лочить образ на диске при заргрузке кода (это обегчает деплой нового кода).

Теперь как выглядит процесс.
1)Содается новый домен, туда грузится код, с которым идет взаимодействие через IPC, если появился новый код (даже в сборке с тем же именем), то он спокойно грузится в домен и новые запросы запускаются на него, сатрый код при этом никуда не девается и клиенты продолжают работать с ним.
2)Создается счетчик загрузок для домена, когда он достигает определенного числа новые сбокри перестают грузиться в домен и создается новый домен для загрузки новых сборок.
3)Каждый домен внутри себя считает количество клиентов, так как через IPC не поддерживаются механизмы управления временем жизни. Когда домен закрыт и нету клиентов, то он выгружается.

Естественно реализацию этого всего надо делать ручками, а сложность там немаленькая.

Что касается джавы, то там тоже все не так однозначно, как написано выше. Там есть класслоадеры, которые управляют загрузкой, так вот каждый класслоадер может загрузить свою копию класса.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.