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

定時(shí)器是否是阻塞的?

遠(yuǎn)行萬里

問題描述

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

實(shí)際運(yùn)行下來,發(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);

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

\Workerman\Worker::runAll();

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

截圖

\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ā)請(qǐng)求
截圖

客戶端每隔1秒請(qǐng)求
截圖

558 2 0
2個(gè)回答

nitron

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

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

    你理解錯(cuò)了,9個(gè)請(qǐng)求同時(shí)請(qǐng)求 同時(shí)返回,定時(shí)器沒有起到阻塞作用 @walkor

  • nitron 2025-04-13

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

walkor 打賞

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

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

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

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

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

  • walkor 2025-04-13

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

  • walkor 2025-04-13

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

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

    同時(shí)請(qǐng)求這個(gè)點(diǎn) 確實(shí)被我忽略了,重新整理了下邏輯,web端每隔一秒發(fā)出請(qǐng)求,還是不會(huì)阻塞,先返回客戶端,然后再執(zhí)行定時(shí)器中的邏輯?;氐阶畛醯膯栴},就是想模擬下 阻塞時(shí)如何發(fā)生的。目前看是同步非阻塞的。追加了一張新圖

  • walkor 2025-04-14

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

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

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

??