国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

/Workerman-master/Events/select.php中的channel

haotian

在select的構(gòu)造函數(shù)中,有如下代碼

<?php
// Create a pipeline and put into the collection of the read to read the descriptor to avoid empty polling.
        $this->channel = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
        if ($this->channel) {
            stream_set_blocking($this->channel, 0);
            $this->_readFds = $this->channel;
        }
?>

這個創(chuàng)造出來的一對套接字,一般是被用來進行進程間通信的,但是一般的使用方式是這樣

<?php
$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
$pid     = pcntl_fork();
if ($pid == -1) {
     die('could not fork');
} else if ($pid) {
     /_ parent _/
    fclose($sockets);
    fwrite($sockets, "child PID: $pid\n");
    echo fgets($sockets);
    fclose($sockets);
} else {
    /_ child _/
    fclose($sockets);
    fwrite($sockets, "message from child\n");
    echo fgets($sockets);
    fclose($sockets);
}
?>

使用一對套接字,在進程分裂的時候每個進程擁有其副本,然后互相發(fā)送,可以得到消息
但是workerman中的stream_socket_pair的創(chuàng)建是在子進程分裂之后,的run中,才給每一個子進程創(chuàng)建一對stream_socket_pair,而且只在_readFds中加入了channel的第一個,另外一個不知道用到哪兒了,請問walkor老大,這樣做是什么目的啊,每看明白

3910 2 0
2個回答

walkor 打賞

stream_socket_pair 創(chuàng)建一個管道主要是給stream_select 用,避免stream_select空輪詢報錯。
實際上這里stream_socket_pair創(chuàng)建的管道并不是為了通訊用。

  • haotian 2017-03-15

    以下代碼都出去 workerman Select.php loop函數(shù)
    抱歉,老大,stream_select不是類似于socket_select嗎,在給定的timeout時間里面等待,您現(xiàn)在的代碼里面是這么寫的
    $ret = stream_select($read, $write, $e, 0, $this->_selectTimeout);這就意味著根本不等待,直接返回,我理解這樣做是為了執(zhí)行$this->tick(); 如果一直等待下去,_scheduler中的時間就會過去,任務就會延遲執(zhí)行
    那么如果不給那個_readFds[0],只不過是$ret為空,也就是下面回去執(zhí)行
    if (!$ret) {
    continue;
    }
    也是符合程序設想的流程的啊,避免空輪詢的目的是什么呢?

  • haotian 2017-03-15

    還是說,是為了不然幾個流$read, $write 淪為空數(shù)組?避免空輪詢?

  • walkor 2017-03-15

    $ret = stream_select($read, $write, $e, 0, $this->_selectTimeout);
    是等待 $this->_selectTimeout 這么多時間。stream_select不允許$read, $write, $e同時為空,否則會報錯

  • haotian 2017-03-15

    @1:謝謝老大 明白了

damao

學習了

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??