6
PHP에서 한 프로세스의 데이터를 다른 프로세스로 보내는 가장 빠른 방법은 무엇입니까? 데이터는 짧은 문자열입니다. Curretly AF_UNIX 소켓을 개발 한 솔루션이 있지만 벤치 마크 결과 한 프로세스에서 다른 프로세스로 데이터를 전달하는 데 0.100ms가 걸린다는 것을 보여줍니다. 나는 공유 메모리가 더 빨리 될 수 있다면 궁금해? 그러나, 나는 새로운 데이터가 쓰여지는 경우, 다른 프로세스가 공유 메모리를 정기적으로 검사하여이를 감지하도록하는 방법을 모른다.PHP에서 가장 빠른 IPC
현재 솔루션 :
$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
모든 아이디어에 이 스크립트를 더 빠르게 만들거나보다 빠른 (공유 메모리 일 수도 있음) 솔루션을 개발할 수 있습니까? 사전에
감사합니다, 조나스
이것이 병목 현상입니까? 벤치 마크에서 말하기는 어렵지만, 클라이언트와 서버 사이의 밀리 초 미만에서이 작업을 수행하는 것처럼 보입니다. 아마도 귀하의 질문에 귀하의 벤치 마크를 명확히하실 수 있습니다. –
posix 스레드를 사용할 수없는 분명한 이유가 있거나 별도의 프로세스를 사용해야합니다. – SingleNegationElimination
프로세스가 결합 될 수 있기 때문에 threds가 작동 할 수도 있다고 생각하지만, 어떻게해야 할 지 모르겠다. :) – flyeris