Недавно столкнулся с бизнес-задачей, где нужно было передать данные между двумя PHP-скриптами с максимально возможной скоростью - счет шел на миллисекунды
Привычным решением было бы использовать Redis.
Там затраты были бы около 0.10 - 0.12 ms, если не надо открывать TCP соединение заново.
Если надо - то уже около 0.30 ms (тык тык тык).
И это если Redis стоит на локалхосте, иначе затраты могли бы вырасти до 3 порядков
Подход с разделением оперативной памяти в результате испытаний по моему бенчмарку дал 27 µs (~0.03 ms) задержки на передачу данных, что в примерно в 4 раза быстрее, чем Redis с persistent connection
В php оказалось готовое API и для семафоров, и для мьютексов, и для самой shared memory:
<?php
$key = 0xDEADBEEF;
$size = 1024;
$shm = shmop_open($key, 'c', 0666, $size);
$mutex = new SyncMutex('crypto_rate_mutex');
$mutex->lock();
shmop_write($shm, $payload, 0);
$mutex->unlock();
Есть и другие варианты IPC, но показались неподходящими
Как итог, сэкономили около 0.07 ms 😅. В обычном бэкенде и подумать смешно о таких оптимизациях, но в контексте приложений, где счет идет на миллисекунды помноженные на тысячи операций в день - это профит!