2010-11-23 34 views
6

Me pregunto, ¿cuál es la forma más rápida de enviar datos de un proceso a otro en PHP? Los datos son solo una cadena corta. Curiosamente, tengo una solución con sockets AF_UNIX desarrollados, pero los benchmarks muestran que se necesitan 0.100 ms para pasar los datos de un proceso a otro. Me pregunto si la memoria compartida puede ser más rápida. Sin embargo, no tengo idea de cómo hacer que el otro proceso verifique regularmente la memoria compartida para detectar si hay datos nuevos escritos.IPC más rápido en PHP

solución actual:

$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); 

y el cliente:

$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); 

Esta solución funciona por completo, muy bien, pero los resultados son como sigue:

0.00019216537475586 
9.5129013061523E-5 
0.00011920928955078 
0.00011801719665527 
7.6055526733398E-5 

Todas las ideas, la forma de hacer este script más rápido o desarrollar una solución más rápida (posiblemente memoria compartida)?

Gracias de antemano, Jonas

+0

¿Está * seguro * de que este es su cuello de botella? Es difícil de decir a partir de su punto de referencia, pero parece que está haciendo esto en menos de un milisegundo entre el cliente y el servidor. Tal vez podría aclarar su punto de referencia en su pregunta. –

+0

¿Existe alguna razón clara por la que no pueda usar subprocesos posix o debe usar procesos separados? – SingleNegationElimination

+0

Creo que los threds pueden funcionar, ya que los procesos se pueden unir, sin embargo, no tengo ni idea, cómo hacerlo :) – flyeris

Respuesta

1

La memoria compartida es la manera más rápida de interchnage datos entre procesos. Para la sincronización usa semáforos.