1骇陈、Task傳遞數(shù)據(jù)的大小數(shù)據(jù)小于8k直接通過管道傳遞,數(shù)據(jù)大于8k寫入臨時文件傳遞onTask會讀取這個文件,把他讀出來
運行Task,必須要在swoole服務中配置參數(shù)task_worker_num,此外,必須給swoole_server綁定兩個回調(diào)函數(shù):onTask和onFinish魏身。?onTask要return 數(shù)據(jù)?
2肛炮、Task傳遞對象默認task只能傳遞數(shù)據(jù)止吐,可以通過序列化傳遞一個對象的拷貝,Task中對象的改變并不會反映到worker進程中數(shù)據(jù)庫連接,網(wǎng)絡連接對象不可傳遞,會引起php報錯
3、Task的onFinish回調(diào)Task的onFinish回調(diào)會回調(diào)調(diào)用task方法的worker進程
4侨糟、task_max_request?設置task進程的最大任務數(shù)碍扔。一個task進程在處理完超過此數(shù)值的任務后將自動退出。這個參數(shù)是為了防止PHP進程內(nèi)存溢出粟害。如果不希望進程自動退出可以設置為0
5蕴忆、每個woker都有可能投遞任務給不同的task_worker處理, 不同的woker進程內(nèi)存隔離,記錄著worker_id, 標識woker進程任務處理數(shù)量
6、task怎么使用悲幅?
Task進程其實是要在worker進程內(nèi)發(fā)起的套鹅,即我們把需要投遞的任務,通過worker進程投遞到task進程中去處理汰具。
怎么操作呢卓鹿?我們可以利用swoole_server->task函數(shù)把任務數(shù)據(jù)投遞到task進程池中。
swoole_server->task函數(shù)是非阻塞函數(shù)留荔,任務投遞到task進程中后會立即返回吟孙,即不管任務需要在task進程內(nèi)處理多久,worker進程也不需要任何的等待聚蝶,不會影響到worker進程的其他操作杰妓。但是task進程內(nèi)卻是阻塞的,如果當前task進程都處于繁忙狀態(tài)即都在處理任務碘勉,你又投遞過來更多任務涣旨,這個時候新投遞的任務就只能乖乖的排隊等task進程空閑才能繼續(xù)處理黑滴。
如果投遞的任務量總是大于task進程的處理能力,建議適當?shù)恼{(diào)大task_worker_num的數(shù)量嘉栓,增加task進程數(shù),不然一旦task塞滿緩沖區(qū),就會導致worker進程阻塞,所以需要使用好task前期必須有所規(guī)劃