Linux I/O 模型
Linux I/O 模型
BIO(Blocking I/O)
当进程或线程调用I/O系统调用,例如recvfrom()之后,该系统调用会将进程/线程阻塞状态。直到内核将I/O数据复制到缓冲区,准备好之后,进程/线程才会重新恢复运行状态。
NIO(Non-Blocking I/O)
当线程调用系统调用后,不是一直阻塞,而是每隔一段时间进行查询,查看内核是否已经准备好数据,如果没有准备好,那么则去干自己的事情;否则复制数据。
I/O 多路复用
如果有两个客户端需要提供服务,那么按照之前的做法是启动两个进程或者线程,然后这两个进程或线程为客户端提供I/O和计算的工作。再I/O多路复用中,可以只启用一个进程或者线程,这个进程或线程提供计算服务,而对于每个不同的客户端的I/O服务通过select、epoll这样的函数来进行监视,如果epoll发现了某个客户端的I/O完成或者部分完成,那么就同之进行计算工作。
I/O多路复用技术通过把多个I/O的阻塞复用到同一个Selector阻塞上,从而使得系统再单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型相比,I/O多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程或者线程的运行,降低了系统的维护工作量,节省了系统资源。
参考链接:聊聊Linux 五种IO模型