Как правило, динамический загрузчик загружает и связывает разделяемые библиотеки в процессе загрузки приложения, непосредственно перед тем, как оно станет исполняться. Однако, возможно также, чтобы приложение запросило динамический загрузчик загрузить и отредактировать связи с произвольными разделяемыми библиотеками во время исполнения этого приложения без того, чтобы редактировать связи в данном приложении с этими библиотеками во время компиляции.
Динамическое связывание представляет собой мощное и полезное средство. Вот только некоторые примеры из практики:
- Распространение программного обеспечения. Разработчики приложений Microsoft Windows часто используют разделяемые библиотеки для распространения программных модернизаций. Они генерируют новую копию разделяемой библиотеки, после чего пользователи могут загрузить и использовать ее как замену для текущей версии. Когда впоследствии они будут запускать свои приложения, эти приложения автоматически будут связаны и загружены с новой разделяемой библиотекой.
- Построение высокопроизводительных Web-серверов. Многие Web-серверы имеют динамическое содержимое, такое как персонифицированные Web-страницы, текущие остатки на счете и рекламные объявления.
Ранние Web-серверы создавали динамическое содержимое с помощью функций fork и execve, используя порожденный процесс. Но современные высокопроизводительные Web-серверы используют намного более эффективный и совершенный подход, построенный на основе динамического связывания. Идея состоит в том, чтобы упаковывать в разделяемую библиотеку каждую функцию, которая генерирует динамическое содержимое. Когда запрос поступает в Web-браузер, сервер динамически загружает соответствующую функцию и редактирует связи, а затем вызывает ее непосредственно вместо того, чтобы использовать fork и execve для запуска на исполнение этой функции в контексте порожденного дочернего процесса.
Функция остается в адресном пространстве сервера, поэтому последующие запросы могут быть обработаны путем простого вызова данной функции. Это может оказать существенное влияние на эффективность работы сайта. Более того, существующие функции могут быть модифицированы, а новые функции можно добавлять во время исполнения, не останавливая сервера.
© digitrode.ru