I/O 模型详解

阻塞 进程发起I/O调用,为完成之前,当前进程会被挂起 内核读取数据 用户主动查看数据是否加载完成
非阻塞 进程发起I/O调用,被调用函数完成之前不会阻塞当前进程而是立即返回  然后在时不时看函数调用是否完成 (盲等) 内核读取数据,内核响应数据给用户
同步 进程发起一个过程调用(功能、函数)调用后,在没得到结果之前,该调用将不会返回 用户进程数据等待内核数据同步
异步
进程发起一个过程调用,即便调用者不能立即得到结果,当调用却会返回

,返回时未完成状态,当调用完成后,内核会自行通知调用者已经OK

用户数据加载完内核数据后  内核在自行通知用户

I/O模型有5种:

同步阻塞 等待内核  进程数据
同步非阻塞 间断性主动访问内核
I/O复用  select()    poll()preform worker都是基于i/o复用  只是在同步非阻塞中多了一个select()用户还是要间断性访问 select()select最大打开1024 i/o第一阶段间断性访问 select第二阶段堵塞
事件驱动 epoll()  kqueue()event基于事件驱动第一阶段等待内核通知 第二阶段还是堵塞   内核加载完数据 会主动通知用户 边缘触发    内核加载完数据  通知一次给用户水平触发  内核加载完数据 多次通知 给用户
AIO(异步非阻塞) 支持不好(文件I/O支持  网络不支持)全部内核完成

同步阻塞:

同步非阻塞:

I/O复用:

事件驱动:

时间: 2024-10-21 12:32:17

I/O 模型详解的相关文章

OSI七层模型详解 TCP/IP协议

总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转换,数据加密 没有协议 会话层 解除或建立与别的接点的联系 没有协议 传输层 提供端对端的接口 TCP,UDP 网络层 为数据包选择路由 IP,ICMP,OSPF,EIGRP,IGMP 数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,MTU 物理层 以二进制数据形式在物理媒体上

日志模型详解

日志模型详解 NET Core的日志模型主要由三个核心对象构成,它们分别是Logger.LoggerProvider和LoggerFactory.总的来说,LoggerProvider提供一个具体的Logger对象将格式化的日志消息写入相应的目的地,但是我们在编程过程中使用的Logger对象则由LoggerFactory创建,这个Logger利用注册到LoggerFactory的LoggerProvider来提供真正具有日志写入功能的Logger,并委托后者来记录日志. 目录一.Logger  

Extjs4.10Model模型详解

一.创建Model模型 Extjs4.10提供了两种方法来创建Model模型,也就是创建类 方法一: Ext.define('person',{ extend:'Ext.data.Model'     //必须继承类 fields:[ {name:'name',type:'auto'}, {name:'age',type:'int'}, {name:'email',type:'auto'}, ] }); 方法二: Ext.regModel('person',{ fields:[ {name:'n

ThinkPHP中视图模型详解.

很多TP的新手对于模型中的视图模型不甚了解,官方虽然有详细手册,但是对于初学者来说还是比较难以理解! 先简单说一下视图模型所能实现的功能,基本就是主表与副表之间各个字段的关联问题,实现多表关联查询,相对于使用原生SQL语句来说,着实是简单不少. 首先在数据表初始化的时候,用的不是传统的M('User'),在视图模型中使用的是D('UserView'),如下图: 需要主要的是几个单词的首字母大写. 之后在Lib/Model目录中新建名为XXXViewModel.class.php(XXX为任意控制

配置模型详解

ASP.NET Core的配置(2):配置模型详解 在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvider,以及作为“中间人”的ConfigurationBuilder.接下来我们将会对由这三个核心对象组成的配置模型进行详细介绍,不过在此之前我们有必要来认识配置信息在不同载体中所体现出来的三种结构. 目录一.配置的三种结构逻辑结构原始结构物理结构

CUDA C 编程指导(二):CUDA编程模型详解

CUDA编程模型详解 本文以vectorAdd为例,通过描述C在CUDA中的使用(vectorAdd这个例子可以在CUDA sample中找到.)来介绍CUDA编程模型的主要概念.CUDA C的进一步描述可以参考<Programming Interface>. 主要内容包括: 1.Kernels(核函数) 2.Thread Hierarchy(线程结构) 3.Memory Hierarchy(存储结构) 4.Heterogeneous Programming(异构编程) 5.Compute C

WSAEventSelect模型详解

WSAEventSelect 是 WinSock 提供的一种异步事件通知I/O模型,与 WSAAsyncSelect模型有些类似.       该模型同样是接收 FD_XXX 之类的网络事件,但是是通过事件对象句柄通知,而非像 WSAAsyncSelect一样依靠Windows的消息驱动机制. 与WSAAsyncSelect模型相同,WSAEventSelect将所有的SOCKET事件分为如下类型:(共十种)                FD_READ , FD_WRITE , FD_OOB

Socket模型详解(转)

Socket模型详解(转) Socket模型详解 两种I/O模式 一.选择模型 二.异步选择 三.事件选择 四.重叠I/O模型 五.完成端口模型 五种I/O模型的比较 两种I/O模式 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误

vSocket模型详解及select应用详解

1.I/O复用:selec函数 在介绍socket编程之前,首先要熟悉下I/O多路转接技术,尽管SOCKET通信编程有很多模型,但是,在UNIX环境下,使用I/O多路转接模型无疑是一种更好的选择,UNIX下有5种I/0模型,分别是阻塞式I/O.非阻塞式I/O.I/O复用(select和poll).信号驱动式I/O,异步I/O.这5种方式都可用SOCKET编程,这里只介绍阻塞式I/O和I/O复用,如果向详细了解I/O模型的,可以参考<UNIX网络编程卷一:套接字联网API>,或着查看 Socke

I/O复用模型详解

一.httpd工作模型 prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求 worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程相应一个请求 event:线程模型,三级结构,主进程master负责生成子进程,每个子进程响应多个请求 二.I/O模型名词概念 同步/异步:关注的是消息通信机制 同步:synchronous,调用者等待被调用者返回信息,才能继续执行异步:asynchronous,被调用者通