基于redis AE异步网络架构
最近的研究已redis源代码,redis高效率是令人钦佩。
在我们的linux那个机器,cpu型号,
Intel(R) Pentium(R) CPU G630 @ 2.70GHz
Intel(R) Pentium(R) CPU G630 @ 2.70GHz
上 set,get 都能达到每秒钟15W的请求处理量,真是佩服这代码的效率。
前几篇文章。主要是介绍了主要的代码。比方字符串处理,链表处理。hash等。
这篇文章介绍网络的核心,基于事件反映的异步网络框架。
异步网络处理。是基于epoll的。epoll的分为两种模式。水平触发和边缘触发。ae使用了水平触发,就是一旦有数据,epoll会一直通知,直到就读取完毕。而边缘触发则仅仅通知一次。
等到状态改变才会去通知。
详细能够到网上查阅。
1.结构体源代码解析
1.1读写事件结构体
/* File event structure */
typedef struct aeFileEvent {int mask; /* one of AE_(READABLE|WRITABLE) */aeFileProc *rfileProc;aeFileProc *wfileProc;void *clientData;
} aeFileEvent;
该结构体表示一个fd相应的事件处理函数和私有数据。当我们要注冊一个fd时间时。就会填充该结构体。
1.2 时间事件狗狗提
/* Time event structure */
typedef struct aeTimeEvent {long long id; /* time event identifier. */long when_sec; /* seconds */long when_ms; /* milliseconds */aeTimeProc *timeProc;aeEventFinalizerProc *finalizerProc;void *clientData;struct aeTimeEvent *next;
} aeTimeEvent;
当我们注冊定时处理事件。会填充对应结构体,加入到数组里
1.3 触发的fd
/* A fired event */
typedef struct aeFiredEvent {int fd;int mask;
} aeFiredEvent;
该结构体表示一个fd相应的可读可写事件
1.4 ae事件的总结构体
/* State of an event based program */
typedef struct aeEventLoop {int maxfd; /* highest file descriptor currently registered */int setsize; /* max number of file descriptors tracked */long long timeEventNextId;time_t lastTime; /* Used to detect system clock skew */aeFileEvent *events; /* Registered events */aeFiredEvent *fired; /* Fired events */aeTimeEvent *timeEventHead;int stop;void *apidata; /* This is used for polling API specific data */aeBeforeSleepProc *beforesleep;
} aeEventLoop;
该结构体存储了ae异步事件的基本数据,比方fd大小。时间事件id,注冊的时间指针等。
2.ae_epoll 接口
2.1 epoll 结构体
typedef struct aeApiState {int epfd;struct epoll_event *events;
} aeApiState;
提供epoll的变量定义,
epfd是通过epoll_create 创建。events表示epoll_wait同意监听的数量。
填充aeApiState结构体。
static int aeApiCreate(aeEventLoop *eventLoop)
调用epoll_wait ,获取我们关心的事件,
static int aeApiPoll(aeEventLoop *eventLoop, struct timeval *tvp)
2、api接口
1。创建eventloop
aeEventLoop *aeCreateEventLoop(int setsize)
2.加入事件
int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask,aeFileProc *proc, void *clientData)
3。
删除事件,
void aeDeleteFileEvent(aeEventLoop *eventLoop, int fd, int mask)
4。
创建时间事件
long long aeCreateTimeEvent(aeEventLoop *eventLoop, long long milliseconds,aeTimeProc *proc, void *clientData,aeEventFinalizerProc *finalizerProc)
5.删除时间事件
int aeDeleteTimeEvent(aeEventLoop *eventLoop, long long id)
使用演示样例
//创建loop
proxy.eventLoop = aeCreateEventLoop(DEFAULT_LOOP_SIZE);
//创建事件事件
if(aeCreateTimeEvent(proxy.eventLoop, 1, serverCron, NULL, NULL) == AE_ERR)
{
printf("Can't create the serverCron time event\n");
exit(1);
}
/* server监听redisclient的连接 */
aeCreateFileEvent(proxy.eventLoop, proxy.server_fd, AE_READABLE, on_client_connected, NULL);
aeCreateFileEvent(proxy.eventLoop, proxy.evfd, AE_READABLE, reconnect_redis, NULL);
以上就是一个简单的演示样例。
我写了一个类redisprox的东西,待我上传给大家看看。
版权声明:本文博主原创文章。博客,未经同意不得转载。
基于redis AE异步网络架构相关推荐
- 【6G】基于 Dyncast 的算力网络架构
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 博客内容主要围绕: 5G/6G协议讲解 ...
- 基于Redis+MySQL+MongoDB存储架构应用
摘 要: Redis+MySQL+MongoDB技术架构实现了本项目中大数据存储和实时云计算的需求.使用MongoDB切片的水平动态添加,可在不中断平台业务系统的同时保障扩容后的查询速度和云计算效能 ...
- 灵雀云基于 OVN 的 Kubernetes 网络架构解析
文章目录 Kubernetes 网络的局限性 OVS和OVN网络方案的能力 Kubernetes 网络未来增强的方向 本文为2019-3月26日灵雀云Kubernetes专家刘梦馨在Dockone社区 ...
- Openssl:构建CA的过程并实现web服务基于https访问的网络架构
本文环境 RedHat 5.8 本博文主要内容:加密算法.CA介绍和配置等.web利用CA认证构建https安全传输 1.在互联网上数据额传输有两种:明文传输和加密传输.明文传输的协议有:ftp.ht ...
- 基于Attention机制的轻量级网络架构以及代码实现
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 导读 之前详细介绍了轻量级网络架构的开源项目,详情请看深度学习中的轻量级网络架构总结与代码实现 ...
- 网络架构、云平台和微信公众号开发接入--基于嵌入式工程师的视觉
云与后端相关的技术似乎并不属于嵌入式和物联智能硬件开发工程师的范畴,但是嵌入式开发工程师有必要认识成熟的网络架构和相关的云技术,以拓展自己在系统架构方面的视野.大数据分析是物联网背后的核心价值,物联智 ...
- 认知无线电网络架构与协议体系
认知无线电网络架构与协议体系 本文转载自中国联通通信技术 摘要:认知无线电网络具有动态.灵活.智能地使用频谱资源,提高频谱利用率的特点,其网络结构和协议体系的设计是实现上述网络功能的关键.现有基于认知 ...
- MobileViT: 一种更小,更快,高精度的轻量级Transformer端侧网络架构(附代码实现)...
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 [导读]之前详细介绍了轻量级网络架构的开源项目,详情请看深度学习中的轻量级网络架构总结与代码实现 ...
- python异步框架twisted_twisted是python实现的基于事件驱动的异步网络通信构架。
网:https://twistedmatrix.com/trac/ http://www.cnblogs.com/wy-wangyan/p/5252271.html What is Twisted? ...
最新文章
- alienware r12 i9+3090 lol卡顿问题
- java 类的访问权限_什么是Java类的访问权限?
- springboot 获取application参数_LOOK ! SpringBoot的外部化配置最全解析
- [Swift实际操作]八、实用进阶-(7)使用通知的方法进行对象间的消息传递
- java排序学习笔记
- Tensorflow 卷积神经网络 (二)
- IBM将剥离传统IT基础设施部门;迅雷前CEO陈磊涉嫌职务侵占罪被调查 ;Python 3.9发布|极客头条
- C语言学习记录_2019.02.10
- 【BZOJ4378】[POI2015]Logistyka 树状数组
- 将字符串中连续的多个空格替换成一个空格
- 从Logistic Regression 到 Neural Network
- 数量积、向量积、混合积
- 从python入门机器学习系列--2、Z 检验与 T 检验
- super expression must either be null or a function 报错解决方法
- 第10章 模糊查询和聚合函数
- yudian温控表a1温度怎么补偿_厦门宇电yudian温控表AI-516/516P型人工智能温度调节器控制器-恩莱自动化官网...
- LINUX进程内存占用情况如何查看的方法
- CleanMyMac X真正好用的Mac电脑系统优化软件应用工具
- 【SLF4j】使用日志组件SLF4j写系统日志
- 一个很好的机会股票的价格是向南移动