Можно ли создавать множество контекстов для библиотеки?, alexraynepe196, 12-Окт-20, 12:50 [смотреть все]для native библиотеки в жав-приложении надо делать множество "инстансов" - запускать библиотечный код в наборе контекстов. Поясню что происходит: библиотека эмулирует некий объект. Жава-приложение хочет работать с мнодеством независимых одинаковых объектов. В настоящее время для переключения контекста тупо из внешнего буфера облавсть данных библиотеки копируется целиком, и обратно сохраняется.Есть ли знатоки, знающие как можно создать множество контекстов, и переключать их без копирования? Насколько я понимаю, в норме разделяемые библиотеки линкуются в контексте приложения. Множество раз прилинковать одну библиотеку с разными контекстами в рдно приложение нельзя? |
- Можно ли создавать множество контекстов для библиотеки?, Аноним, 19:08 , 14-Окт-20 (1) +1
Слова вроде бы знакомые, а о чем речь вообще непонятно
- Можно ли создавать множество контекстов для библиотеки?, alexrayne, 13:21 , 14-Ноя-20 (2)
> Слова вроде бы знакомые, а о чем речь вообще непонятно да, действительно неясно. 1) есть некая библиотека моделирующая некое устройство - дллка, или sharedobject 2) в среде эмулятора надо загрузить и смоделировать множество экземпляров устройств - больше 100 или 1000 скажем. 3) в текущей реализации загружается библиотека, а для каждого экземпляра хранится копия области данных используемая библиотекой. Исполняемый код остается общим. Для выполнения кода над конкретным экземпляром - область данных библиотеки перезаписывается из контейнера экземпляра. Сейчас переключение экземпляра очень затратно - скопировать 30-60кБ данных надо, чтобы выполнить кода на сотню тактов. более 95% времени занимает это копирование. Единственное решение обойти это место, я пока нашел - скопировать файл библиотеки в несколько независимых, и загружать эти библиотеки как независимые, получится одна библиотека/одоно устройство. MMU современных процессоров с другой стороны просто предназначено для решения подобных задач - достаточно создать несколько сегментов данных - по одному на каждое устройство, и переключать эти сегменты при исполнении одного общего сегмента кода. Но как это сделать реально? Вродебы это операционная система проделывает при использовании разделяемой библиотеки для разных процессов. НО как это сделать в рамках одного процесса?
- Можно ли создавать множество контекстов для библиотеки?, Брат Анон, 09:20 , 19-Ноя-20 (3)
>[оверквотинг удален] > да, действительно неясно. Если либа оперирует синглетоном -- тогда непонятно зачем вообще что-либо копировать. Если либа предоставляет конструктор индивидуальных объектов -- тогда пробуйте ссылку на объект создавать. Если жаба это умеет (спойлер: убейте жабу).
- Можно ли создавать множество контекстов для библиотеки?, Андрюша, 16:19 , 14-Мрт-22 (5)
> для native библиотеки в жав-приложении надо делать множество "инстансов" - запускать библиотечный > код в наборе контекстов. > Поясню что происходит: библиотека эмулирует некий объект. Жава-приложение хочет работать > с мнодеством независимых одинаковых объектов. > В настоящее время для переключения контекста тупо из внешнего буфера облавсть данных > библиотеки копируется целиком, и обратно сохраняется. > Есть ли знатоки, знающие как можно создать множество контекстов, и переключать их > без копирования? > Насколько я понимаю, в норме разделяемые библиотеки линкуются в контексте приложения. Множество > раз прилинковать одну библиотеку с разными контекстами в рдно приложение нельзя? Сделайте класс инкапсулирующий контекст "устройства". В библиотеке переделайте, чтобы её функции принимали этот контекст. Типо С++. В библиотеке: void* InitDevice(); ... void CloseDevice(void *ctx); В программе: class Device { private: void *ctx; public: void Init() { this->ctx = InitDevice(); } ... void Close() { CloseDevice(this->ctx); } }
|