1 缘起
一直好奇Redis单线程高性能读写,在搜索的过程中,发现Redis使用了多路复用技术,
因此,开始学习多路复用,但是,我在想多路复用是Redis独家的技术吗?
然后查了一下Linux有没有相关技术,发现Linux确实有多路复用技术。
看到这里,发现,多路复用涉及到内核空间与用户空间数据交互,
已经到了内核层面,着实佩服Redis的作者,计算机知识是多么渊博。
于是我决定从Linux的多路复用入手,通过源码研究多路复用的技术。
文末只附了select.h的头文件源码。select.c的源文件太长了,有兴趣可以下载Linux内核源码查看。
过程中发现,select和poll方式是最初的多路复用实现方案,由于内容较多,
这次只研究了select方式。也是一知半解,还需继续理解。
何为多路复用?
多路复用是一种IO调用解决方案,有三种方式:select、poll和epoll。
用于解决进程或线程阻塞IO系统调用问题。
多路复用以文件描述符为载体,通过监控多个描述符,当描述符就绪时(可读、可写),通知程序进行读写操作。
即使单线程,亦可以处理多个IO任务,只是