цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Язык С. Загрузка и связывание с разделяемыми библиотеками из приложений



Язык С. Загрузка и связывание с разделяемыми библиотеками из приложений

Автор: Mike(admin) от 21-01-2019, 03:35

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


Динамическое связывание представляет собой мощное и полезное средство. Вот только некоторые примеры из практики:


  • Распространение программного обеспечения. Разработчики приложений Microsoft Windows часто используют разделяемые библиотеки для распространения программных модернизаций. Они генерируют новую копию разделяемой библиотеки, после чего пользователи могут загрузить и использовать ее как замену для текущей версии. Когда впоследствии они будут запускать свои приложения, эти приложения автоматически будут связаны и загружены с новой разделяемой библиотекой.
  • Построение высокопроизводительных Web-серверов. Многие Web-серверы имеют динамическое содержимое, такое как персонифицированные Web-страницы, текущие остатки на счете и рекламные объявления.

Ранние Web-серверы создавали динамическое содержимое с помощью функций fork и execve, используя порожденный процесс. Но современные высокопроизводительные Web-серверы используют намного более эффективный и совершенный подход, построенный на основе динамического связывания. Идея состоит в том, чтобы упаковывать в разделяемую библиотеку каждую функцию, которая генерирует динамическое содержимое. Когда запрос поступает в Web-браузер, сервер динамически загружает соответствующую функцию и редактирует связи, а затем вызывает ее непосредственно вместо того, чтобы использовать fork и execve для запуска на исполнение этой функции в контексте порожденного дочернего процесса.


Функция остается в адресном пространстве сервера, поэтому последующие запросы могут быть обработаны путем простого вызова данной функции. Это может оказать существенное влияние на эффективность работы сайта. Более того, существующие функции могут быть модифицированы, а новые функции можно добавлять во время исполнения, не останавливая сервера.




© digitrode.ru


Теги: язык C




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий