2010-11-23 6 views
6

Je me demande, quel est le moyen le plus rapide d'envoyer des données d'un processus à l'autre en PHP? Les données sont seulement une chaîne courte. Actuellement, j'ai une solution avec des sockets AF_UNIX développés, mais les tests montrent qu'il faut 0,100 ms pour transmettre les données d'un processus à un autre. Je me demande, si la mémoire partagée peut être plus rapide? Cependant, je n'ai aucune idée, comment faire l'autre processus vérifie régulièrement la mémoire partagée pour détecter, s'il y a de nouvelles données écrites?Le plus rapide IPC en PHP

solution actuelle:

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

Et client:

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

Cette solution fonctionne complètement, très bien, mais les résultats sont comme ceci:

0.00019216537475586 
9.5129013061523E-5 
0.00011920928955078 
0.00011801719665527 
7.6055526733398E-5 

Toutes les idées, comment rendre ce script plus rapide ou développer une solution plus rapide (éventuellement à mémoire partagée)?

Merci à l'avance, Jonas

+0

Etes-vous sûr que c'est votre goulot d'étranglement? C'est difficile à dire à partir de votre benchmark, mais il semble que vous le fassiez bien en dessous d'une milliseconde entre le client et le serveur. Peut-être pourriez-vous clarifier votre point de repère dans votre question. –

+0

Y a-t-il une raison évidente pour laquelle vous ne pouvez pas utiliser les threads posix, ou vous devez utiliser des processus séparés. – SingleNegationElimination

+0

Je pense que threds pourrait fonctionner, comme les processus pourraient être joints, cependant, n'ont aucune idée, comment le faire :) – flyeris

Répondre

1

La mémoire partagée est le moyen le plus rapide de interchnage de données entre les processus. Pour la synchronisation, utilisez des sémaphores.

Questions connexes