task任務機制實際是將耗時程序投遞到非同步呼叫事件task中處理,從而不阻塞主程序;
以swoole 快速起步:建立 websocket 伺服器(聊天室)為例,在 websocket 伺服器監聽到新訊息相應時,需要一些耗時的操作之後才將資料 send 給客戶端,如果不使用task任務機制時:
// 監聽 websocket 訊息事件
$server->on('message', function ($server, $frame)
// 流程完成
echo date("y-m-d h:i:s") . ":finish it\n";
});
結果如下:
可見,在開始流程(get something)到 流程完成(finish it)一共耗時 5 秒,原因就在於 那個耗時的任務 sleep(5) !
如果將耗時任務投放到 task 中做處理:
// 配置
$server->set([
"worker_num" => 2,
"task_worker_num" => 2
]);/* ... */
// 監聽 websocket 訊息事件
$server->on('message', function ($server, $frame)
// 流程完成
echo date("y-m-d h:i:s") . ":finish it\n";
});$server->on("task", function ($server, $taskid, $workerid, $data) );
$server->on("finish", function ($server, $taskid, $data) );
結果:
可見,在開始流程(get something) 到 流程完成(finish it)幾乎不消耗時間!因為那耗時 5 秒的任務投放在 task 中非同步處理!
發現很多所謂的 高效能 都是將程序投遞到其它程序 非同步處理,然後實現監聽處理結果!
Swoole實現非同步投遞task任務案例詳解
使用場景 swolle的task模組可以用來做一些非同步的慢速任務 耗時場景。如webim中發廣播,傳送郵件等,把這些任務丟給task程序之後,worker程序可以繼續處理新的資料請求,任務完成後會非同步通知worker程序告訴它此任務已經完成。此外利用task還可以實現php的資料庫連線池,非同步...
Task用法(2) 任務等待wait
1.wait 用法 預設情況下,task 是有執行緒池中的非同步執行緒執行,是否執行完成,可以通過task的的屬性iscompleted 來判斷,如果想在子執行緒工作完成之後,在進行後續主線程工作可以通過呼叫task.wait 來等待執行緒完成,呼叫wait 後,當前執行緒會被阻塞,直到到子執行緒完...
Kafka 快速起步 作者 杜亦舒
主要內容 1.kafka 安裝 啟動 2.訊息的 生產 消費 3.配置啟動集群 4.集群下的容錯測試 5.從檔案中匯入資料,並匯出到檔案 tar xzf kafka 2.10 0.10.1.1.tgz cd kafka 2.10 0.10.1.1 bin zookeeper server start...