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), где все функции, классы, интерфейсы, признаки и т. Д. Копируются в этот новый экземпляр интерпретатора для выполнения действий в совершенно отдельный контекст.

Другие вопросы по тегам