netty详解之io模型

news/2024/7/9 17:18:42 标签: netty, epoll

提起IO模型首先想到的就是同步,异步,阻塞,非阻塞这几个概念。每个概念的含义,解释,概念间的区别这些都是好理解,这里深入*nix系统讲一下IO模型。

在*nix中将IO模型分为5类。

  1. Blocking I/O
  2. Nonblocking I/O
  3. I/O Multiplexing (select and poll)
  4. Signal Driven I/O (SIGIO)
  5. Asynchronous I/O (the POSIX aio_functions)

阻塞 I/O(blocking IO)

bio.png

如图所示,系统调用recvfrom,内核kernel等待数据数据准备完成,在数据准备完成后将数据从内核态拷贝到用户态,recvfrom直到整个过程结束后才完成,在整个过程中经历2次阻塞。

非阻塞 I/O(nonblocking IO)

nio.png

如图所示,系统调用recvfrom,内核kernel在数据没有准备完成时直接返回,系统会不断轮询,在kernel准备完成数据后将数据从内核态拷贝到用户态,在等待数据完成的过程中并不阻塞。

I/O 多路复用( IO multiplexing)

mio.png

如图所示,IO multiplexing 使用select,poll,epoll等实现单个kernel的进程/线程处理多个IO请求,IO复用将等待数据准备和将数据拷贝给应用这两个阶段分开处理,让一个线程(而且是内核级别的线程)来处理所有的等待,一旦有相应的IO事件发生就通知继续完成IO操作,虽然仍然有阻塞和等待,但是等待总是发生在一个线程,这时使用多线程可以保证其他线程一旦唤醒就是处理数据。

信号驱动 I/O (Signal Driven I/O)

sio.png

如图所示,系统调用recvfrom试图读取数据,并且直接返回,不管是否有数据可读,内核线程读完数据,给发信号通知应用线程,应用线程收到信息,等待内核线程将数据拷贝给应用线程。

异步 I/O(asynchronous IO)

aio.png

如图所示,系统调用aio_read,内核kernel直接返回,系统不需要阻塞,继续做其他事情。kernel则进行等待数据准备完成,并将数据拷贝到用户态后,发送signal信号通知系统已经完成。

各个IO模型的对比

dio.png

转载于:https://www.cnblogs.com/minotaursu/p/6432606.html


http://www.niftyadmin.cn/n/1093451.html

相关文章

Samba文件服务器安装配置

很久都没有更新博客了,人要学好难,跟着学坏容易,这个其实是我一直以来不明白的地方。如果,能反过来,应该是很多人求之不得的美事吧。说远了,我就是这种一放松下来,就容易堕落的一份子。 最近也是…

编译LDD3的scull驱动问题总结

由于Linux内核版本更新的原因,LDD3(v2.6.10)提供的源码无法直接使用,下面是本人编译scull源码时出现的一些问题及解决方法。编译环境:CentOS 6.3(kernel version 2.6.32)编译错误:ma…

示波器(oscilloscope )学习(1)-简介

突然接到师兄发来的资料,需要学习示波器。虽然大学时候接触过(模电数电),初中高中物理里面也介绍过,但是却没有真正学会使用。现在再来仔仔细细的学习一下,把在网上看的知识,个人觉得有用的&…

jquerymobile基础应用小结(一)

过渡效果:data-transition"fade"(默认); 按 钮:data-role"button" 默认按钮是全屏的,若想添加用data-inline:true; 若是一组的用data-role"controlgroup" 属性与 data-type"horizontal\ve…

10 个免费超棒的编程用等宽字体

文章转载自:开源中国社区 [http://www.oschina.net] 太多程序员没有太多心思去关注他们每天都在面对的编程字体,然后编码工作需要长时间盯着屏幕并阅读一些非常复杂的文本。一个好的字体可以很大程度上提升阅读代码的愉悦感,提高生产力。 …

OC

.OC的概述:1.具备完善的面相对向特性2.包含一个运行时系统3.类库丰富 类:一批有共同特点的东西。具有相同特征和行为的事物的抽象。对象:类里面的一个具体的东西类和对象是面向对象的核心。对象是类的实例,类是对象的类型。定义类&#xff1a…

Rhythmbox中文乱码

建立一个Rhythmbox播放器的图标到Panel或者桌面或者任何可以修改图标内容的地方 解决: 图标上,右键 -> 属性 -> 命令 改为 env GST_ID3_TAG_ENCODINGGBK rhythmbox %U (原为rhythmbox %U) 然后以新的图标启动rhythmbox,清空原有的媒体库,重新导…

随笔-2-23

一 进程管理 疑问:通过后台进程停止的程序,会释放资源吗? v$session 用户进程 SID SERIAL# PROGRAM v$process 服务器后台进程 二 undo表空间 undo的三个初始化参数: undo_management auto undo段自动扩展 undo_retention 900 und…