On 03/14/2013 01:21 PM, Bob Weinand wrote:
Sharing active memory between processes goes against the "shared nothing" design of PHP. The lack of the feature you're describing is itself a feature. :-)
If you had real shared memory, then you're now writing a multi-threaded app. Even if you aren't using threads per se it's the same level of potential for spooky action at a distance. If your problem space really requires that (and there certainly are those that do), Java or NodeJs will suit you better because those are built specifically for a persistent-server model, rather than PHP's shared-nothing design. However, in practice most PHP/web applications don't need that, because HTTP is a stateless request/response system. Shared-nothing more closely models what the actual environment is doing, and can still be very performant as long as you don't do anything naive.
If you're doing something stateful like Web Sockets, then you can run PHP as a cli application that is its own persistent server rather than as an Apache add-on. For that, look at Ratchet: http://socketo.me/
--Larry Garfield
If PHP should be so restrictive against sharing, why are there extensions like memcached, ...? Someone must have missed this possibility to share rapidly...
If I need something like websockets, I use the pthreads extension: perfectly suited for stateful applications.
For example: I want to have the database in memory (no, no mysql Memory-tables; this is too slow...) and only do the updates into the database for faster access when most contents are read-only. What are these good reasons against such a feature except it violates the shares-nothing superlative of PHP. (Even if this feature would exist, you can still write PHP without sharing)
Bo Weinand
Memcache is out of process. There are possible race conditions there,
but FAR fewer and FAR more contained than true multi-threaded environments.
This list has debated the merits of shared-nothing many times before; it
was a deliberate design decision in the interest of simplifying
development for the overwhelming majority of users. If your app is so
performance sensitive that a memcache lookup is going to bring it to its
knees, then either you're misusing PHP or you're better off using
something other than PHP. (PHP is not the tool for every use case.)
In any event, adding true shared memory to PHP would be nearly
impossible without completely redesigning the way it interacts with web
servers. The alternative is to write your own PHP CLI application that
connects to sockets itself and runs as a daemon (possibly using the
pthreads extention as you mention), and cut apache/nginx out of the
picture entirely. If your use case calls for that, knock yourself out.
But the "good reasons" against adding such a feature is that it would
require rewriting everything and rearchitecting the entire Apache SAPI,
which is not happening any time soon.
--Larry Garfield
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php