gpt4 book ai didi

PHP脚本执行和多线程环境(PHP5扩展)

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:11 25 4
gpt4 key购买 nike

我需要一些说明来执行作为 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)
?>

我的问题是:发出请求时,上述脚本是否在 Apache2 服务器的 PHP 模块内的线程中执行?在我看来应该如此。

我问这个,因为我在 C 中实现了一个 PHP5 扩展,它使用 Java JVM 和一些 JNI 代码,所以当上面的脚本被执行时,它使用类构造函数附加到 JVM,调用方法(实际上是包装器用于我的 JNI 调用)并使用析构函数从 JVM 分离。在 Debug模式下执行 Apache(使用 -X),脚本运行起来就像一个魅力,多次运行(重新加载)完全没有问题,但是 Apache2/PHP 在常规多进程模式下,经过很少调用 JNI AttachCurrentThread 到 JVM 挂起。我尝试追踪该问题以找到解决方案。

是否有可能在我正在执行的线程(id 等)中获取一些信息?

我需要确保执行是单线程执行。

我在 Ubuntu Lucid 10.04 LTS 上使用 Apache2 和 PHP 5.2.16(从源代码编译)

如果有什么不明白的,请告诉我。感谢您提供的信息和帮助!

安德烈亚斯

最佳答案

如果你在 modphp 的 php prefork() 配置推荐中有 apahce2。然后每个 http 请求将在其自己的 http 进程中运行,每个进程有一个 php 线程。我怀疑您正在以其他模式之一运行。

如果您不使用 prefork 配置,一些包装 c 库的 php 函数将开始破坏,因为它们不是线程安全的,包括上面提到的您的自定义 java 代码。

还有一些 fastcgi 配置的工作方式与 modphp 略有不同。

关于PHP脚本执行和多线程环境(PHP5扩展),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com