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乱测的更多相关文章

  1. swoole协程通道channel

    swoole 协程通道 为了协程直接互相通讯传递数据 和go的通道很相似 Co\run(function(){ $chan = new Swoole\Coroutine\Channel(1); Swo ...

  2. [Sw] Swoole-4.2.9 可以尝试愉快应用 Swoole 协程

    大家知道 Swoole 提供了方便于服务器.网络编程的模式,简化了多进程编程. 这直接让 PHP 的运行很容易变成常驻内存的 Server 程序,执行效率上有了数倍的提升. 但是这一切还没有让人足够兴 ...

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

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

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

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

  5. Swoole协程与传统fpm同步模式比较

    如果说数组是 PHP 的精髓,数组玩得不6的,根本不能算是会用PHP.那协程对于 Swoole 也是同理,不理解协程去用 Swoole,那就是在瞎用. 首先,Swoole 只能运行在命令行(Cli)模 ...

  6. swoole| swoole 协程初体验 转

    swoole| swoole 协程初体验   date: 2018-5-30 14:31:38title: swoole| swoole 协程初体验description: 通过协程的执行初窥 swo ...

  7. swoole 协程介绍

    协程的执行顺序: 1 2 3 4 5 6 7 8 9 go(function () {     echo "hello go1 \n"; });   echo "hell ...

  8. Swoole 协程的并发调用及使用示例

    示例一: 利用通道pop会自动挂起当前协程,等待生产者推送数据的特性,实现并发调用,并在协程完成后组合结果集. $serv = new Swoole\Http\Server("127.0.0 ...

  9. Swoole 协程简介

    什么是协程 协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建.销毁和切换的成本都非常低. 协程不能利用多核 cpu,想利用多核 cpu 需要依赖 Swoole 的多进程模型. ...

随机推荐

  1. openat与open的区别及用法示例

    从2.6.16版本开始,GNU/Linux引入opeant系统调用: #define _XOPEN_SOURCE 700 /* Or define _POSIX_C_SOURCE >= 2008 ...

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

  3. 【AtCoder】AGC002

    AGC002 A - Range Product #include <bits/stdc++.h> #define fi first #define se second #define p ...

  4. Idea 快捷生成方法(待完善)

    1.System.out.println() 输入sout,按下enter键,生成System.out.println()方法. sout--->soutv=System.out.println ...

  5. JavaScript数组方法之reduce

    又见到数组方法了,在前面已经的多次写到过数组方法,甚至都使用原生方法重构了一遍数组的各个方法,可是随着数组方法reduce的应用,发现reduce真的是妙用无穷啊!还是很值得再拿出来说一遍的. 我们再 ...

  6. idea插件,配置

    1.插件 2.配置 1.去除double shift 全局搜索的功能,反正不符合我的习惯 Help -> Find Action  搜索 registry ,勾选 double.click.ha ...

  7. java关键知识汇总

    1.泛型理解 2.java或Java框架中常用的注解及其作用详解 3.三层架构和MVC的区别 4.jdk1.8手册(提取码:bidm) 5.Rocketmq原理&最佳实践 6.spring入门 ...

  8. sql游标循环

    DECLARE @begindate DATETIME=CONVERT(DATETIME, '2019.05.06 09:40:50') ,@enddate DATETIME =GETDATE() , ...

  9. SPOJ-MobileService--线性DP

    题目链接 https://www.luogu.org/problemnew/show/SP703 方法一 分析 很显然可以用一个四维的状态\(f[n][a][b][c]​\)表示完成第i个任务时且三人 ...

  10. 关于一些JS的运算符

    首先呢,什么是JavaScript:JavaScript是一种脚本语言,也是一种解释型语言,更是一种由数据值决定变量类型的弱类型语言 JavaScript主要由三部分组成 ECMAScript  这个 ...