App下載
話題 首頁(yè) > Swoole 教程 > Swoole 教程話題列表 > 詳情

Reactor、Worker、Task的關(guān)系是如何區(qū)分的?

精華
路飛 2016-12-12 15:33:06 瀏覽(4117) 回復(fù)(6) 贊(1)
在Swoole中 Reactor、Worker、Task的關(guān)系是如何分工的?
swoole

回答(6)

路飛 2016-12-12

Reactor、Worker、Task三種角色分別的職責(zé)是:

Reactor線程

  • 負(fù)責(zé)維護(hù)客戶端機(jī)器的TCP連接、處理網(wǎng)絡(luò)IO、收發(fā)數(shù)據(jù)
  • 完全是異步非阻塞的模式
  • 全部為C代碼,除Start/Shudown事件回調(diào)外,不執(zhí)行任何PHP代碼
  • 將TCP客戶端發(fā)來(lái)的數(shù)據(jù)緩沖、拼接、拆分成完整的一個(gè)請(qǐng)求數(shù)據(jù)包
  • Reactor以多線程的方式運(yùn)行

Worker進(jìn)程

  • 接受由Reactor線程投遞的請(qǐng)求數(shù)據(jù)包,并執(zhí)行PHP回調(diào)函數(shù)處理數(shù)據(jù)
  • 生成響應(yīng)數(shù)據(jù)并發(fā)給Reactor線程,由Reactor線程發(fā)送給TCP客戶端
  • 可以是異步非阻塞模式,也可以是同步阻塞模式
  • Worker以多進(jìn)程的方式運(yùn)行

Task進(jìn)程

  • 接受由Worker進(jìn)程通過(guò)swoole_server->task/taskwait方法投遞的任務(wù)
  • 處理任務(wù),并將結(jié)果數(shù)據(jù)返回給Worker進(jìn)程
  • 完全是同步阻塞模式
  • Task以多進(jìn)程的方式運(yùn)行

關(guān)系

可以理解為reactor就是nginx,worker就是php-fpm。reactor線程異步并行地處理網(wǎng)絡(luò)請(qǐng)求,然后再轉(zhuǎn)發(fā)給worker進(jìn)程中去處理。reactor和worker間通過(guò)IPC方式通信。swoole的reactor,worker,task_worker之間可以緊密的結(jié)合起來(lái),提供更高級(jí)的使用方式。一個(gè)更通俗的比喻,假設(shè)Server就是一個(gè)工廠,那reactor就是銷售,幫你接項(xiàng)目訂單。而worker就是工人,當(dāng)銷售接到訂單后,worker去工作生產(chǎn)出客戶要的東西。而task_worker可以理解為行政人員,可以幫助worker干些雜事,讓worker專心工作。

底層會(huì)為Worker進(jìn)程、Task進(jìn)程分配一個(gè)唯一的ID
不同的task/worker進(jìn)程之間可以通過(guò)sendMessage接口進(jìn)行通信

Silence廣 2018-01-20

可以理解為reactor就是nginx,worker就是php-fpm。reactor線程異步并行地處理網(wǎng)絡(luò)請(qǐng)求,然后再轉(zhuǎn)發(fā)給worker進(jìn)程中去處理。reactor和worker間通過(guò)IPC方式通信。swoole的reactor,worker,task_worker之間可以緊密的結(jié)合起來(lái),提供更高級(jí)的使用方式。一個(gè)更通俗的比喻,假設(shè)Server就是一個(gè)工廠,那reactor就是銷售,幫你接項(xiàng)目訂單。而worker就是工人,當(dāng)銷售接到訂單后,worker去工作生產(chǎn)出客戶要的東西。而task_worker可以理解為行政人員,可以幫助worker干些雜事,讓worker專心工作。

一筆荒蕪 2018-05-31

剛學(xué)習(xí)程序,過(guò)來(lái)學(xué)習(xí)學(xué)習(xí)!!!!...

1144100656 2018-05-31

留名留名!!!,同樣的問(wèn)題,看看咋結(jié)局!!!

1152696398 2018-05-31

有同樣等問(wèn)題咋解決,只能慢慢等大神啦.留名留名。。

要回復(fù),請(qǐng)先登錄 或者注冊(cè)