今天測試了一下協(xié)程效果,把依賴都更新為最新版(workerman/webman-framework ^2.1、webman/database:~2.1、webman/think-orm:~2.1),然后修改process.php的'eventLoop' => Workerman\Events\Fiber::class,環(huán)境是windows,測試代碼:
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"}]
}
這里用sleep模擬了慢查詢,按原想法應(yīng)該:開啟了協(xié)程,單進(jìn)程遇IO阻塞也可以同時處理多個請求,但實際測試執(zhí)行到這里阻塞時,其他請求也是阻塞的(哪怕什么都不處理),不知是我對協(xié)程理解的有問題還是代碼的問題呢?
仔細(xì)看下文檔;官方文檔的解釋
嗯,這個我看了,而且官方文檔里說:
webman v2.1 已經(jīng)提供了以下組件,它們都集成了連接池,支持在協(xié)程和非協(xié)程環(huán)境下使用
webman/database (Laravel系)
webman/redis (Laravel系)
webman/cache (Laravel系)
webman/think-orm (ThinkPHP系)
webman/think-cache (ThinkPHP系)
我以為這些都已經(jīng)適配好了各協(xié)程驅(qū)動,難道只能Swoole和Swow使用IO協(xié)程么?那Fiber只能使用Timer定時器這些有限的協(xié)程功能?請賜教~