Мне нужно кое-что прояснить, выполняя «класс», который реализован в виде модуля PHP 5. В классе есть несколько методов, включая конструктор / деструктор, и в скрипте PHP я могу использовать его следующим образом:
<?php
// --- construct
$c = new my_class("some argument");
// --- add data
foreach ($arr_of_elements as $k => $v) {
$c->add_element($v);
}
// --- execute algorithm
$c->execute();
// --- get result as xml format
$result = $c->get_result_as_xml();
// --- end of script (destruct)
?>
Мой вопрос: когда выполняется запрос, выполняется ли приведенный выше скрипт в одном потоке в модуле PHP сервера Apache2? На мой взгляд, так и должно быть.
Я спрашиваю об этом, потому что я реализовал расширение PHP5 в C, которое использует Java JVM с некоторым кодом JNI, поэтому при выполнении вышеуказанного сценария он подключается к JVM с помощью конструктора класса, вызывает методы (которые на самом деле являются обертками). для моих вызовов JNI) и отсоединяется от JVM с деструктором.
При выполнении Apache в режиме отладки (с использованием -X
) сценарий and запускается как чудо, многократные запуски (перезагрузка) не создают никаких проблем, но Apache2 / PHP в обычном многопроцессорном режиме после нескольких вызовов JNI AttachCurrentThread
к JVM висит. Я пытаюсь отследить эту проблему, чтобы найти решение.
Есть ли возможность получить некоторую информацию, в каком потоке (id или тому подобное) я выполняю?
Мне нужно убедиться, что выполнение является однопоточным.
Я использую Apache2 с PHP 5.2.16 (скомпилировано из исходного кода) в Ubuntu Lucid 10.04 LTS
Если что-то неясно, пожалуйста, дайте мне знать. Спасибо за информацию и помощь!
Andreas