2016-12-01 2 views
2

Я разрабатываю фактически расширение PHP (это расширение будет использоваться только на сервере Linux), в этом расширении я бы хотел использовать C pthread.pthread на PHP extension

Возможно ли сделать расширение PHP, которое использует pthread, без необходимости компилировать PHP с опцией ZTS?

Поскольку есть расширение, чтобы иметь возможность использовать pthread с php, но это расширение требует компиляции php с опцией zts. pthreads requires

ответ

0

можно использовать многопоточность в расширении PHP без режима ЗТС включен, но нити не должны взаимодействовать с любым из внутренних функций (в том числе и сам PHP кода). Это связано с тем, что без включенного режима ZTS ничто не является потокобезопасным (очевидно), и в Zend Engine (ZE) существует довольно много глобального состояния. Таким образом, вы ограничены в том, что вы можете делать с потоками в этом случае.

Если вы включите режим ZTS, потоки могут взаимодействовать с любыми внутренними функциями и PHP-кодом, но для использования архитектуры необходимо использовать. Это связано с тем, что есть некоторые части ZE, которые по-прежнему не являются потокобезопасными - в первую очередь, Zend Memory Manager (ZMM). Это означает, что для каждого потока должна быть сделана отдельная копия интерпретатора PHP (которая содержит у него собственный ZMM), где все функции, классы, интерфейсы, черты и т. Д. Копируются в этот новый экземпляр интерпретатора для выполнения действий в совершенно отдельный контекст.