參考自: https://linkeddestiny.gitbooks.io/easy-swoole/content/book/chapter02/worker.html
Swoole進(jìn)程模型
首先十办,我們需要了解一下Swoole的進(jìn)程模型辞友。Swoole是一個(gè)多進(jìn)程模式的框架(可以類比Nginx的進(jìn)程模型)旧困,當(dāng)啟動(dòng)一個(gè)Swoole應(yīng)用時(shí),一共會(huì)創(chuàng)建2 + n + m個(gè)進(jìn)程狈定,其中n為Worker進(jìn)程數(shù)碘勉,m為TaskWorker進(jìn)程數(shù)漆羔,2為一個(gè)Master進(jìn)程和一個(gè)Manager進(jìn)程婆芦,它們之間的關(guān)系如下圖所示。其中穆刻,Master進(jìn)程為主進(jìn)程置尔,該進(jìn)程會(huì)創(chuàng)建Manager進(jìn)程、Reactor線程等工作進(jìn)/線程氢伟。
- Reactor線程實(shí)際運(yùn)行epoll實(shí)例榜轿,用于accept客戶端連接以及接收客戶端數(shù)據(jù);
- Manager進(jìn)程為管理進(jìn)程朵锣,該進(jìn)程的作用是創(chuàng)建谬盐、管理所有的Worker進(jìn)程和TaskWorker進(jìn)程。
Worker進(jìn)程簡介
Worker進(jìn)程作為Swoole的工作進(jìn)程诚些,所有的業(yè)務(wù)邏輯代碼均在此進(jìn)程上運(yùn)行飞傀。當(dāng)Reactor線程接收到來自客戶端的數(shù)據(jù)后,會(huì)將數(shù)據(jù)打包通過管道發(fā)送給某個(gè)Worker進(jìn)程
Worker進(jìn)程生命周期
一個(gè)Worker進(jìn)程的生命周期如圖所示:
當(dāng)一個(gè)Worker進(jìn)程被成功創(chuàng)建后诬烹,會(huì)調(diào)用onWorkerStart回調(diào)砸烦,隨后進(jìn)入事件循環(huán)等待數(shù)據(jù)。當(dāng)通過回調(diào)函數(shù)接收到數(shù)據(jù)后绞吁,開始處理數(shù)據(jù)幢痘。如果處理數(shù)據(jù)過程中出現(xiàn)嚴(yán)重錯(cuò)誤導(dǎo)致進(jìn)程退出,或者Worker進(jìn)程處理的總請求數(shù)達(dá)到指定上限家破,則Worker進(jìn)程調(diào)用onWorkerStop回調(diào)并結(jié)束進(jìn)程颜说。