Shared Memory¶
Shared memory is a technique that allows multiple processes to access the same region of memory, enabling fast inter-process communication, IPC, without the overhead of serialization or network transfers.
PHP provides several mechanisms for shared memory:
Shmop extension: low-level shared memory operations using SysV shared memory segments. Functions include
shmop_open(),shmop_read(),shmop_write(),shmop_close(), andshmop_delete(). Uses a keyshm_keyto identify segments.APCu, APC User Cache: a widely-used in-memory key-value store that provides shared memory caching across requests. Functions like
apcu_store(),apcu_fetch(), andapcu_delete()are commonly used for application-level caching.msg_send()/msg_receive(): message queue functions that enable structured communication between processes.sysvsem: system V semaphore functions for synchronization between processes accessing shared memory.OPcache: while not directly a shared memory API, OPcache stores compiled PHP bytecode in shared memory, allowing all PHP processes to reuse compiled scripts.
Shared memory is essential for:
Session handling in load-balanced environments
Application-level caching, APCu
Inter-process communication in worker pools
Real-time data sharing between processes
Reducing database load through in-memory caching
Note that shared memory segments persist until explicitly deleted or the system is restarted, which requires careful lifecycle management.
<?php
// adapted from the PHP manual : https://www.php.net/manual/en/shmop.examples-basic.php
// Create 100 byte shared memory block with system id of 0xff3
$shm_id = shmop_open(0xff3, 'c', 0644, 100);
if (!$shm_id) {
echo "Couldn't create shared memory segment\n";
}
// Lets write a test string into shared memory
$shm_bytes_written = shmop_write($shm_id, my shared memory block, 0);
if ($shm_bytes_written != strlen(my shared memory block)) {
echo "Couldn't write the entire length of data\n";
}
// Now lets read the string back
$my_string = shmop_read($shm_id, 0, $shm_size);
if (!$my_string) {
echo "Couldn't read from shared memory block\n";
}
echo "The data inside shared memory was: " . $my_string . "\n";
?>
See also A Guide to the PHP SHMOP Library for Shared Memory Operations.
Related : Memory, Actor Model, Ownership, Channel, Memory Arena, Software Transactional Memory (STM), Cache, APCu, Session, Opcache, Concurrency, Mutex, Semaphore