Redis——IO多路复用

一:文件描述符

每一个网络连接其实都对应一个文件描述符

二:IO多路复用是什么?

IO多路复用类似一个规范和接口,落地实现是由 linux系统的 select -> poll -> epoll,就是说通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。这种机制的使用需要 select 、 poll 、 epoll 来配合。多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象上等待,无需阻塞等待所有连接。当某条连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理。

三:IO多路复用通俗理解?

将用户socket对应的fd注册进epoll,然后epoll帮你监听哪些socket上有消息到达,这样就避免了大量的无用操作。此时的socket应该采用非阻塞模式。这样,整个过程只在调用select、poll、epoll这些调用的时候才会阻塞,收发客户消息是不会阻塞的,整个进程或者线程就被充分利用起来,这就是事件驱动,所谓的reactor反应模式。

四:如何理解select、poll、epoll?

select, poll,和 epoll 都是 Linux 中常见的 I/O 多路复用技术,它们可以用于同时监听多个文件描述符(filedescriptor,后文简称fd),当任意一个文件描述符就绪时,就能够非阻塞的读写数据。
select:最原始的 I/O 多路复用技术,最多只能监听 1024 个文件描述符,文件描述符数组拷贝到内核态,仍然有开销,并且仅仅返回可读文件描述符的个数,具体哪个可读还是需要用户自己遍历。
poll: 在 select 的基础上增加了监听更多的文件描述符的能力
epoll:保证了每个fd在整个过程中只会拷贝一次,不需要手动遍历才能得到就绪的fd

你可能感兴趣的:(redis,redis)