swoole 协程channel乱测
channel和数组差不多,可以被用作队列,属性capacity是设置容量,isEmpty() isFull() 用来判断队列是空还是满,push()加入队列 pop()弹出队列
interface pusher
{
function push($data);
}
#require 'redisconn.php';
class mypusher implements pusher
{
protected $mychannel;
protected $size=;
public function __construct()
{
$this->mychannel = new Swoole\Coroutine\Channel();
$this->mylen = $this->mychannel->length();
echo "容量".$this->mychannel->capacity.PHP_EOL;
} public function push($data)
{
if ($this->mychannel->isFull())
{
return ;
}
else{
//发送通知
$this->mychannel->push($data);
echo "当前元素个数".$this->mychannel->length();
return ;
}
} public function pop()
{
if($this->mychannel->isEmpty())
{
return ;
}
else
{
echo "当前元素个数".$this->mychannel->length().PHP_EOL;
var_dump($this->mychannel->pop());
echo PHP_EOL."还剩元素个数".$this->mychannel->length().PHP_EOL;
return ;
}
}
}
go(function (){
$thispusher = new mypusher();
$thispusher->push(['name'=>'cj','age'=>]);
$thispusher->push(['name'=>'cpc','age'=>]);
$thispusher->push(['name'=>'xxd','age'=>]);
$thispusher->pop();
$thispusher->pop();
$thispusher->pop(); });
测试结果:
容量10
当前元素个数1当前元素个数2当前元素个数3当前元素个数3
array() {
["name"]=>
string() "cj"
["age"]=>
int()
} 还剩元素个数2
当前元素个数2
array() {
["name"]=>
string() "cpc"
["age"]=>
int()
} 还剩元素个数1
当前元素个数1
array() {
["name"]=>
string() "xxd"
["age"]=>
int()
} 还剩元素个数0
- 实现一个redis连接池
class redispool
{
protected $mypool;
public function __construct($size)
{
$this->mypool = new Swoole\Coroutine\Channel($size);
for ($i=;$i<$size;$i++)
{
$redis = new Swoole\Coroutine\Redis();
$redis->setOptions(['compatibility_mode' => true]);
$rconn = $redis->connect('127.0.0.1',);
if ($rconn == false)
{
throw new \http\Exception\RuntimeException('Damn~ fail to connet redis-server');
}
else{
$this->mypool->push($redis);
}
}
} public function push($redis)
{
$this->mypool->push($redis);
}
public function pop()
{
return $this->mypool->pop();
}
}
swoole 协程channel乱测的更多相关文章
- swoole协程通道channel
swoole 协程通道 为了协程直接互相通讯传递数据 和go的通道很相似 Co\run(function(){ $chan = new Swoole\Coroutine\Channel(1); Swo ...
- [Sw] Swoole-4.2.9 可以尝试愉快应用 Swoole 协程
大家知道 Swoole 提供了方便于服务器.网络编程的模式,简化了多进程编程. 这直接让 PHP 的运行很容易变成常驻内存的 Server 程序,执行效率上有了数倍的提升. 但是这一切还没有让人足够兴 ...
- Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...
- Swoole 协程与 Go 协程的区别
Swoole 协程与 Go 协程的区别 进程.线程.协程的概念 进程是什么? 进程就是应用程序的启动实例. 例如:打开一个软件,就是开启了一个进程. 进程拥有代码和打开的文件资源,数据资源,独立的内存 ...
- Swoole协程与传统fpm同步模式比较
如果说数组是 PHP 的精髓,数组玩得不6的,根本不能算是会用PHP.那协程对于 Swoole 也是同理,不理解协程去用 Swoole,那就是在瞎用. 首先,Swoole 只能运行在命令行(Cli)模 ...
- swoole| swoole 协程初体验 转
swoole| swoole 协程初体验 date: 2018-5-30 14:31:38title: swoole| swoole 协程初体验description: 通过协程的执行初窥 swo ...
- swoole 协程介绍
协程的执行顺序: 1 2 3 4 5 6 7 8 9 go(function () { echo "hello go1 \n"; }); echo "hell ...
- Swoole 协程的并发调用及使用示例
示例一: 利用通道pop会自动挂起当前协程,等待生产者推送数据的特性,实现并发调用,并在协程完成后组合结果集. $serv = new Swoole\Http\Server("127.0.0 ...
- Swoole 协程简介
什么是协程 协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建.销毁和切换的成本都非常低. 协程不能利用多核 cpu,想利用多核 cpu 需要依赖 Swoole 的多进程模型. ...
随机推荐
- openat与open的区别及用法示例
从2.6.16版本开始,GNU/Linux引入opeant系统调用: #define _XOPEN_SOURCE 700 /* Or define _POSIX_C_SOURCE >= 2008 ...
- Flask Bug记录之JinJa2.exceptions.UndefinedError: 'sqlite3.Row object' has no attribute 'get'
源码 py文件定义db的工厂函数如下 def get_db(): if "db" not in g: g.db = sqlite3.connect( current_app.con ...
- 【AtCoder】AGC002
AGC002 A - Range Product #include <bits/stdc++.h> #define fi first #define se second #define p ...
- Idea 快捷生成方法(待完善)
1.System.out.println() 输入sout,按下enter键,生成System.out.println()方法. sout--->soutv=System.out.println ...
- JavaScript数组方法之reduce
又见到数组方法了,在前面已经的多次写到过数组方法,甚至都使用原生方法重构了一遍数组的各个方法,可是随着数组方法reduce的应用,发现reduce真的是妙用无穷啊!还是很值得再拿出来说一遍的. 我们再 ...
- idea插件,配置
1.插件 2.配置 1.去除double shift 全局搜索的功能,反正不符合我的习惯 Help -> Find Action 搜索 registry ,勾选 double.click.ha ...
- java关键知识汇总
1.泛型理解 2.java或Java框架中常用的注解及其作用详解 3.三层架构和MVC的区别 4.jdk1.8手册(提取码:bidm) 5.Rocketmq原理&最佳实践 6.spring入门 ...
- sql游标循环
DECLARE @begindate DATETIME=CONVERT(DATETIME, '2019.05.06 09:40:50') ,@enddate DATETIME =GETDATE() , ...
- SPOJ-MobileService--线性DP
题目链接 https://www.luogu.org/problemnew/show/SP703 方法一 分析 很显然可以用一个四维的状态\(f[n][a][b][c]\)表示完成第i个任务时且三人 ...
- 关于一些JS的运算符
首先呢,什么是JavaScript:JavaScript是一种脚本语言,也是一种解释型语言,更是一种由数据值决定变量类型的弱类型语言 JavaScript主要由三部分组成 ECMAScript 这个 ...