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 的多进程模型. ...
随机推荐
- Python基础总结之第七天开始【总结字符串、列表、元组的常用方法】(新手可相互督促)
前面的笔记说,python中的一切数据类型都是对象 我们在细化下就是:对象可由两部分组成:对象数据和对象方法 针对不同类型的数据对象,有不同的操作对象的方法. 那么我们开始看下字符串对象的常用方法: ...
- 删除重复信息且要保留一条的(roacle的rowid另类用法)
由于表的主键失效了(disable),导致导入了一些主键重复的数据,想保留唯一的一条, 最后发现其实可以用rowid来实现,不知道算不算是rowid的另类用法. delete /*+ parallel ...
- multipart/form-data(二进制流) 两种传输方式
一.传统表单提交传输方式 <form id= "uploadForm" action= "url" method= "post" en ...
- __setitem__和__getitem__和__delitem__
__setitem__和__getitem__和__delitem__ class Foo: def __init__(self, name): self.name = name def __geti ...
- javascript常用内置对象——Array对象
Array对象: 创建 Array 对象的语法: new Array(); new Array(元素个数); new Array(element0, element1, ..., elementn); ...
- Windows 编程 键盘
键盘对于大家来说可能再也熟悉不过了,它和鼠标是现在最常用的电脑输入设备.虽然在现在的图形界面操作系统下使用鼠标比使用键盘更方便.更广泛,但是鼠标还是一时半会儿取代不了它的老前辈——键盘的地位,尤其是在 ...
- Dual 表
我们先从名称来说,dual不是缩写词,本身就是完整的单词.dual名词意思是对数,做形容词时是指二重的,二元的. Oracle中的dual表是一个单行单列的虚拟表. Dual表是oracle与数据字典 ...
- 安卓开发之ArrayAdapter使用
package com.lidaochen.test; import android.support.v7.app.AppCompatActivity; import android.os.Bundl ...
- Category与Extension详解
自己做笔录 用来后来回顾.. (一) Category 1.什么是category category是objective-C 2.0之后添加的语言特性,别人口中的分类.类别其实都是指category. ...
- 使用jMeter构造大量并发HTTP请求进行微服务性能测试
比如我开发好了一个微服务,想测试其在大并发请求下的性能表现如何. 比较方便的一个做法是使用工具jMeter来构造这些请求. 创建一个新的工程: 创建一个新的Thread Group,下图意思是这个工程 ...