Самый быстрый IPC в PHP - PullRequest
       19

Самый быстрый IPC в PHP

6 голосов
/ 24 ноября 2010

Интересно, какой самый быстрый способ отправки данных от одного процесса другому в PHP?Данные представляют собой только короткую строку.Конечно, у меня есть решение с разработанными сокетами AF_UNIX, но тесты показывают, что для передачи данных от одного процесса к другому требуется 0,100 мс.Интересно, может ли общая память быть быстрее?Тем не менее, я понятия не имею, как заставить другой процесс регулярно проверять разделяемую память на наличие новых записанных данных:

Текущее решение:

$server = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($server, '/tmp/mysock');
socket_listen($server);
while(true) {
  $r = $clients;
  if(socket_select($r, $w, $e, 5) > 0) {
    $client = socket_accept($server);
    $d = trim(socket_read($client, 256, PHP_NORMAL_READ));
    echo (microtime(true)-$d)."\n";
    socket_close($client);
  }
  flush();
}
socket_close($server);

И клиент:

$d = microtime(true)."\n";
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysock');
socket_write($socket, $d, strlen($d));
socket_close($socket);

Это решение работает полностью, отлично, но результаты таковы:

0.00019216537475586
9.5129013061523E-5
0.00011920928955078
0.00011801719665527
7.6055526733398E-5

Любые идеи, как сделать этот скрипт быстрее или разработать быстрее (возможно, совместно используемая память)) решение?

Заранее спасибо, Джонас

1 Ответ

1 голос
/ 09 мая 2011

Общая память - самый быстрый способ обмена данными между процессами.Для синхронизации используйте семафоры.

...