swoole是一個多進(jìn)程模型的框架,當(dāng)啟動一個進(jìn)程swoole應(yīng)用時,一共會創(chuàng)建2+n+m個進(jìn)程,n為worker進(jìn)程數(shù),m為TaskWorker進(jìn)程數(shù),1個master進(jìn)程和一個manager進(jìn)程,關(guān)系如下圖所示
Master進(jìn)程為主進(jìn)程,該進(jìn)程會創(chuàng)建Manager進(jìn)程、Reactor線程等工作進(jìn)/線程。
Worker進(jìn)程作為Swoole的工作進(jìn)程,所有的業(yè)務(wù)邏輯代碼均在此進(jìn)程上運(yùn)行。當(dāng)Reactor線程接收到來自客戶端的數(shù)據(jù)后,會將數(shù)據(jù)打包通過管道發(fā)送給某個Worker進(jìn)程。
swoole中worker/task進(jìn)程都是由Manager進(jìn)程Fork并管理的。
子進(jìn)程結(jié)束運(yùn)行時,manager進(jìn)程負(fù)責(zé)回收此子進(jìn)程,避免成為僵尸進(jìn)程。并創(chuàng)建新的子進(jìn)程
服務(wù)器關(guān)閉時,manager進(jìn)程將發(fā)送信號給所有子進(jìn)程,通知子進(jìn)程關(guān)閉服務(wù)
服務(wù)器reload時,manager進(jìn)程會逐個關(guān)閉/重啟子進(jìn)程
fork():
一個進(jìn)程,包括代碼、數(shù)據(jù)和分配給進(jìn)程的資源。fork()函數(shù)通過系統(tǒng)調(diào)用創(chuàng)建一個與原來進(jìn)程幾乎完全相同的進(jìn)程,也就是兩個進(jìn)程可以做完全相同的事,但如果初始參數(shù)或者傳入的變量不同,兩個進(jìn)程也可以做不同的事。
一個進(jìn)程調(diào)用fork()函數(shù)后,系統(tǒng)先給新的進(jìn)程分配資源,例如存儲數(shù)據(jù)和代碼的空間。然后把原來的進(jìn)程的所有值都復(fù)制到新的新進(jìn)程中,只有少數(shù)值與原來的進(jìn)程的值不同。相當(dāng)于克隆了一個自己。
推薦學(xué)習(xí): swoole教程