URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4064
[ Назад ]

Исходное сообщение
"Запуск внешних программ в многопоточном процессе"

Отправлено Vital , 15-Мрт-05 00:01 
Прошу помощи у специалистов в области многопоточного программирования.
Задача состоит в следующем: требуется в многопоточной программе вызывать внешнюю программу, а именно, интерпретатор php-скриптов (/usr/bin/php), передать ему имя скрипта и получить результаты. Какие функции нужны для реализации этой задачи? Есть ли тут какие-нибудь особенности использования пары fork/exec? Ведь теоретически в многопоточном процессе одновременно имеется несколько точек исполнения кода, какое поведение будет у дочернего процесса? Хотелость бы увидеть примеры реализации таких задач.
Еще интересует такой вопрос. Для большей эффективности было бы неплохо оставить интерпретатор в памяти и вызывать его как фукнцию. Возможно ли такое реализовать?

Содержание

Сообщения в этом обсуждении
"Запуск внешних программ в многопоточном процессе"
Отправлено rgo , 15-Мрт-05 05:25 
pthread используешь?
1. $ info libs
там написано что после fork в дочернем процессе живёт только один поток, тот который сказал форк.

>Еще интересует такой вопрос. Для большей эффективности было бы неплохо оставить интерпретатор
>в памяти и вызывать его как фукнцию. Возможно ли такое реализовать?
>

А это не знаю. Но ежели часто вызываешь то беспокоится (на мой взгляд) на этот счёт не надо, *nix всё равно кэширует все обращения к файлам


"Запуск внешних программ в многопоточном процессе"
Отправлено Dead Mustdie , 15-Мрт-05 10:29 
>>Еще интересует такой вопрос. Для большей эффективности было бы
>>неплохо оставить интерпретатор в памяти и вызывать его как фукнцию.
>>Возможно ли такое реализовать?
>>
>
>А это не знаю. Но ежели часто вызываешь то беспокоится (на мой
>взгляд) на этот счёт не надо, *nix всё равно кэширует все
>обращения к файлам

Мнда, зато инициализация самого интерпретатора будет происходить
столько раз, сколько запусков будет выполнено.

IMHO можно посмотреть, как реализован Апачёвый mod_php4.


"Запуск внешних программ в многопоточном процессе"
Отправлено slavon , 15-Мрт-05 10:46 
>pthread используешь?
>1. $ info libs
> там написано что после fork в дочернем процессе живёт только один
>поток, тот который сказал форк.
>
>>Еще интересует такой вопрос. Для большей эффективности было бы неплохо оставить интерпретатор
>>в памяти и вызывать его как фукнцию. Возможно ли такое реализовать?
>>
>
>А это не знаю. Но ежели часто вызываешь то беспокоится (на мой
>взгляд) на этот счёт не надо, *nix всё равно кэширует все
>обращения к файлам

Гы... изврат конечно... но теоритически скорее всего можно =) (я не проверял... так... теория)

Скомпилировать PHP (при сборке всего указать -shared -fPIC)
а потом

    void *handle;
    int (*php)(int, char **); // main () в php
    char *error;
    handle = dlopen ("php.so", RTLD_LAZY);
    if (!handle) {
        fputs (dlerror(), stderr);
        exit(1);
    }
    php = dlsym(handle, "main");
    if ((error = dlerror()) != NULL)  {
        fprintf (stderr, "%s\n", error);
        exit(1);
    }
    (*php)(...,..); // тут сэмулировать запуск майн =)
    dlclose(handle);



"Запуск внешних программ в многопоточном процессе"
Отправлено Vital , 15-Мрт-05 11:54 
О! использовать как библиотеку хорошая идея! Буду копать в этом направлении.
Спастбо за ответы!