你们知道 Swoole 提供了方便于服务器、网络编程的模式,简化了多进程编程。php
这直接让 PHP 的运行很容易变成常驻内存的 Server 程序,执行效率上有了数倍的提高。html
可是这一切尚未让人足够兴奋,直到协程的完整支持,也就是说,能够随时随地并发了。mysql
swoole-4.2.9 及以上,完整支持了 Go + Chan + Defer 编程模式,给了咱们在 PHP 上面不同的体验。redis
(协程 Go+Chan+Defer:https://wiki.swoole.com/wiki/page/1019.html) sql
go :建立一个协程
chan :建立一个通道
defer :延迟任务,在协程退出时执行,先进后出
就下面是一段简短的程序,来领略一下什么是随时随的并发:编程
默认容许建立的最大协程数是 3000,超过会有提示,随后循环 1w 次,服务器
循环中使用 go 建立协程,这就建立了 1w 个协程,运行时占用 350M 左右,CPU 5%左右。swoole
[ 自动开启协程,同步 IO 切换为异步 IO ]网络
经过 `php --ri swoole` 查看拓展的一些配置项,enable_coroutine 是默认开启的。并发
下面这些回调中会自动建立协程,不须要使用 Coroutine::create( ) 或者 go( ) 建立:
(enable_coroutine:https://wiki.swoole.com/wiki/page/949.html)
Swoole\Runtime::enableCoroutine( ) 做用是将 PHP 提供的 stream、sleep、pdo、mysqli、redis 等功能从同步阻塞切换为协程的异步 IO。
这样在 go( ) 中的一些函数不必定要使用协程客户端了, 好比能够用 sleep 替代 co::sleep( ) 、PDO 代替 Coroutine\MySQL。
(Runtime:https://wiki.swoole.com/wiki/page/965.html)
若是想要顺利的使用协程编程,咱们可能还须要 WaitGroup 功能,将极大方便 Swoole 协程编程。
- 扩充资料 -
协程编程须知:https://wiki.swoole.com/wiki/page/851.html
协程并发调用:https://wiki.swoole.com/wiki/page/p-coroutine_multi_call.html
MySQL链接池与断线重连:https://wiki.swoole.com/wiki/page/350.html
Happy coding.