Linux网络IO模型
阻塞IO模型
- 1.当应用程序发起网络IO的请求时会调用操作系统recvfrom函数
- 2.等待系统内核准备数据报(获取网络数据:网卡把数据拷贝到内核)
- 3.数据报准备好后将数据从内核拷贝到用户空间,即应用程序空间
非阻塞IO模型
一般很少用这个非阻塞模型,因为反复调用消耗CPU
IO复用模型
IO复用模型是linux下用的最多的,也就是JDK中的NIO。
特点:
- 对于某一个应用进程而言,或者说在某一次网络通信,它还是阻塞的,但是可以同时服务于多个网络通信。
- 多个select函数即多个socket请求,会挂在内核中,操作系统会轮询检查数据报是否准备好再返回可读条件即就绪,应用程序再发起recefrom函数拷贝内核中的数据.
select和epoll;对一个socket,两次调用,两次返回,比阻塞IO并没有什么优越性;
关键是能实现同时对多个socket进行处理。
信号驱动IO---(相对少用)
异步IO模型
当一个异步过程调用发出后,系统直接返回,调用者不能立刻得到结果。
实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者的输入输出操作。
五种IO模型的比较:
除异步IO模型,前面四种IO模型第二阶段都是相同的,阻塞于recefrom调用。
参考书籍:《UNIX网络编程》
推荐阅读这本书,看了一会觉得很不错,对学习后面应用层的东西有很大的帮助
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。