示例一:
Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]);
Co\run(function () {
go(function() {
var_dump(file_get_contents("http://www.baidu.com/"));
});
go(function() {
Co\System::sleep(1);
echo "done\n";
});
});
echo 1; //可以執行
示例二:
Co\run(function () {
$server = new Co\Http\Server("127.0.0.1", 9502, false);
$server->handle('/', function ($request, $response) {
$response->end("<h1>Index</h1>");
});
$server->start();
});
echo 1; //不能執行
示例三:
Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]);
go(function() {
// 底層優先執行子協程的代碼
go(function () {
// 子協程掛起,執行上層代碼
Co\System::sleep(3.0);
go(function () {
Co\System::sleep(2.0);
echo "co[3] end\n";
});
echo "co[2] end\n";
});
// 協程掛起,但不需要切換
Co\System::sleep(1.0);
echo "co[1] end\n";
});
/*
co[1] end
co[2] end
co[3] end
*/
示例四:
Co::set(['hook_flags'=> SWOOLE_HOOK_ALL]);
echo "main start\n";
Co\run(function () {
echo "coro " . co::getcid() . " start\n";
// 創建并開始執行子協程
go(function () {
echo "coro " . co::getcid() . " start\n";
// 發生協程調度,回去執行外層協程
Co\System::sleep(.2);
echo "coro " . co::getcid() . " end\n";
});
echo "coro " . co::getcid() . " do not wait children coroutine\n";
// 發生協程調度,但子協程還沒執行完,繼續往下執行
Co\System::sleep(.1);
echo "coro " . co::getcid() . " end\n";
// 外層協程執行完畢,回去執行子協程
});
echo "end\n";
/*
main start
coro 1 start
coro 2 start
coro 1 do not wait children coroutine
coro 1 end
coro 2 end
end
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/6578.html
標籤:PHP
上一篇:[Linux] 查看行程的背景關系切換pidstat
下一篇:Redis集群搭建的三種方式
