pthread на расширение PHP
Я разрабатываю на самом деле PHP
расширение (PHP 5.6
) (это расширение будет использоваться только на сервере Linux), в этом расширении я хотел бы использовать C pthread
,
Можно ли сделать PHP
расширение, которое использует pthread
без необходимости компилировать PHP
с ZTS
вариант?
Потому что есть расширение, чтобы иметь возможность использовать pthread с php
но это расширение требует компиляции php
с zts
вариант. pthreads требует
1 ответ
Можно использовать многопоточность в расширении PHP без включенного режима ZTS, но потоки не должны взаимодействовать ни с одной из внутренних функций (включая сам код PHP). Это происходит потому, что без включенного режима ZTS нет ничего поточно-ориентированного (очевидно), и в Zend Engine (ZE) довольно много глобальных состояний. Таким образом, вы весьма ограничены в том, что вы можете сделать с потоками в этом случае.
Если вы включите режим ZTS, то потоки могут взаимодействовать с любыми внутренними функциями и кодом PHP, но должна использоваться архитектура без разделения ресурсов. Это связано с тем, что некоторые части ZE по-прежнему не являются поточно-ориентированными, особенно Zend Memory Manager (ZMM). Это означает, что для каждого потока должна быть сделана отдельная копия интерпретатора PHP (которая включает в себя собственный ZMM), где все функции, классы, интерфейсы, признаки и т. Д. Копируются в этот новый экземпляр интерпретатора для выполнения действий в совершенно отдельный контекст.