【发布时间】:2011-05-14 18:13:13
【问题描述】:
我想知道,用 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
任何想法,如何使这个脚本更快或开发更快(可能是共享内存)解决方案?
提前致谢, 乔纳斯
【问题讨论】:
-
你确定这是你的瓶颈吗?从您的基准测试中很难判断,但看起来您在客户端和服务器之间执行此操作的时间远低于一毫秒。也许你可以在你的问题中澄清你的基准。
-
是否有明确的理由不能使用 posix 线程,或者必须使用单独的进程。
-
我认为 threds 可能会起作用,因为可以加入进程,但是,不知道该怎么做 :)
-
我试图分叉进程,但它似乎也比套接字慢。将数据返回给父进程大约需要 1-3 毫秒而不是 0.1 毫秒(使用套接字)。
标签: php sockets stream ipc shared-memory