[Sw] Swoole-4.2.9 能够尝试愉快应用 Swoole 协程

 

你们知道 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( ) 建立:

  • onWorkerStart
  • onConnect
  • onOpen
  • onReceive
  • redis_onReceive
  • onPacket
  • onRequest
  • onMessage
  • onPipeMessage
  • onClose
  • tick/after 定时器

(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.

Link: http://www.javashuo.com/article/p-eptgcgbu-x.html

相关文章
相关标签/搜索