php框架性能測(cè)試PHP編寫(xiě)投遞任務(wù)實(shí)現(xiàn)原理和常見(jiàn)的異步任務(wù)處理任務(wù) php框架性能對(duì)比
2023-01-18
異步任務(wù)
實(shí)現(xiàn)原理
我們知道PHP本身就是設(shè)計(jì)成同步阻塞的,不支持多線程和異步IO,所以當(dāng)我們進(jìn)行一些耗時(shí)的操作時(shí),比如發(fā)送廣播或者郵件,如果直接在當(dāng)前進(jìn)程中操作小程序開(kāi)發(fā),服務(wù)器響應(yīng)會(huì)改變。 慢,所以需要借助一些第三方服務(wù)來(lái)處理,實(shí)現(xiàn)異步功能php框架性能測(cè)試,比如隊(duì)列。 作為PHP異步網(wǎng)絡(luò)通信引擎,自然也提供了對(duì)異步任務(wù)處理的支持。 底層實(shí)現(xiàn)原理類似于常見(jiàn)的異步隊(duì)列:將耗時(shí)任務(wù)投遞到進(jìn)程池php框架性能測(cè)試,然后返回(對(duì)應(yīng)的任務(wù)會(huì)異步執(zhí)行,執(zhí)行成功后可以調(diào)用預(yù)先注冊(cè)的回調(diào)函數(shù)進(jìn)行后續(xù)處理) ,后續(xù)業(yè)務(wù)邏輯會(huì)繼續(xù)執(zhí)行,不會(huì)影響當(dāng)前請(qǐng)求的處理速度。 后面介紹底層原理的時(shí)候會(huì)詳細(xì)介紹。
示例代碼
我們可以基于入門(mén)教程中寫(xiě)的TCP服務(wù)器實(shí)現(xiàn)一個(gè)異步任務(wù)服務(wù)器來(lái)處理異步任務(wù)。 我們只需要添加一個(gè)任務(wù)處理和一個(gè)任務(wù)完成回調(diào)即可。 此外,我們還需要配置進(jìn)程數(shù)來(lái)保證任務(wù)的處理。 速度,它的值可以根據(jù)任務(wù)的耗時(shí)和任務(wù)量來(lái)配置,通常我們可以配置成CPU數(shù)量的兩倍:
我們將此文件保存為 .php 并從命令行啟動(dòng)服務(wù)器:
接下來(lái),啟動(dòng) TCP 客戶端:
服務(wù)端下發(fā)任務(wù)后,會(huì)立即向客戶端發(fā)送處理信息:
服務(wù)器然后異步處理任務(wù):
實(shí)現(xiàn)一個(gè)基于異步任務(wù)隊(duì)列
還是基于擴(kuò)展包,我們?cè)陧?xiàng)目中實(shí)現(xiàn)了異步任務(wù)隊(duì)列功能。 原理就是上面說(shuō)的異步任務(wù),只是擴(kuò)展包對(duì)它進(jìn)行了封裝。
編寫(xiě)任務(wù)類
首先我們創(chuàng)建一個(gè)掛起的任務(wù)類小程序開(kāi)發(fā),它繼承自\\\Task\Task基類:
編寫(xiě)測(cè)試代碼
然后在/web.php中編寫(xiě)下發(fā)異步任務(wù)的測(cè)試代碼如下:
修改配置文件
另外取消配置文件/.php中配置項(xiàng)前面的注釋:
測(cè)試異步任務(wù)執(zhí)行
接下來(lái)我們重啟服務(wù)器(根據(jù)HTTP服務(wù)器訪問(wèn)路由成功下發(fā)異步任務(wù)):
然后在瀏覽器中訪問(wèn)路由進(jìn)行測(cè)試,頁(yè)面立即顯示投遞成功:
然后我們?nèi)?logs目錄查看最新的日志信息,可以看到任務(wù)執(zhí)行實(shí)際耗時(shí)3秒:
這樣,我們就成功實(shí)現(xiàn)了項(xiàng)目中的異步任務(wù)消費(fèi)隊(duì)列。