Task 進(jìn)程是swoole當(dāng)中獨立于worker進(jìn)程的一個工作進(jìn)程,用于處理一些耗時較長的邏輯。這些邏輯在處理的過程中,并不會影響到task進(jìn)程處理來自客戶端的請求,因此大大提高了系統(tǒng)并發(fā)的能力。
兩個進(jìn)程之間的關(guān)系如圖:
\1.PNG
Task進(jìn)程和worker進(jìn)程間通過Unix Sock管道進(jìn)行通信(也可配置通過消息隊列進(jìn)行通信),task的消息傳遞只能傳遞字符串。
Task常見問題:
1、task傳遞數(shù)據(jù)大小
數(shù)據(jù)小于8K,直接通過管道傳遞;數(shù)據(jù)大于8K,寫入臨時文件傳遞
2、task傳遞對象
可以通過序列化傳遞一個對象的拷貝
task進(jìn)程中對對象的改變不會反映到worker進(jìn)程中
數(shù)據(jù)庫連接,網(wǎng)絡(luò)連接對象不可傳遞
3、task的onFinish回調(diào)
task的onFinish回調(diào)會發(fā)回回調(diào)task方法的worker進(jìn)程(就是只會返回給投遞者的進(jìn)程)