山西省财政厅网站三基建设专栏,广东深圳龙岗区邮政编码,互联网技术与应用,生物科技公司网站模板下载大家好#xff0c;我是老三#xff0c;人生有三大难题#xff0c;事业、爱情#xff0c;和
——这顿吃什么#xff01;
人在家中躺#xff0c;肚子饿得响#xff0c;又到了不得不吃的时候#xff0c;这顿饭该怎么吃#xff1f;吃什么呢#xff1f;
Linux里有五种I…大家好我是老三人生有三大难题事业、爱情和
——这顿吃什么
人在家中躺肚子饿得响又到了不得不吃的时候这顿饭该怎么吃吃什么呢
Linux里有五种IO模型阻塞IO、非阻塞IO、多路复用IO、信号驱动式IO和异步IO我发现这五种IO模型其实能和吃饭这件事关联起来。
阻塞IOBlocking I/O
阻塞IO是最常见的IO模型。
当发起一个IO操作时比如读取数据系统会调用read()函数。如果请求的数据没有准备好此时进程会被挂起blocked进入等待状态。直到数据准备好而且复制到应用进程的缓冲区这时候才会返回。
从调用到返回整个时间段都是阻塞的所以被称为阻塞IO。 就像是手机没电的时候去饭馆吃饭我点完菜只能等着厨师做好服务员端上来我才能愉快干饭。这段时间我就只能坐在座位上干等。
非阻塞IONon-Blocking I/O
阻塞IO还是比较浪费资源的那么非阻塞IO就来了。
所谓非阻塞IO是在调用IO操作时如果缓冲区没有数据的话直接返回一个错误码。应用进程需要不断轮询来检查数据是否准备好。数据准备好了就返回数据。 就像是我奢侈一把想吃个西餐于是就去了肯德基点完餐我就可以坐着刷刷手机。当然我还需要时不时地看看我的餐是不是已经备好餐备好了就去取一下。
多路复用IOI/O Multiplexing
虽然非阻塞IO相比阻塞IO性能提升了很多但是轮询过程中还是有大量的系统调用上下文切换的开销比较大。
那么多路复用IO就来了。
多路指的是多个数据通道复用指的是一个进程可以同时监控多个文件描述符比如socket当某个文件描述符状态发生变化比如变得可读或可写多路复用的函数将返回变化的文件描述符。
这样在数据传输过程中同一个进程中不同的任务都能被处理。特点是在数据传输过程中进程能够同时处理多个任务提高了程序的效率。
select、poll、epoll 等都是 I/O 多路复用的具体实现。
以select/poll为例进程通过将一个或多个fd传递给select或poll系统调用阻塞在select操作上这样select/poll可以侦测多个fd是否处于就绪状态。当有fd就绪时立即回调函数rollback接下来就可以进行读取。 就像是我想吃顿好的于是选择去吃自助餐自助餐有很多餐区我先看看哪个餐区有我想吃的菜然后端着盘子去取就行了一个人就可以取多个菜肉、蔬菜、水果什么都能吃一点而且不用怎么等。
信号驱动式IOSignal-Driven I/O
信号驱动式IO利用信号机制来进行数据传输。
进程首先告诉内核当数据准备好时请发送一个SIGIO信号。进程继续执行其他任务等到收到信号后再开始进行数据传输。 就像是我去吃饭外带跟服务员打声招呼餐好了通知我这时候我就可以去干其它事情餐备好之后服务员通知我我取餐就行了。
异步IOAsynchronous I/O
异步IO是指当发起一个IO操作后系统会立即返回。异步IO操作在后台进行数据传输数据传输完成后系统将通知进程。这样在整个数据传输的过程中进程都可以执行其他任务不需要等待。 就像是准备吃饭了我自己懒得动直接在某团上点个餐点完之后爱干啥干啥等着快递小哥给我送到就行了。 可以看到阻塞和非阻塞主要指的是等待数据这个过程应用进程需不需要挂起同步和异步指的是等待数据和数据拷贝这两个过程应用进程需不需要挂起只有异步IO做到了完全异步。
那么最后一个问题我到底吃了啥——
搞点腊肉煮了个面条真香 参考
[1].《Netty权威指南》
[2]. 《Netty核心原理与RPC实践》