Linux多路复用之select方案

1 缘起

一直好奇Redis单线程高性能读写,在搜索的过程中,发现Redis使用了多路复用技术,
因此,开始学习多路复用,但是,我在想多路复用是Redis独家的技术吗?
然后查了一下Linux有没有相关技术,发现Linux确实有多路复用技术。
看到这里,发现,多路复用涉及到内核空间与用户空间数据交互,
已经到了内核层面,着实佩服Redis的作者,计算机知识是多么渊博。
于是我决定从Linux的多路复用入手,通过源码研究多路复用的技术。
文末只附了select.h的头文件源码。select.c的源文件太长了,有兴趣可以下载Linux内核源码查看。
过程中发现,select和poll方式是最初的多路复用实现方案,由于内容较多,
这次只研究了select方式。也是一知半解,还需继续理解。

何为多路复用?
多路复用是一种IO调用解决方案,有三种方式:select、poll和epoll。
用于解决进程或线程阻塞IO系统调用问题。
多路复用以文件描述符为载体,通过监控多个描述符,当描述符就绪时(可读、可写),通知程序进行读写操作。
即使单线程,亦可以处理多个IO任务,只是依据就绪状态进行处理,而不会直接阻塞当前线程所有任务执行(IO),保证每个时刻都有读或者写操作(使用内核内存处理,处理速度优势)。
但,实质上,每个核在每个时刻,依旧是只能执行一次计算。
内核的直接内存处理速度,比间接内存

你可能感兴趣的:(架构设计,源码,多路复用,Linux)