PHP was designed initially to work with the Apache non-shared memory model. For this reason, shared memory has always been difficult for it.
Compare this to other app servers, like Java Servlets, ASP etc, where it assumes that it's running inside a multithreaded server which will have shared memory.
The shared memory case does seem appealing - it may have a longer startup time, and spend more time locking, but in theory at least, you can get a lot of performance (and of course, programming advantages) by caching bits.
Also you'd save on startup times. PHP must re-parse and recompile its scripts on each hit. On many applications this is extremely wasteful as the execution of the scripts could be much quicker than the parsing. Java would perhaps compile JSP on the first hit, then successively JIT it, gradually changing it into machine code (Something which never happens in PHP).
The advantage of PHP's "shared nothing" approach, is that it has very low overhead when not being used (i.e. doesn't hold heaps of memory - good for non-dedicated servers), has few locking restrictions - making it very scalable, and it's extremely robust against software failure (Even if some of your PHP pages crash, others keep working).
However, of course, one disadvantage is that PHP is extremely inefficient as a programming language compared with, say Java, or even VBscript.
There are some accelerators which improve startup times by pre-compiling and caching compiled scripts in shared memory, things like Zend Accelerator and Turck MMCache.
Some of these also provide an API for cached application data; specifically, they provide a session handler to serialise and unserialise the sessions into shared memory.
It's not clear how much more performant shared memory sessions are than, say, temporary files on a machine with plenty of RAM. Perhaps hardly at all.
In practice other app servers (Java and ASP.NET anyway), now support the serialised sessions-to-shared-DB approach, because for large server farms (which Sun and Microsoft are aiming at), it's more scalable - and more to the point, it actually works (shared memory is no good on systems which don't have any - for instance a cluster).
Mark