Почему по умолчанию PHP ZTS отключен?

Почему ZTS отключен по умолчанию, и мы должны скомпилировать исходный код PHP для достижения Threadingспособность? Есть ли какие-либо ограничения или побочные эффекты при включенииZTS? Это нестабильно?

1 ответ

Решение

Изначально PHP начинался как двоичный файл CGI, а затем как модуль для Apache. Ни один из этих двух способов не требовал, чтобы PHP выполнялся в потоке, поскольку все они обрабатывали бы запрос последовательно.

Когда была добавлена ​​поддержка других веб-серверов, в первую очередь Microsoft IIS через их интерфейс ISAPI, их модель обработки требовала, чтобы PHP мог работать как поточный процесс. В PHP добавлен режим "ZTS" (Zend Thread Safe), который выполняет немало работы, чтобы гарантировать, что запросы, выполняемые параллельно (многопоточными), не наступают друг другу на ноги. Но это происходит за счет снижения производительности.

Поскольку для большинства API-интерфейсов веб-серверов не требуется, чтобы ZTS был включен, по умолчанию для PHP это отключено. Если вы собираете PHP для уровня ISAPI SAPI (Server Abstraction), то процесс сборки PHP автоматически включает режим ZTS.

Сказав все это, режим ZTS предназначен не для того, чтобы разрешить многопоточность внутри сценариев PHP, а скорее для того, чтобы позволить самому PHP работать в многопоточной среде. Если вы заинтересованы в параллельном запуске вещей с точки зрения сценария PHP, вам нужно прибегнуть к сторонним расширениям, таким как параллельное расширение Джо или swoole.

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