2

我实际上开发了一个PHP扩展 ( PHP 5.6) (这个扩展将只在 Linux 服务器上使用),在这个扩展中我想使用C pthread.

是否可以制作一个使用的PHP扩展pthread,而不必PHP使用该ZTS选项进行编译?

因为有一个扩展可以使用pthread withphp但是这个扩展需要编译phpwithzts选项。 pthreads 需要

4

1 回答 1

0

可以在未启用 ZTS 模式的 PHP 扩展中使用线程,但线程不得与任何内部函数(包括 PHP 代码本身)交互。这是因为没有启用 ZTS 模式,没有任何东西是线程安全的(显然),而且 Zend 引擎 (ZE) 中有很多全局状态。因此,在这种情况下,您可以对线程执行的操作非常有限。

如果您确实启用了 ZTS 模式,那么线程可以与任何内部函数和 PHP 代码交互,但必须采用无共享架构。这是因为 ZE 的某些部分仍然不是线程安全的 - 最值得注意的是 Zend 内存管理器 (ZMM)。这意味着对于每个线程,必须制作一个 PHP 解释器的单独副本(其中包含它自己的 ZMM),其中所有函数、类、接口、特征等都被复制到这个新的解释器实例中以执行一个完全独立的上下文。

于 2017-05-12T08:06:01.067 回答