如何使用php pcntl_fork与线程?

时间:2013-05-16 09:00:24

标签: php multithreading fork

我看到了, http://php.net/manual/en/function.posix-setsid.php pcntl_fork()示例位于底部。该代码工作正常。我可以将它与PHP线程结合起来吗? http://www.php.net/manual/en/class.thread.php

<?php
    $pid = pcntl_fork(); // fork
    if ($pid < 0)
        exit;
    else if ($pid) // parent
        exit;
    else { // child

        $sid = posix_setsid();

        if ($sid < 0)
            exit;

        for($i = 0; $i <= 60; $i++) { // do something for 5 minutes
            sleep(5);
        }
    }
?>

1 个答案:

答案 0 :(得分:1)

我不确定你想要实现什么,但如果你想随机混合线程和分叉,你最好先阅读它:Threads and fork(): think twice before mixing them如果你只是想从控制终端分离然后开始线程(但不是进程)最可能会很好。 (只需用线程代码替换for部分。)

无论如何,应该注意编写没有内存泄漏的PHP守护进程是非常困难的,但并非不可能。期望花大量时间来寻找内存问题,特别是如果你使用复杂的类结构。

此外,PHP的一些扩展不是线程安全的,特别是如果它们执行一些外部二进制文件。在这样做之前你可能真的想三思。我也会考虑选择另一种语言。