大家知道 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. haproxy反向代理

    haproxy是个高性能的tcp和http的反向代理.它就是个代理.不像nginx还做web服务器 官网地址为www.haproxy.org nginx的优点和缺点 优点: 1.web服务器,应用比较 ...

  2. 第七届蓝桥杯省赛javaB组 第七题剪邮票

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...

  3. Day14全局变量与局部变量

    列表的所有方法都可以用,如remove  clear 为了避免容易出错,全局变量名用大写,局部变量名用小写  nonlocal指上一级的name

  4. Internet Explorer 安全区域注册表项说明

    引用网址:http://support.microsoft.com/kb/182569/zh-cnInternet Explorer 安全区域设置存储在以下注册表子项下面: HKEY_LOCAL_MA ...

  5. 爬虫-day02-抓取和分析

    ###页面抓取### 1.urllib3     是一个功能强大且好用的HTTP客户端,弥补了Python标准库中的不足     安装: pip install urllib3     使用: imp ...

  6. Windows7环境下Excel2010中图片超链接默认打开程序修改

    在Windows7的环境下,打开Excel2010超链接图片,都是默认用IE打开.搜索了所有的中文网络,没有找到解决方案,且发现受此困扰的人不少.后来用纯英文搜索,终于找到解决方案并尝试成功. 1,操 ...

  7. CSS的块级元素和内联元素的概念

    三生有幸,偶然之下知道了<CSS世界>这本书,让我产生了探究 CSS 的想法. 这里对 CSS 中的块级元素和内联元素的概念做一个简单的整理. 可能对于我们前端开发人员来讲,一般接触到的元 ...

  8. python3学习笔记十(循环语句)

    参考http://www.runoob.com/python3/python3-loop.html 循环语句 while循环 # !/usr/bin/env python3 n = 100 sum = ...

  9. 使用R的注意事项

    换源,将源切换到中国 具体方法是: options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/&qu ...

  10. vim替换的两种方式

    最近操作一个超过30MB的一个文本文件,常用的编辑器打开就死.最后使用Vim,一路非常顺畅.不愧是久经历史考验的编辑器. 如何在Vim中将空格更换为\t 这个使用\s功能.具体命令为:\s\ \/t/ ...