Linux的IO模型
在输入输出系统一文中介绍了系统内核操作IO设备的机制。 我们了解到内核可以直接访问IO设备, 用户进程无法IO设备。
就是说IO操作需要分为两个过程, 内核从IO设备读取数据保存到内核空间, 将数据由内核空间拷贝到用户空间。
IO调用可以分为同步调用和异步调用。同步调用要求主线程采用轮询等机制主动检查IO状态; 异步调用下主线程发出IO调用并立即返回, 在IO完成后通过回调函数等通知机制通知主线程.
阻塞IO与非阻塞IO的区别在于等待内核从外部设备读取数据时主线程是否阻塞。
由此可见, 同步和异步调用关心的是消息通信机制,阻塞和非阻塞IO关心的是IO操作过程中主线程的状态。
Linux的IO模型中Non-Blocking, Multiplexing IO, Signal Driven IO通过同步调用实现了非阻塞调用.
Blocking IO
应用程序执行一次IO调用, 导致应用程序阻塞, 直到内核准备好数据报并完成拷贝后返回.
是最容易理解的一种IO模型.
Non-Blocking IO
主线程执行IO调用, 内核开始准备数据, 用户通过轮询检查数据是否就绪. 若未就绪则继续立即返回继续执行主线程, 若就绪则开始进行拷贝, 拷贝过程中用户线程被堵塞.
主线程在执行轮询后立即返回,说明这是非阻塞IO。但需要主线程主动轮询获得IO操作状态, 所以仍属于同步IO。
Multiplexing IO
select和epoll即是此IO模型的典型实现,一次IO操作中包含两次调用两次返回
多路IO复用可以实现对多个IO端口的监听, 内核一旦发现主线程指定的一个或者多个IO数据拷贝就绪, 它就通知主线程将数据拷贝到用户空间.
该模型中select或epoll等系统调用在内核态轮询IO状态。
Signal Driven IO (SIGIO)
信号驱动IO在等待数据阶段采用了不同的等待方式.
Asynchronous IO
Linux的IO模型的更多相关文章
- Socket-IO 系列(一)Linux 网络 IO 模型
Socket-IO 系列(一)Linux 网络 IO 模型 一.基本概念 在正式开始讲 Linux IO 模型前,先介绍 5 个基本概念. 1.1 用户空间与内核空间 现在操作系统都是采用虚拟存储器, ...
- LINUX五中IO模型
阻塞IO模型 用户空间调用recvfrom命令 直到数据包到达且被复制到应用进程的缓冲区或发生错误时才返回,这个过程中 进程亦或线程一直处于等待阻塞状态. 2.非阻塞IO模型 用户空间调用内核指令re ...
- Linux网络IO模型
同步和异步,阻塞和非阻塞 同步和异步 关注的是结果消息的通信机制 同步:同步的意思就是调用方需要主动等待结果的返回 异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函 ...
- Unix/Linux 网络 IO 模型简介
概述 Linux内核将所有外部设备都看做一个文件来操作.对该文件的读写操作会调用内核提供的系统命令, 返回一个fd(file descriptor)文件描述符.而对一个socket的读写也有相应的描述 ...
- Linux 服务器IO模型 epoll
epoll模型 #include <unistd.h> #include <sys/types.h> /* basic system data types */ #includ ...
- 7层网络以及5种Linux IO模型以及相应IO基础
一.七层网络模型 OSI是Open System Interconnection的缩写,意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,它是一个七层的. ...
- 从 Linux 操作系统谈谈 IO 模型(终)
Linux 为什么要区分内核空间与用户空间? Linux 操作系统的 IO 模型有哪几种?有啥区别? 常说的阻塞现象,到底是咋回事? 网络编程研发时,那块到底耗时最多,代码是否还有优化空间? 前几期的 ...
- Linux 网络编程的5种IO模型:异步IO模型
Linux 网络编程的5种IO模型:异步IO模型 资料已经整理好,但是还有未竟之业:复习多路复用epoll 阅读例程, 异步IO 函数实现 背景 上一讲< Linux 网络编程的5种IO模型:信 ...
- 从养孩子谈谈 IO 模型(一)
同步/异步.阻塞/非阻塞 说的是一回事儿吗? 同步/异步.阻塞/非阻塞 你能通俗易懂的讲清楚吗? Java 中的 BIO.NIO.AIO 你了解吗? Socket 编程你还会吗? Linux 操作系统 ...
随机推荐
- JMS 消息队列
1.jms broker服务器:Broker:消息队列核心,相当于一个控制中心,负责路由消息.保存订阅和连接.消息确认和控制事务
- vsm安装
一. 部署环境介绍 软件需求 1) CentOS 6.5 64bit 2) Ceph 0.80.6 网络拓扑介绍 1) Controller Node 由Console节点组成,安装VSM控制平台 2 ...
- Django:model中的ForeignKey理解
有两个数据模型栏目模型和文章模型ArticleColumn和ArticlePost ArticleColumn: class ArticleColumn(models.Model): # 用户与栏目是 ...
- .NET中的FileUpload控件的使用-Jquery(一)
FileUpload在HTML中是个常用的基础控件,在涉及到上传各种格式的文件时候都会用到:笔者前段时间正好用到它做上传功能,记录下来做一些累积, 前端到后台用的是的Jquery中的Ajax进行数据传 ...
- SQL2014 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
管理员身份运行 cmd -> 输入 netsh winsock reset
- eclipse代码提示javadoc背景为黑色框的解决办法
我的eclipse是近期下载的oxygen版本.不知道怎么出现了一个这个问题,鼠标悬停指向代码时应该出现的代码提示解释框,全为黑色,看不到文字.如下图 经过验证,最终解决方法为window->G ...
- OCP考试062题库出现大量新题-18
choose two Examine this command executed on a client that is remote from the database server. SQL> ...
- Elasticsearch重要文章之四:监控每个节点(ThreadPool部分)
http://zhaoyanblog.com/archives/754.html ThreadPool部分 Elasticsearch 内部使用了线程池,通过这些线程池之间的合作完成工作,在需要时传递 ...
- ST表的原理及其实现
ST表类似树状数组,线段树这两种算法,是一种用于解决RMQ(Range Minimum/Maximum Query,即区间最值查询)问题的离线算法 与线段树相比,预处理复杂度同为O(nlogn),查询 ...
- Akka(0):聊聊对Akka的初步了解和想法
前一段时间一直沉浸在函数式编程模式里,主要目的之一是掌握一套安全可靠的并发程序编程方法(concurrent programming),最终通过开源项目FunDA实现了单机多核CPU上程序的并行运算. ...