当前位置: 首页 > 编程日记 > 正文

redis使用epoll

redis使用epoll的代码在ae_epoll.c文件中。

epoll_create:redis服务器在启动时,创建事件循环,调用epoll_create方法创建epoll实例。

static int aeApiCreate(aeEventLoop *eventLoop) {aeApiState *state = zmalloc(sizeof(aeApiState));if (!state) return -1;state->events = zmalloc(sizeof(struct epoll_event)*eventLoop->setsize);if (!state->events) {zfree(state);return -1;}state->epfd = epoll_create(1024); /* 1024 is just a hint for the kernel */if (state->epfd == -1) {zfree(state->events);zfree(state);return -1;}eventLoop->apidata = state;return 0;
}

epoll_ctl:当有新的客户端连接时,把新的连接描述符注册到epoll实例。

static int aeApiAddEvent(aeEventLoop *eventLoop, int fd, int mask) {aeApiState *state = eventLoop->apidata;struct epoll_event ee = {0}; /* avoid valgrind warning *//* If the fd was already monitored for some event, we need a MOD* operation. Otherwise we need an ADD operation. */int op = eventLoop->events[fd].mask == AE_NONE ?EPOLL_CTL_ADD : EPOLL_CTL_MOD;ee.events = 0;mask |= eventLoop->events[fd].mask; /* Merge old events */if (mask & AE_READABLE) ee.events |= EPOLLIN;if (mask & AE_WRITABLE) ee.events |= EPOLLOUT;ee.data.fd = fd;if (epoll_ctl(state->epfd,op,fd,&ee) == -1) return -1;return 0;
}

epoll_wait:调用epoll_wait获取客户端产生的io事件。

static int aeApiPoll(aeEventLoop *eventLoop, struct timeval *tvp) {aeApiState *state = eventLoop->apidata;int retval, numevents = 0;retval = epoll_wait(state->epfd,state->events,eventLoop->setsize,tvp ? (tvp->tv_sec*1000 + tvp->tv_usec/1000) : -1);if (retval > 0) {int j;numevents = retval;for (j = 0; j < numevents; j++) {int mask = 0;struct epoll_event *e = state->events+j;if (e->events & EPOLLIN) mask |= AE_READABLE;if (e->events & EPOLLOUT) mask |= AE_WRITABLE;if (e->events & EPOLLERR) mask |= AE_WRITABLE;if (e->events & EPOLLHUP) mask |= AE_WRITABLE;eventLoop->fired[j].fd = e->data.fd;eventLoop->fired[j].mask = mask;}}return numevents;
}

转载于:https://www.cnblogs.com/allenwas3/p/8473614.html

相关文章:

贝塞尔结合CAShapeLayer绘制路线,CABasicAnimation实现的小动画

最近项目需求,做的一个标识正在直播的小动画,代码如下: #import "YGIsOnLiveAnmationView.h" interface YGIsOnLiveAnmationView () property (strong, nonatomic) CAShapeLayer * progressLayer; property (strong, nonatomic) CAShapeLayer * triangleLayer; p…

区块链和可持续性

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 区块链和可持续性 在区块链算法和区块链平台方面&#xff0c;可持续性可以有多种解释。一方面&#xff0c;任何听说过比特币网络能源需求的…

eclipse中maven打包

第一种方式&#xff1a;将依赖包打包进一个jar包中。 <build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>${pro…

2014年国内最热门的.NET开源平台

http://developer.51cto.com/art/201501/464292.htm转载于:https://www.cnblogs.com/littlehb/p/5646300.html

从 PoS 进化 SPoS:无能耗共识机制

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 从 PoS 进化 SPoS&#xff1a;无能耗共识机制 我们为 V SYSTEMS 区块链平台设计了了一个注重高扩展性的权益证明&#xff08;PoS&#xff…

Linux运维跳槽必备的40道面试精华题

过一次年&#xff0c;结婚、存款、父母养老&#xff0c;一系列向钱看的事都在碾压我们本来还挺简单的神经&#xff0c;但难过没有出路&#xff0c;唯有找到好的方法和事业方向&#xff0c;才能实现一步一个脚印的逆袭。 下面是一名资深Linux运维求职数十家公司总结的Linux运维面…

