[Sw] Swoole-4.2.9 可以尝试愉快应用 Swoole 协程
大家知道 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 协程的更多相关文章
- PHP下的异步尝试二:初识协程
PHP下的异步尝试系列 如果你还不太了解PHP下的生成器,你可以根据下面目录翻阅 PHP下的异步尝试一:初识生成器 PHP下的异步尝试二:初识协程 PHP下的异步尝试三:协程的PHP版thunkify ...
- Swoole 实战:MySQL 查询器的实现(协程连接池版)
目录 需求分析 使用示例 模块设计 UML 类图 入口 事务 连接池 连接 查询器的组装 总结 需求分析 本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器: 支持通过链式调用构造 ...
- Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...
- Swoole 协程与 Go 协程的区别
Swoole 协程与 Go 协程的区别 进程.线程.协程的概念 进程是什么? 进程就是应用程序的启动实例. 例如:打开一个软件,就是开启了一个进程. 进程拥有代码和打开的文件资源,数据资源,独立的内存 ...
- PHP下的异步尝试三:协程的PHP版thunkify自动执行器
PHP下的异步尝试系列 如果你还不太了解PHP下的生成器和协程,你可以根据下面目录翻阅 PHP下的异步尝试一:初识生成器 PHP下的异步尝试二:初识协程 PHP下的异步尝试三:协程的PHP版thunk ...
- swoole深入学习 8. 协程 转
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yangyi2083334/article/ ...
- swoole使用协程
协程:协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换.相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低.Swoole可以为每一个请求创建对应的协程,根据IO的状 ...
- 协程与Swoole的原理,相关应用以及适用场景等
什么是协程 协程(Coroutine)也叫用户态线程,其通过协作而不是抢占来进行切换.相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低.协程是进程的补充,或者是互补关系. 要 ...
- [Sw] 使用 Swoole Server task/协程 处理大数据量异步任务时注意
关于 Buffered Query 和 Unbuffered Query:http://www.php.net/manual/zh/mysqlinfo.concepts.buffering.php 对 ...
随机推荐
- Networked Graphics: Building Networked Games and Virtual Environments (Anthony Steed / Manuel Fradinho Oliveira 著)
PART I GROUNDWORK CHAPTER 1 Introduction CHAPTER 2 One on One (101) CHAPTER 3 Overview of the Intern ...
- 使用korofileheader插件vs code添加文件头注释和函数注释
korofileheadervs code添加文件头注释和函数注释1.extensions搜索fileheader,安装koroFileHeader2.设置:edit=>perference=& ...
- C# winform使用combobox遍历文件夹内所有文件
参考:https://www.cnblogs.com/hxh88/p/5814291.html 相关函数解析: 1.指定目录包含的文件和子目录 DirectoryInfo.GetFiles():获取目 ...
- ES6模板字符串【${}配合反单引号一起用】
先看看JavaScript中两个字符串的效果,就很容易知道模板字符串是个啥东西,其实一点也不新鲜.高级编程中,例如java里面的string.format就是干这个事情,诸如此类. 1. 概念理解 A ...
- Centos6两个镜像文件的合并方法
1.相关目录: /mnt/dvd1和/mnt/dvd2 用于挂载 Centos 镜像 /mnt/dvd3 合并后的镜像文件 /mnt/iso ISO储存 mkdir -p /mnt/dvd1 /mnt ...
- linux中脚本在任意目录执行
完成了一个脚本,find.sh 如果希望可以再linux系统中任何位置都可以执行该脚本,可以执行下面操作 1. chmod 775 find.sh 给该脚本增加可执行权限 2. export PATH ...
- C语言volatile关键字的用法
volatile关键字的意义在于让被关键字修饰的变量每次使用时都重新去主内存里读取变量,而不是从高速缓存去读取. int a = 1; 普通变量定义之后,若要使用它,都会 先把它的值从主内存拷贝到高速 ...
- C# Json 和对象的相互转换
Json 和对象的相互转换 /// <summary> /// Json 和对象的相互转换 ——需引用using Newtonsoft.Json; 即:Jsonnet.net..... / ...
- centos7安装nginx,以及使用node测试反向代理
1.添加nginx的安装源 vi /etc/yum.repos.d/nginx.repo 2.输入下面内容,并保存退出 [nginx] name=nginx repo baseurl=http://n ...
- 【算法习题】数组中任意2个(3个)数的和为sum的组合
题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...