本文记录了《Redis 设计与实现》中比较重要的内容。
【求职】深信服实习面经
深信服星耀计划C/C++开发(网络安全方向)实习生面经。
I/O 多路复用
为什么需要I/O多路复用
大部分应用都可以使用阻塞I/O模型就足够完成任务了。但是,有些应用需要满足以下的条件:
- 使用非阻塞的方式检查文件描述符是否可以执行I/O操作。
- 可以同时检查多个文件描述符。
我们可以使用非阻塞I/O或者多进程多线程的方式满足以上需求,但是又会带来新的问题:
- 如果文件描述符很多,非阻塞I/O需要不停轮询每个文件描述符,造成CPU的浪费。
- 如果每个文件描述符都创建一个新进程执行I/O操作,会带来开销过于昂贵的问题,包括创建进程、维护进程、父子进程间通信。
- 多线程的方法虽然会占用较少的资源,但是正确地编写线程间通信代码是一项非常复杂的工作。
我们可以使用I/O多路复用技术解决上面提到的问题。