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. [Cometoj#3 D]可爱的菜菜子_线段树_差分_线性基

    可爱的菜菜子 题目链接:https://cometoj.com/contest/38/problem/D?problem_id=1543 数据范围:略. 题解: 首先,如果第一个操作是单点修改,我们就 ...

  2. [CF306C]White, Black and White Again_排列组合

    White, Black and White Again 题目链接:https://www.luogu.org/problem/CF306C 数据范围:略. 题解: 记得不要看错题,容易看成来回交替下 ...

  3. kafka producer partitions分区器(七)

    消息在经过拦截器.序列化后,就需要确定它发往哪个分区,如果在ProducerRecord中指定了partition字段,那么就不再需要partitioner分区器进行分区了,如果没有指定,那么会根据k ...

  4. oracle索引2

    问什么问题? 索引有什么代价?哪些场景下你需要建索引?或者有时候反过来问,哪些场景下不推荐建索引. 建好索引之后,怎么才能最高效地利用索引?或者反过来问,请说出一个无法有效利用已建索引的案例. 索引的 ...

  5. SpringBoot 项目如何在tomcat容器中运行

    一. SpringBoot内嵌容器的部署方式 SpringBoot内部默认提供内嵌的tomcat容器,所以可以直接打成jar包,丢到服务器上的任何一个目录,然后在当前目录下执行java -jar de ...

  6. Windows32位或64位下载安装配置Scala

    [学习笔记] Windows 32位或64位下载安装配置Scala: 1)下载地址:http://www.scala-lang.org/download/,看我的spark那节,要求scala是2.1 ...

  7. Ural 1201 Which Day Is It? 题解

    目录 Ural 1201 Which Day Is It? 题解 题意 输入 输出 题解 程序 Ural 1201 Which Day Is It? 题解 题意 打印一个月历. 输入 输入日\((1\ ...

  8. K60工程

    使用arm-none-eabi-objcopy工具将elf文件转换为hex文件 "D:/ELF/arm-none-eabi-objcopy.exe" -O ihex "D ...

  9. python3.5+installer 将.py 打包成.exe

    (1)下载安装installer,不如我安装在D:\Program Files\Python35,安装完成后,在D:\Program Files\Python35\Scripts可以找到install ...

  10. 【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title

    [第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...