常见问题
协程是并行执行的吗?
协程与线程不同,在一个进程内创建的多个协程,实际上是串行的。同一CPU
时间,只有一个协程在执行,因此协程不存在数据同步问题。
协程内可以安全的修改全局变量的值,而不考虑锁的问题。
在协程的执行过程中,调用IO
操作时,会自动让出控制权。这时其他IO
操作完成的协程才会执行。当IO
操作完成后,底层会重新切换会当前的协程。
协程之间如何通信?
可使用SplQueue
或Swoole\Coroutine\Channel
实现协程之间的通信。
协程与线程不同,在一个进程内创建的多个协程,实际上是串行的。同一CPU
时间,只有一个协程在执行,因此协程不存在数据同步问题。
协程内可以安全的修改全局变量的值,而不考虑锁的问题。
在协程的执行过程中,调用IO
操作时,会自动让出控制权。这时其他IO
操作完成的协程才会执行。当IO
操作完成后,底层会重新切换会当前的协程。
可使用SplQueue
或Swoole\Coroutine\Channel
实现协程之间的通信。
websocket服务 现在支持协程么
'gzip', ]); $cli->set([ 'timeout' => 30, 'enable_coroutine' => true, ]); $cli->get('/index.php'); $b = $cli->body; $cli->close(); echo "end". microtime(true)."\n"; return $b; }); } $http = new swoole_http_server("0.0.0.0", 9501); $http->on('request', function ($request, $response) { if($request->server["request_uri"] != "/favicon.ico"){ for($i=0;$iend(""); } $response->end(""); }); $http->start();
index.php
Swoole的协程在底层实现上是单线程的 https://wiki.swoole.com/wiki/page/824.html