笔记 | 5种网络IO模型

Posted 搬运工来架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记 | 5种网络IO模型相关的知识,希望对你有一定的参考价值。



点击上方蓝色字关注我们~

01

阻塞I/O blocking i/o


 

笔记 | 5种网络IO模型

①等待数据:需要等待数据拷贝进内核

②需要等内核将数据复制到用户空间

优点:①能够及时返回数据,无延迟。②内核开发者省事。

缺点:对用户来说处于等待就要付出性能的代价




02

非阻塞I/O nonblocking i/o


笔记 | 5种网络IO模型



用户进程需要不断的主动询问kernel数据好了没有。

用户进程发出read操作,由于内核还没有准备好数据,所以马上返回一个error标识,用户进程知道内核还没准备好,所以并没有block,而且还会轮询的调用read询问数据是否准备好,内核准备好后就返回给用户进程。


同步非阻塞方式相比同步阻塞方式:

优点:能够在等待任务完成的时间里干其他活了(包括提交其他任务,也就是 “后台” 可以有多个任务在同时执行)。

缺点:任务完成的响应延迟增大了,因为每过一段时间才去轮询一次read操作,而任务可能在两次轮询之间的任意时间完成。这会导致整体数据吞吐量的降低



03

I/O多路复用 i/o multicomplexing


笔记 | 5种网络IO模型

基本原理就是select,poll,epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程


当用户进程调用了select,那么整个进程会被block,而同时,kernel会“监视”所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程


同步是需要主动等待消息通知,而异步则是被动接收消息通知,通过回调、通知、状态等方式来被动获取消息。IO多路复用在阻塞到select阶段时,用户进程是主动等待并调用select函数获取数据就绪状态消息,并且其进程状态为阻塞。所以,把IO多路复用归为同步阻塞模式。




04

信号驱动式IO(signal-driven IO)


笔记 | 5种网络IO模型



05

异步 IO(asynchronous IO)


笔记 | 5种网络IO模型

用户进程进行aio_read系统调用之后,无论内核数据是否准备好,都会直接返回给用户进程,然后用户态进程可以去做别的事情。等到socket数据准备好了,内核直接复制数据给进程,然后从内核向进程发送通知。IO两个阶段,进程都是非阻塞的。

异步 IO 的读写操作不会被缓存或缓冲,这就无法利用操作系统的缓存与缓冲机制。


06

5种IO模型区别


笔记 | 5种网络IO模型

blocking和non-blocking区别

调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kernel还准备数据的情况下会立刻返回


synchronous IO和asynchronous IO区别

两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。之前所述的blocking IO,non-blocking IO,IO multiplexing都属于synchronous IO。


而asynchronous IO则不一样,当进程发起IO 操作之后,就直接返回再也不理睬了,直到kernel发送一个信号,告诉进程说IO完成。在这整个过程中,进程完全没有被block。


non-blocking IO和asynchronous IO的区别还是很明显的。在non-blocking IO中,虽然进程大部分时间都不会被block,但是它仍然要求进程去主动的check,并且当数据准备完成以后,也需要进程主动的再次调用recvfrom来将数据拷贝到用户内存。而asynchronous IO则完全不同。它就像是用户进程将整个IO操作交给了他人(kernel)完成,然后他人做完后发信号通知。在此期间,用户进程不需要去检查IO操作的状态,也不需要主动的去拷贝数据。


如果喜欢视频版的,请点击左下角“查看原文”,我录的B站视频↓,希望对你有用。

【笔记系列】





回复公众号【资料】获得干货资料集锦:技术ppt、IT大会资料、架构、分布式资料等。
推荐好文

1、

2、

3、
4、
5、

6、

7、

8、

9、

-关注搬运工来架构,与优秀的你一同进步-

原创不易,如果喜欢这篇文章可以点在看哦↘

以上是关于笔记 | 5种网络IO模型的主要内容,如果未能解决你的问题,请参考以下文章

5种网络IO模型(有图,很清楚)

5种网络IO模型(有图,很清楚)

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

5种常见的IO模型及IO复用

五种网络IO模型以及多路复用IO中select/epoll对比

网络IO模型