Загрузите несколько копий общей библиотеки

Аргумент более сложен, чем это (читайте статья "Is Weak Typing Strong Enough" Yegge для интересного обзора).

Динамические языки не обязательно испытывают недостаток в проверке ошибок любой - вывод типа C# является возможно одним примером. Таким же образом C и C++ имеют ужасные проверки компиляции, и они со статическим контролем типов.

основными преимуществами динамических языков является a) возможность (который должен не обязательно использоваться все время), и закон b) Boyd Повторения .

последняя причина значительна.

12
задан mossman 17 November 2009 в 01:05
поделиться

4 ответа

Вместо использования потоков вы можете использовать несколько процессов, каждый из которых выполняет определенную работу. Это очень часто встречается в * nix, и его обычно проще кодировать.

6
ответ дан 2 December 2019 в 20:18
поделиться

Похоже, плохая идея. Это невозможно с разделяемыми библиотеками, как это было бы со статическими.

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

Я бы посоветовал использовать несколько процессов или использовать мьютекс, это, вероятно, более эффективно.

По мере того, как вы работаете в Linux, также могут существовать другие подходы, если вы можете получить доступ к исходному коду библиотеки, например, переименование его символов, чтобы иметь столько отдельных экземпляров, сколько необходимо ... Ну,

1
ответ дан 2 December 2019 в 20:18
поделиться

Вы можете загрузить несколько независимых копий библиотеки следующим образом:

#define _GNU_SOURCE
#include <dlfcn.h>
...
void *handle = dlmopen(LM_ID_NEWLM, "/path/to/library.so", RTLD_NOW);

Подробнее здесь .

9
ответ дан 2 December 2019 в 20:18
поделиться

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

0
ответ дан 2 December 2019 в 20:18
поделиться