【redis】一.在redis之前的epoll

Redis的高效性能得益于epoll函数的使用。本文深入解析了BIO、NIO与epoll的区别,强调epoll如何通过维护rdlist列表减少遍历成本,并通过共享空间避免数据复制,提高性能。
摘要由CSDN通过智能技术生成

了解redis必须要了解的epoll

作为单线程的redis,为什么这么快,主要原因还是对epoll函数的利用。所以,有必要先了解什么是epoll。

为什么redis官网也只提供linux版本的,没有提供windows版本?就是因为只有部分linux系统中有epoll函数。windows版本都是各论坛大神自己改的redis,官网不提供,因为没有了epoll就失去了“快”这个特性!

了解epoll那么就要了解BIO、NIO、(AIO)。

BIO/ Block IO/ 阻塞IO

在socket编程中,服务端需要先新建socket对象,依次调用bind、listen、accept,最后调用recv接收数据。recv是个阻塞方法,当程序运行到recv时,它会一直等待,直到接收到数据才往下执行。

服务端伪代码

//创建socket
int s = socket(AF_INET, SOCK_STREAM, 0);   
//绑定
bind(s, ...)
//监听
listen(s, ...)
//接受客户端连接
int c = accept(s, ...)
//接收客户端数据
recv(c, ...);
//将数据打印出来
printf(...)

问题在于recv时,进程会阻塞。

以操作系统视角来看,该socket进程,会被内核从运行队列中,移动到等待队列中,此时等待队列中的进程不消耗cpu性能。当接收到了recv数据时,操作系统再将该socket进程从等待队列中移动到运行队列中,即唤醒了该进程。

此时出现问题:

1.每一个进程都只有一个socket,一个进程只能处理一个socket,若有其他socket连接&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值