Re: [RFC] Embedding multiple PHP engines in a single thread

From: Date: Tue, 01 Feb 2022 20:26:13 +0000
Subject: Re: [RFC] Embedding multiple PHP engines in a single thread
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-116969@lists.php.net to get a copy of this message
On Tue, Feb 1, 2022 at 3:36 AM <as@php.net> wrote: > Hello internals, > > As you know, the PHP codebase makes heavy use of global variables. In ZTS > builds, access to these globals are cleverly mapped to thread local storage > via macros. To my knowledge, the limitation here is that there's no way to > run multiple PHP engines in a single thread. (Please let me know if I'm > missing something.) > > Naturally this is an extremely slim corner case. It would however unlock > some interesting things like user-land zend_extensions and SAPIs without > spawning threads needlessly. It would also enable one to build a > coroutine-based SAPI[1]. > > I'm curious if there's been any previous discussion around this, or if > anyone has general feedback before I take a shot at this. > > My rough idea is to modify TSRM to support multiple > tsrm_tls_entry.storage per thread, keyed by some > caller-supplied id. > Currently a thread-safe resource is accessed like > thread[thread_id].storage[resource_id]. In my idea it would be > thread[thread_id].storage[storage_id][resource_id] with some > API function > to push/pop storage_id. Any thoughts on that approach? > > Support for non-ZTS builds would be rad but would require much larger code > changes. > > Feedback appreciated. > > Thank you, > > Adam > > [1] for example, to call into PHP concurrently from Go's green-threads > (which may share a single OS thread) > In places we also use real thread-local storage (ZEND_TLS) -- actually, this is the preferred method to manage global state if it is possible. Nowadays TSRM exists essentially only to work around deficiencies in cross-DLL TLS support on Windows. I don't think your scheme could extend to those cases. I'm not really convinced that it's worthwhile to invest effort in this directly. Regards, Nikita

« previous php.internals (#116969) next »