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. poj3107(树的重心,树形dp)

    题目链接:https://vjudge.net/problem/POJ-3107 题意:求树的可能的重心,升序输出. 思路:因为学树形dp之前学过点分治了,而点分治的前提是求树的重心,所以这题就简单水 ...

  2. LeetCode 第 164 场周赛

    访问所有点的最小时间 不难看出,从点(x1,y1) 到 (x2,y2) 的步数需要 min(dx,dy),其中 dx = abs(x1-x2),dy = abs(y1-y2) class Soluti ...

  3. Pygame小游戏练习一

    @Python编程从入门到实践 Python项目练习 一.安装Python包Pygame 通过pip安装包工具安装 python3 -m pip --version #查看是否安装pip 确定安装pi ...

  4. Callable和Future的区别

    Callable 在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口.然而,这两种方式的缺点是在线程任务执行结束后,无法获取执行结果.我们一般只能采用共享变 ...

  5. mac电脑开机键盘和鼠标失灵

    今天早上电脑刚开机发现,触摸板动不了了,过了一会屏幕上就出现蓝牙键盘连接不了的东东,马上意识到键盘也输入不了了.本来还以为得去守候维修了,百度了下解决方法,好在暂时解决了.亲测有效的两个方法(早上晚上 ...

  6. 谈谈对Spring IOC的理解(转发)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  7. .net core 根据数据库生成实体类

    微软最近几年在跨平台上不断发力,很多.net程序员也摩拳擦掌,对微软寄以厚望.就在最近,微软还推出了asp .net core2.0预览版. 通过对.net core的简单尝试,我发现以往我们开发MV ...

  8. IOC+EF+Core项目搭建IOC注入及框架(二)

    配置ServiceCollection /// <summary> /// 表示IServiceCollection的扩展 /// </summary> public stat ...

  9. dev gridview 单元格值拖拽替换

    public class GridViewDropCell { //dvginfo根据鼠标点击的x.y坐标获取该点的相关信息 private GridHitInfo downHitInfo; priv ...

  10. tinymce富文本是在modal框中弹出显示的问题

    记录一下,在用tinymce富文本的时候,由于是用在modal 上的,始终无法获取焦点,后来才发现问题出在tinymce在modal前创建了,所以导致这个问题,解决方案就是用 v-if="v ...