大家知道 Swoole 提供了方便于服务器、网络编程的模式,简化了多进程编程。

这直接让 PHP 的运行很容易变成常驻内存的 Server 程序,执行效率上有了数倍的提升。

但是这一切还没有让人足够兴奋,直到协程的完整支持,也就是说,可以随时随地并发了。

swoole-4.2.9 及以上,完整支持了 Go + Chan + Defer 编程模式,给了我们在 PHP 上面不一样的体验。

(协程 Go+Chan+Defer:https://wiki.swoole.com/wiki/page/1019.html

go :创建一个协程
chan :创建一个通道
defer :延迟任务,在协程退出时执行,先进后出

就下面是一段简短的程序,来领略一下什么是随时随的并发:

默认允许创建的最大协程数是 3000,超过会有提示,随后循环 1w 次,

循环中使用 go 创建协程,这就创建了 1w 个协程,运行时占用 350M 左右,CPU 5%左右。

[ 自动开启协程,同步 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: https://www.cnblogs.com/farwish/p/10236757.html

[Sw] Swoole-4.2.9 可以尝试愉快应用 Swoole 协程的更多相关文章

  1. PHP下的异步尝试二:初识协程

    PHP下的异步尝试系列 如果你还不太了解PHP下的生成器,你可以根据下面目录翻阅 PHP下的异步尝试一:初识生成器 PHP下的异步尝试二:初识协程 PHP下的异步尝试三:协程的PHP版thunkify ...

  2. Swoole 实战:MySQL 查询器的实现(协程连接池版)

    目录 需求分析 使用示例 模块设计 UML 类图 入口 事务 连接池 连接 查询器的组装 总结 需求分析 本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器: 支持通过链式调用构造 ...

  3. Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比

    Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...

  4. Swoole 协程与 Go 协程的区别

    Swoole 协程与 Go 协程的区别 进程.线程.协程的概念 进程是什么? 进程就是应用程序的启动实例. 例如:打开一个软件,就是开启了一个进程. 进程拥有代码和打开的文件资源,数据资源,独立的内存 ...

  5. PHP下的异步尝试三:协程的PHP版thunkify自动执行器

    PHP下的异步尝试系列 如果你还不太了解PHP下的生成器和协程,你可以根据下面目录翻阅 PHP下的异步尝试一:初识生成器 PHP下的异步尝试二:初识协程 PHP下的异步尝试三:协程的PHP版thunk ...

  6. swoole深入学习 8. 协程 转

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yangyi2083334/article/ ...

  7. swoole使用协程

    协程:协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换.相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低.Swoole可以为每一个请求创建对应的协程,根据IO的状 ...

  8. 协程与Swoole的原理,相关应用以及适用场景等

    什么是协程 协程(Coroutine)也叫用户态线程,其通过协作而不是抢占来进行切换.相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低.协程是进程的补充,或者是互补关系. 要 ...

  9. [Sw] 使用 Swoole Server task/协程 处理大数据量异步任务时注意

    关于 Buffered Query 和 Unbuffered Query:http://www.php.net/manual/zh/mysqlinfo.concepts.buffering.php 对 ...

随机推荐

  1. 鏈接Redis報錯`AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379]

    問題 鏈接Redis報錯`AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379] 解決 啟動 ...

  2. sql server数据库入门

    create database 学生信息 on primary  //建立在主文件文件组 ( name='学生信息_data', filename='D:\2011上半年度\数据库\sql代码\xue ...

  3. py-day3-6 python map函数

    map函数 :处理序列中的每个元素,得到的结果是一个列表,该列表元素个数及位置与原来一样 ## 求列表里元素的平方 (原始方法) num_1=[1,2,13,5,8,9] res =[] for i ...

  4. BT.656

    转自http://www.cnblogs.com/s_agapo/archive/2012/04/08/2437775.html 凡是做模拟信号采集的,很少不涉及BT.656标准的,因为常见的模拟视频 ...

  5. 转载----五种开源协议(GPL,LGPL,BSD,MIT,Apache)

    原文地址:https://www.oschina.net/question/54100_9455 五种开源协议(GPL,LGPL,BSD,MIT,Apache) 什么是许可协议? 什么是许可,当你为你 ...

  6. 图解Tomcat

  7. 离线手动部署docker镜像仓库——harbor仓库(HTTPS)

    实验环境: harbor服务器系统:CentOS Linux release 7.5.1804 (Core)harbor服务器IP:10.1.12.114harbor版本:v1.5.0docker版本 ...

  8. 【原创】Windows上应用程序报错常用分析方法总结

    在日常使用Windows的过程中,经常会遇到应用程序不能正常启动.关闭等使用问题.对于Windows来说,解决这些问题的方法比较多,大多时候我们可以通过百度或谷歌搜索来解决.但更多的时候,我们需要找出 ...

  9. Tesseract训练

    最近在用Tesseract做一个图片识别的小应用,目标图像只有数字和英文字母,在实际使用过程中发现个别数识别错误,因此不得不研究学习Tesseract的训练. http://www.cnblogs.c ...

  10. windows2008 apache2.4 tomcat-7多域名绑定环境配置

    =====================软件清单Apache2.4.33apache-tomcat-7.0.85===================== 1.安装apache    1.1下载ap ...