如題。為什么在用戶層調(diào)用PHP的sleep函數(shù)不會(huì)被swoole理解為阻塞?而是要調(diào)用swoole自己的co::sleep()?
2 回答

湖上湖
TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
因?yàn)閟leep是PHP實(shí)現(xiàn)的函數(shù),swoole無(wú)法檢測(cè)到用戶調(diào)用了這個(gè)函數(shù),因此無(wú)法讓當(dāng)前執(zhí)行的協(xié)程讓出調(diào)度權(quán)。
這個(gè)跟golang不一樣。golang在編譯器上實(shí)現(xiàn)了函數(shù)調(diào)用時(shí)是否阻塞的來(lái)實(shí)現(xiàn)讓出調(diào)度權(quán)。swoole本質(zhì)上還是PHP的擴(kuò)展,實(shí)際代碼的解析和編譯還是PHP內(nèi)核來(lái)實(shí)現(xiàn)。
類似的還有文件讀寫,系統(tǒng)調(diào)用等,都需要自己去實(shí)現(xiàn)讓出調(diào)度權(quán)的邏輯判斷函數(shù),否則也是阻塞worker進(jìn)程的。
- 2 回答
- 0 關(guān)注
- 1195 瀏覽
添加回答
舉報(bào)
0/150
提交
取消