1. I/O多路复用(I/O多路转接)
- I/O 多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux 下实现 I/O 多路复用的
- 系统调用主要有 select、poll 和 epoll。
输入: 将程序写到内存中
输出: 将内存中的数据读到文件中
socket通信时,其本身是一个文件描述符,对应内核中的一块缓冲区(里面有读缓冲区和写缓冲区),通过缓冲区进行数据的交换。
要操作IO,其实就是看文件描述符的读写缓冲区中是否有数据;
1.1 IO模型
1.1.1、阻塞等待
TCP在进行通信时,没有数据,read就会一直阻塞等待;
进程调度是非常消耗资源的,线程要稍微好点。
1.1.2、非阻塞、忙轮询
将read设置为非阻塞,有数据会读,没数据即返回一个值,程序继续向下执行,但是我们需要不断的检测有没有数据到达;
1.1.3、IO多路转接技术-select/poll技术
就是将所有的文件描述符都交给内核,由内核统一给我们检测,内核检测后,再将数据返回给我们。