Re: Doubts about extension design for PHP

From: Date: Fri, 18 Sep 2026 13:36:04 +0000
Subject: Re: Doubts about extension design for PHP
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-132537@lists.php.net to get a copy of this message
On 18 September 2026 09:53:35 BST, David Maye Kitenge <david.maye@seigisoft.com> wrote: > * I understand that PHP lifecycle goes something like MINIT() -> RINIT() -> YOUR_CODE() > -> RSHUTDOWN -> MSHUTDOWN. But reading the PHP Lifecycle from PHP Internals Book > <https://www.phpinternalsbook.com/php7/extensions_design/php_lifecycle.html>. > I got some doubts: in a PHP-CLI, do you have a single instance of the lifecycle, or a bunch of those > per requests? The book says that PHP-CLI uses a process-based model for parallelism. Is it enabled > by default? I think "process-based model for parallelism" here basically means "any parallelism is somebody else's problem": if you run a PHP script on the command-line, PHP just runs that script in its own process, it doesn't know or care what other processes are running at the same time. > In the case I use an NGINX server as a reverse proxy for the PHP code, and I run PHP as > continuously running through a service/task manager (i.e creating a systemd entry for PHP to run in > the background), will the process-based parallelism model work by default? "Continuously running" in this case really just means "if the process exits, run it again". PHP doesn't know that's going to happen, and is still running the same code as if you ran it manually. You could set it up to run two copies, or 100; or run the same script through multiple copies of PHP (e.g. in a CI environment); each script will still just be doing its thing. > * Is there a problem that a NTS PHP invokes a C class that handles threads? Or is it > recommendable to build the PHP version as ZTS (Which, based on some diagram I saw, makes more sense. > But I read that it is discouraged as it is a very hard work to maintain). If the aim is ultimately to run the user's PHP code in a separate thread for each request, you're going to need ZTS - otherwise code in one thread will affect or even crash code in another. A common alternative is to use *asynchronous* request handling rather than *parallel* request handling: a single thread switches context while waiting for things like I/O. For that, you don't need any thread safety, because requests are all in one thread. I hope that helps, Rowan Tommins [IMSoP]

« previous php.internals (#132537) next »