The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Можно ли создавать множество контекстов для библиотеки?, !*! 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 современных процессоров с другой стороны просто предназначено для решения подобных задач - достаточно создать несколько сегментов данных - по одному на каждое устройство, и переключать эти сегменты при исполнении одного общего сегмента кода. Но как это сделать реально?
      Вродебы это операционная система проделывает при использовании разделяемой библиотеки для разных процессов. НО как это сделать в рамках одного процесса?

  • Можно ли создавать множество контекстов для библиотеки?, !*! Андрюша, 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); }
    }




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру