Redis03——Redis之单线程+多路IO复用技术

Redis 是单线程+多路IO复用技术

多路复用:使用一个线程来检查多个文件描述符的就绪状态

     如果有一个文件描述符就绪,则返回

     否则阻塞直到超时

     得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(线程池)

  • 阻塞lO:给女神发一条短信, 说我来找你了,然后就默默的一直等着 女神下楼,这个期间除了等待你不会做其他事情,属于备胎做法.
  • 非阻塞IO:给女神发短信,如果不回,接着再发,一直 发到女神下楼,这个期间你除了发短信等待不会做其他事情,属于专-做法.
  • IO多路复用:是找一个宿管大妈来帮你监视下楼的女生,这个期间你可以些其他的事情.例如可以顺便看看其他妹子,玩玩王者荣耀,上个厕所等等.

IO复用又包括select, poll, epoll模式那么它们的区别是什么?

  • select:

  一个女生下楼, select大妈都不知道这个是不是你的女神,她需要一个一 个 询问,并且select大妈能力还有限,最多一次帮 你监视1024个妹子

  • poll:

  poll大妈不限制盯着女生的数量,只要是经过宿舍楼门口的女生,都会帮你去问是不是你女神

  • epoll:

  epoll大妈不限制盯着女生的数量,并且也不需要一个- 个去问.那么如何做呢? epol1大妈会为每个进宿舍楼的女生脸上贴上一一个大字条,上面写上女生自己的名字,只要女姓下楼了,   eoll大妈就知道这个是不是你女神了,然后大妈再通知你.

原文地址:https://www.cnblogs.com/zly123/p/11729034.html

时间: 2024-10-10 09:07:45

Redis03——Redis之单线程+多路IO复用技术的相关文章

并发程序设计3:多路IO复用技术(2)

上一节(https://www.cnblogs.com/yuanwebpage/p/12362876.html)记录了多路IO复用的第一种方式select函数,以及其相应的缺点.本节记录多路IO复用的第二种方式epoll(在windows系统下叫IOCP). 1. epoll相关函数 epoll函数克服了select函数的相关缺点,其优点如下: (1) 只需向OS注册一次文件描述符集合,不用每次循环传递: (2) epoll函数会将发生变化的文件描述符单独集中起来,这样每次遍历时只需要遍历发生变

Libevent的IO复用技术和定时事件原理

Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相当精炼.易读:跨平台,支持 Windows. Linux. *BSD 和 Mac Os:支持多种 I/O 多路复用技术, epoll. poll. dev/poll. select 和 kqueue 等:支持 I/O,定时器和信号等事件:注册事件优先级. 1 Libevent中的epoll Libevent重

一次读懂 Select、Poll、Epoll IO复用技术

我们之前采用的多进程方式实现的服务器端,一次创建多个工作子进程来给客户端提供服务.其实这种方式是存在问题的. 可以打个比方:如果我们先前创建的几个进程承载不了目前快速发展的业务的话,是不是还得增加进程数?我们都知道系统创建进程是需要消耗大量资源的,所以这样就会导致系统资源不足的情况. 那么有没有一种方式可以让一个进程同时为多个客户端端提供服务? 接下来要讲的IO复用技术就是对于上述问题的最好解答. 对于IO复用,我们可以通过一个例子来很好的理解它.(例子来自于<TCP/IP网络编程>) 某教室

Linux网络编程-IO复用技术

IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了.Linux中,提供了select.poll.epoll三种接口函数来实现IO复用. 1.select函数 #include <sys/select.h> #include <sys/time.h> int select(int nfds, fd_set *readfds, fd_set *writef

论事件驱动与多路IO复用

通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求: (2)每收到一个请求,创建一个新的线程,来处理该请求: (3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求 上面的几种方式,各有千秋, 第(1)中方法,由于创建新的进程的开销比较大,所以,会导致服务器性能比较差,但实现比较简单. 第(2)种方式,由于要涉及到线程的同步,有可能会面临死锁等问题. 第(3)种方式,在写应用程序代码时,逻辑比前面两种都复杂. 综合考

linux的IO复用技术:select、pool、epool的区别以及epool的原理和使用

select.poll.epoll都是IO多路复用的机制,但是他们的机制有很大的区别 1.select select机制刚开始的时候,需要把fd_set从用户空间拷贝到内核空间,并且检测的fd数是有限制的,由FD_SETSIZE设置,一般是1024. 检测的时候,根据timeout,遍历fd_set表,把活跃的fd(可读写或者错误),拷贝到用户空间, 再在用户空间依次处理相关的fd. 这个机制是linux内核很早的版本,epool是根据select,pool基础上优化的,缺点比较多. 缺点: 1

linux多路IO复用中的select和epoll

select,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作.但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间. select调用的过程: (1)从用户空间拷贝fd_set到内核空间 (2)注册回调函数__poll

TCP编程:select提高服务器处理能力 [socket多路IO复用]

服务器: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <sys/wait.h>

Reactor模式,或者叫反应器模式 - 为什么用多路io复用提供吞吐量

Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或者叫召唤兽. 并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量. 先用比较直观的方式来介绍一下这种方式的优点,通过和常用的多线程方式比较一下,可能更好理解. 以一个餐饮为例,每一个人来就餐就是一个事件,他会先看一下菜单,然后点餐.就像一个网站会有很多的请