Oracle Sales Cloud 实施(二)

Oracle Sales Cloud 实施&#xff08;二&#xff09; 从第一个任务列表开始&#xff1a; Review Company Profile&#xff08;公司的主要信息&#xff09; 第一个任务&#xff1a;Manage Enterprise HCM Information &#xff08;管理公司HCM信息&#xff09; 名字可以修改&a…

修改系统tabbar的高度

项目中用到了不规整的tabbar, 但是如果使用自定义又会有tabbar动画方面的问题 找到了一个折中的办法, 修改系统tabbar的高度 - (void)viewDidLoad { [super viewDidLoad]; [self.tabBar setShadowImage:[UIImage new]]; self.tabBar.backgroundImage [UIIm…

区块链技术的标准化和颠覆性

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 区块链技术的标准化和颠覆性 区块链技术的实施是企业财务战略上的明智之举。它不仅在加密货币方面&#xff0c;而且在数据标准化软件方面&…

RHEL/CentOS通用性能优化、安全配置参考

RHEL/CentOS通用性能优化、安全配置参考 本文的配置参数是笔者在实际生产环境中反复实践总结的结果&#xff0c;完全适用绝大多数通用的高负载、安全性要求的网络服务器环境。故可以放心使用。 若有异议&#xff0c;欢迎联系zhangxugg163.com探讨。 提示&#xff1a;强烈建议使…

关于Cocoa Pods的升级安装和使用说明

前段时间要使用Cocoa Pods ,安装时发现Ruby版本过低导致安装失败, 查找教程解决后又出现Cocoa Pods新版本导致的问题, 以下给出解决办法: 一 . 升级Ruby 1.安装RVM RVM是用于Ruby的版本管理 安装命令行: $ curl -L get.rvm.io | bash -s stable $ source ~/.rvm/scripts/rvm 等…

Linux使用netstat命令查看并发连接数

我们的网站部署在linux的服务器上&#xff0c;特别是web服务器&#xff0c;我们可能有时候做为运维人员&#xff0c;肯定是要查看网站的并发连接数是不是达到瓶颈等&#xff0c;所以在linux下&#xff0c;我们如何查看服务器的并发连接数呢&#xff1f;使用以下命令即可分组查看…

深入挖掘Hyperledger Fabric中的私有数据

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 深入挖掘Hyperledger Fabric中的私有数据 私有数据是fabric中讨论最多的特性&#xff0c;在v1.2中发布。它在多个参与者之间引入了数据隐私…

几种任务调度的 Java 实现方法与比较

综观目前的 Web 应用&#xff0c;多数应用都具备任务调度的功能。本文由浅入深介绍了几种任务调度的 Java 实现方法&#xff0c;包括 Timer&#xff0c;Scheduler, Quartz 以及 JCron Tab&#xff0c;并对其优缺点进行比较&#xff0c;目的在于给需要开发任务调度的程序员提供有…

7.Mongodb复制(副本集)

1、复制 什么是复制 复制提供了数据的冗余备份&#xff0c;并在多个服务器上存储数据副本&#xff0c;提高了数据的可用性&#xff0c;并可以保证数据的安全性复制还允许从硬件故障和服务中断中恢复数据为什么要复制 数据备份数据灾难恢复读写分离高&#xff08;24* 7&#xff…

关于iOS10的适配

每一次的iOS升级, 都伴随着各种坑的出现, 今年iOS10也不例外 本着一定要紧随最新科技的开发态度, 最近将手机升级到了iOS10, xcode升级到了8.0 但是紧随而来的就是各种崩溃, 各种坑, 现列举如下: 一 . 用户隐私权限的访问 公司是做视频直播的, 所有在用户隐私权限上面还是有…

分布式系统中节点之间的同步形成区块链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 分布式系统中节点之间的同步形成区块链 分布式系统由Tanenbaum定义&#xff0c;“分布式系统是一组独立的计算机&#xff0c;在”分布式…

hdu 2199 Can you solve this equation? 二分

1.精度问题 由于是double类型&#xff0c;rmid 而不是rmid-12.如果首位两端&#xff08;f&#xff08;0&#xff09;和f&#xff08;100&#xff09;&#xff09;同号&#xff0c;证明解不在[1,100]区间内 这是我之所以TE的原因&#xff0c;没有预先判断3.若在这个区间内&#…

iOS iTunes Connect协议更新导致无法构建新版本

最近公司项目发新版本时遇到不能构建新的版本的情况, 了解后才知道 必须同意更新后的协议才能构建新版本、创建内购App&#xff0c;提交新的App 点击其中的蓝色文字进入相关界面 这样就可以构建新版本了 参考博客: http://blog.sina.com.cn/s/blog_134451adb0102wger.html

白话hash和数字签名,保证你看得懂

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 摘要&#xff1a;最近有朋友在后台问为啥最近老介绍hash相关文章&#xff0c;其实hash算法在信息安全中非常重要&#xff0c;尤其是作为数字…

几种Windows进程通信

32位Windows采用虚拟内存技术使每个进程虚拟4G内存&#xff0c;在逻辑上实现了对进程之间数据代码的分离与保护。那么相应的进程之间的通信也就有必要整理掌握一下。 Windows进程间通讯的方法有很多&#xff1a;管道、邮件槽、剪切板、共享内存、消息、套接字、RPC、DDE等。 但…

TestNG学习随笔

转载自&#xff1a;http://blog.sina.com.cn/s/blog_68f262210102vh5c.html 通过本人实践&#xff0c;文中所讲的程序可以正确运行&#xff0c;作用正确&#xff0c;并且浅显易懂。以下就是我从中摘录的重要知识点&#xff0c;就当留作自己记录或者帮助其他想学TestNG的人一点借…

录制短视频的录制按钮边框计时效果

项目增加录制短视频功能, 需一录制功能按钮, 使用贝塞尔曲线结合shapelayer绘制按钮边框的计时功能 代码如下: #import "YGRecordView.h" #define BeforeRecord_LineWidth 2.0#define BeforeRecord_LineColor UIColorFromRGBA(0xffffff, 1)#define Record_LineWidt…

区块链学堂:区块链引子

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 区块链学堂&#xff08;1&#xff09;&#xff1a;区块链引子 相信正在看这篇文章的读者一定已经听说过区块链了&#xff0c;并且也相信…

Git命令文本手册

git init # 初始化本地git仓库&#xff08;创建新仓库&#xff09; git config --global user.name "xxx" # 配置用户名 git config --global user.email "xxxxxx.com" …

Mininet的介绍安装

Mininet的介绍 Mininet是一个强大的网络仿真平台&#xff0c;通过这个这个平台&#xff0c;我们可以很方便的模拟真实环境中的网络操作与架构。当前SDN/OpenFlow发展的如火如荼&#xff0c;但是在真实网络中又不可以进行相关的网络实验&#xff0c;自然需要一个仿真平台可以对这…

项目的简单总结一 -- 关于对贝塞尔和shapelayer结合使用的动画特效

现项目基本稳定, 要开始新的项目, 总结一二 关于对贝塞尔和shapelayer结合使用的动画特效, 在这次的项目中有几处使用到 故做了个小的demo, 记录下 效果如下: demo地址:https://github.com/wyon0313/BezierAnimation

内部区块链的优缺点

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 内部区块链的优缺点1 区块链的作用是取代可信赖的第三方&#xff0c;或者是在不完全相互信任的实体之间建立信任关系&#xff0c;如此看来…

Spring框架系列之AOP思想

微信公众号&#xff1a;compassblog 欢迎关注、转发&#xff0c;互相学习&#xff0c;共同进步&#xff01; 有任何问题&#xff0c;请后台留言联系&#xff01; 1、AOP概述 &#xff08;1&#xff09;、什么是 AOP AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意为…

jstack 使用(转)

dump 文件里&#xff0c;值得关注的线程状态有&#xff1a;死锁&#xff0c;Deadlock&#xff08;重点关注&#xff09; 执行中&#xff0c;Runnable 等待资源&#xff0c;Waiting on condition&#xff08;重点关注&#xff09; 等待获取监视器&#xff0c;Waiting on monit…