【问题标题】:Fastest IPC in PHPPHP 中最快的 IPC
【发布时间】: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


【解决方案1】:

共享内存是进程间数据交换的最快方式。对于同步,请使用信号量。

【讨论】:

    猜你喜欢
    • 2011-10-30
    • 2010-11-12
    • 2013-01-29
    • 1970-01-01
    • 2012-03-04
    • 2016-02-12
    • 2010-12-12
    • 2011-05-10
    • 2012-11-01
    相关资源
    最近更新 更多