webman和swow都是最新版,環(huán)境linux,使用下面代碼查詢數(shù)據(jù)庫并返回結(jié)果后,退出webman就會報警告:
public function index(): Response
{
$value = \think\facade\Db::query('SELECT NOW() as now, sleep(5)'); //模擬慢查詢
return json($value); // [{"now":"2025-02-06 23:41:03","0":"2025-02-06 23:41:03"}]
}
PHP Warning: Event loop close failed, reason: Resource busy or locked in Unknown on line 0
Warning: Event loop close failed, reason: Resource busy or locked in Unknown on line 0
[--I] signal 0x7f37ea21ec50
[-AI] async 0x7f37ea21ea90
[R--] tcp 0x7f37f3512d08
zend_mm_heap corrupted
worker[webman:23245] exit with status 6
如果不使用Db查詢就不會有警告,請問我是否哪里理解有錯呢?
你的查詢一直沒返回,退出webman時這個協(xié)程無法正常關(guān)閉,給個Warning不過分吧。
剛又測試了下,發(fā)現(xiàn)使用 \think\facade\Db::query 就會出現(xiàn)警告,如果用PDO:
(new \PDO('mysql:host=127.0.0.1;dbname=xxx', 'xxx', 'xxx'))->query('SELECT NOW() as now, sleep(5)')->fetchAll();
就不會有警告,是不是ThinkORM內(nèi)部有什么資源沒釋放。。
感覺swow也有問題,每次start都會有報錯:
A bug occurred in swow-v1.5.3, please report it.
The swow developers probably don't know about it,
and unless you report it, chances are it won't be fixed.
You can report it by creating a bug report issue on following page:
測試了ubuntu debian 和wsl 都未出現(xiàn)你描述的錯誤。
think-orm項目都這么久了很多人在用基本上不會遇到什么bug。
swow在你的環(huán)境報bug不用就可以了。
協(xié)程也不是只有swow,webman同時支持swoole、swow和Fiber協(xié)程,非要用可以使用swoole或Fiber。
不是所有項目都需要協(xié)程,也不是所有開發(fā)者能駕馭協(xié)程,協(xié)程只是個可選項,只有在實在需要時去使用它,例如要curl大量外網(wǎng)接口時。其它情況使用非協(xié)程極限性能和穩(wěn)定性是最好的。
感謝老大的詳細(xì)回復(fù),我用的是CentOS,swow是自己編譯的最新版1.5.3,準(zhǔn)備再試試swoole看看效果。另外我平時喜歡研究框架,總搞一些不常用的操作,所以容易發(fā)現(xiàn)一些bug,望老大不要見怪^^