Скопировать конструкцию для окружающей среды в зажимы?

Я хочу создать как минимум сотни сред из существующей среды клипов, а затем запускать их одновременно в многопоточном режиме.

Дозовые клипы поддерживают эту функцию (например, конструкция глубокой копии)? Или как я могу реализовать эти функции?

Я применяю sourcecore клипов в своем проекте на C ++. Теперь у меня есть строка, содержащая множество правил. Если я хочу выполнить несколько запросов одновременно, мне придется вызывать метод create несколько раз, но на этот раз для меня слишком дорого создавать столько одинаковых env.

Использую c кодом клипов. Ниже представлен процесс моего создания:

std::unique_ptr<void> CreateClips(const string &rules) {
    std::unique_ptr<void> clips(CreateEnvironment());
    if (!clips) {
        throw runtime_error("[FATAL] clips CreateEnvironment() failed");
    }

    int retcode;
    retcode = ClipsEnvLoadFromString(clips.get(), rules);
    if (retcode != 1) {
        throw runtime_error("[FATAL] clips EvnLoadFromString() failed, " +
                            rules);
    }

    return clips;
}


person Javin Fan    schedule 07.10.2019    source источник


Ответы (1)


Нет функции глубокого копирования. Если вы сохраняете свои правила в двоичном формате с помощью функции bsave, вы можете загружать их гораздо быстрее с помощью функции bload. Ускорение увеличивается по мере увеличения количества конструкций в двоичном изображении. Для системы с примерно 30 правилами я вижу ускорение примерно в 9 раз, а для системы с примерно 660 правилами я вижу ускорение примерно в 47 раз.

person Gary Riley    schedule 07.10.2019
comment
Привет, Гэри, после использования этого метода для загрузки новой среды CLIPS я использовал функцию EnvLoadFactsFromString для загрузки пользовательских фактов, но у меня возникла некоторая ошибка, сообщение об ошибке. Почему? еще один вопрос для подробного описания процесса - person Javin Fan; 18.10.2019