On Mon, Dec 25, 2023, at 6:34 AM, Kévin Dunglas wrote:

> However, I suggest doing this as a second step, because as described in 
> my first post, it will still be the responsibility of each SAPI to 
> manage long-running processes and communication with them. This is 
> simple to do with Go's GoRoutine and Rust's asynchronous runtimes such 
> as Tokio, it's definitely more difficult in cross-platform C. I suggest 
> starting by adding the primitives to libphp, then we'll see how to 
> exploit them (and whether it's worthwhile) in the built-in SAPIs.
> I personally have less interest in working on FPM/CGI/mod_php as the 
> other possibilities offered by modern SAPIs like FrankenPHP are more 
> important (better deployment experience as you have a single static 
> binary or Docker image, Early Hints support, high-quality native HTTP/3 
> server etc), but I'd be happy to help if anyone wants to update these 
> SAPIs.

>> To what extent would user-space code run this way have to think about 
>> concurrency, shared memory, persistent SQL connections, etc?  Does it have 
>> any implications for fiber-using async code?
>
> Regarding concurrency, it doesn't change much (it's similar to existing 
> SAPI). Regarding memory and SQL connections, extra care is required. 
> Memory leaks (and other kinds of leaks) should be avoided (or workers 
> should restart from time to time, which is obviously a poorer 
> solution). Libraries maintaining SQL connections such as Doctrine or 
> Eloquent must ensure that the connection isn't active.

Forgive my ignorance, but why no connection?  You mean the pre-worker-start 
part needs to avoid an SQL connection?  Why is that?  That would be something 
that needs to be super-well documented, and possibly some guards in place to 
prevent it, if there's no good way around it.  (This is the sort of detail I'm 
thinking of, where I just don't know the implications but want to think through 
them as much as possible in advance, so that it can be "safe by design.")

> Fibers work as expected. There is a small limitation when using them 
> with Go (that is being tracked in the Go runtime, 
> https://frankenphp.dev/docs/known-issues/#fibers), but it's not related 
> to the C code of the worker mode, and this limitation shouldn't exist 
> for SAPIs not written in Go.
> 
>> Depending on the details, this could be like fibers but for 3rd party SAPIs 
>> (something about 4 people in the world actually care about directly, 
>> everyone else just uses Revolt, Amp, or React, but mostly it doesn't get 
>> used), or completely changing the way 90% of the market runs PHP, which 
>> means frameworks will likely adapt to use that model primarily or 
>> exclusively (ie, less of a need for a "compile" step as a generated 
>> container or dispatcher is just held in memory automatically already).  The 
>> latter sounds exciting to me, but I'm not sure which is your intent, so I 
>> don't know if I'm going too far with it. :-)
>
> My intent is that most SAPIs expose the same (or a very similar 
> interoperable) worker mode. So (I hope) that most PHP developers will 
> not have to deal with these primitives directly, but that it will allow 
> a new generation of super-fast PHP apps to be created. Most frameworks 
> already support that but require a lot of boilerplate code to support 
> the different existing engines. Standardizing will likely increase 
> adoption and will allow collaboration to make the low-level code that I 
> propose to move in libphp as fast, stable, and clean as possible.

Do you have an intent or expectation of a worker-style SAPI being shipped with 
PHP itself, or for that to remain the domain of third parties?

>> Please advise on what the implications would be for the non-SAPI-developing 
>> PHP devs out there.
>
> None, except that they will be able to use the new handle_request() 
> function to create a worker script if supported by the SAPI they use.

I mean more what implications would there be on how user-space code is written 
to be worker-SAPI-friendly.  (The SQL connection comment above, for example.)  
I have not worked with any of the worker-ish tools so far myself, so other than 
"you'll need an alternate index.php for that", I don't have a good sense of 
what else I'd want to do differently to play nice with Franken and Friends.

The idea of combining fiber-based code with supported worker-mode runners 
sounds like a ridiculously cool future for PHP, but I don't know how windy that 
path is. :-)

--Larry Garfield

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to