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

定時器是否是阻塞的?

遠(yuǎn)行萬里

問題描述

原文檔中:添加的定時任務(wù)在當(dāng)前進(jìn)程執(zhí)行(不會啟動新的進(jìn)程或者線程),如果任務(wù)很重(特別是涉及到網(wǎng)絡(luò)IO的任務(wù)),可能會導(dǎo)致該進(jìn)程阻塞,暫時無法處理其它業(yè)務(wù)

實際運行下來,發(fā)現(xiàn)是非阻塞的。


$worker->count = 1;

$worker->onMessage = function (\Workerman\Connection\TcpConnection $connection, \Workerman\Protocols\Http\Request $request) {

    \Workerman\Timer::add(10, function()use($connection){
        echo "aaaa".date("Y-m-d H:i:s").PHP_EOL;
    }, null, false);
    \Workerman\Timer::add(5, function()use($connection){
        echo "bbb".date("Y-m-d H:i:s").PHP_EOL;
    }, null, false);

    // 向瀏覽器發(fā)送hello world
    $connection->send('hello world'.date("Y-m-d H:i:s"));
};

\Workerman\Worker::runAll();

瀏覽器同時發(fā)起了9個請求
頁碼同時返回收到hell word
然后再執(zhí)行完兩個定時器

截圖

\Workerman\Timer::add(1, function()use($connection){
    sleep(15);
    echo "aaaa ".date("Y-m-d H:i:s").PHP_EOL;
}, null, false);

\Workerman\Timer::add(1, function()use($connection){
    sleep(5);
    echo "bbb ".date("Y-m-d H:i:s").PHP_EOL;
}, null, false);

客戶端并發(fā)請求
截圖

客戶端每隔1秒請求
截圖

482 2 0
2個回答

nitron

你的$connection->send("hello world")能耗費多少時間?
你要不要把"Y-m-d H:i:s"換成毫秒看看呢?

  • 遠(yuǎn)行萬里 2025-04-13

    你理解錯了,9個請求同時請求 同時返回,定時器沒有起到阻塞作用 @walkor

  • nitron 2025-04-13

    哥啊,這單個請求的處理時間頂天10ms甚至不到,9個加起來也就頂天100ms, 你的輸出的時間最小單位是秒,1秒有1000ms呢,打毫秒出來就是的意義就在這里

walkor 打賞

echo "aaaa".date("Y-m-d H:i:s").PHP_EOL;
不是很重的業(yè)務(wù)

  • 遠(yuǎn)行萬里 2025-04-13

    在定時器中增加sleep 15秒,還是同時返回了,看截圖(追加了一張)。我看了下響應(yīng)頭有長連接標(biāo)識,單進(jìn)程,共享一個連接, 應(yīng)該是阻塞呀

  • 遠(yuǎn)行萬里 2025-04-13

    另一個問題:整個周期都不能使用sleep嗎,想主動阻塞下怎么處理比較好

  • walkor 2025-04-13

    我覺得你沒理解定時器的含義。按照你的代碼,第1個請求到達(dá)服務(wù)端,服務(wù)端設(shè)置定時器1秒后執(zhí)行sleep。然后緊接著第2個請求過來了,這時候可能才過了10ms,遠(yuǎn)沒達(dá)到1秒,還沒到執(zhí)行sleep的時候,那么第2個請求也能被處理,同理其它請求也一樣

  • walkor 2025-04-13

    如果你進(jìn)程只有你自己用,你sleep多少秒都行,如果不是,那么你sleep的時候其他用戶就沒辦法正常執(zhí)行業(yè)務(wù)了。

  • 遠(yuǎn)行萬里 2025-04-13

    同時請求這個點 確實被我忽略了,重新整理了下邏輯,web端每隔一秒發(fā)出請求,還是不會阻塞,先返回客戶端,然后再執(zhí)行定時器中的邏輯。回到最初的問題,就是想模擬下 阻塞時如何發(fā)生的。目前看是同步非阻塞的。追加了一張新圖

  • walkor 2025-04-14

    發(fā)下完整代碼,包括操作系統(tǒng),workerman版本

  • 遠(yuǎn)行萬里 2025-04-15

    檢查發(fā)現(xiàn)是開啟了eventLoop(后邊弄了下協(xié)程 忘了關(guān)了),按照你說的邏輯,沒問題。 當(dāng)前開啟定時器的請求非阻塞,下一次請求會被阻塞。thinks??

??