Unix下可用的五种 I/O 模型】的更多相关文章

介绍 当TCP客户端同时处理两个输入时:标准输入和TCP套接字,当客户端fgets(在标准输入上)被阻塞并且服务器进程被终止时,我们遇到了问题.服务器TCP正确地将FIN发送到客户端TCP,但由于客户端进程被禁止从标准输入读取,所以它从没有看到EOF,直到它从套接字读取(可能更晚). 如果一个或多个 I/O 条件准备好(即,输入准备好被读取,或者描述符能够获得更多输出),我们希望得到通知.此功能称为 I/O 多路复用,由select和poll函数以及前者的较新POSIX变体提供,称为pselec…
Unix下共有五种I/O模型: 1. 阻塞式I/O  2. 非阻塞式I/O  3. I/O复用(select和poll)  4. 信号驱动式I/O(SIGIO)  5. 异步I/O(POSIX的aio_系列函数)  io请求分两步: 1. 先将数据从存储介质(磁盘,网络等)拷贝到内核缓冲区,此时称为数据准备好,可以被用户应用程序读取. 2. 由用户应用程序拷贝内核缓冲区中的数据到用户缓冲区. ① 阻塞I/O模型            进程一直阻塞,直到数据拷贝完成 我们将函数recvfrom视为…
目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <I/O模型之四:Java 浅析I/O模型> 基本 Linux I/O 模型的简单矩阵: 每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点. Unix的五种I/O模型: 阻塞I/O:应用程序调用一个IO函数,导…
浅谈Linux下的五种I/O模型 https://www.cnblogs.com/chy2055/p/5220793.html  一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所示: 整个请求过程为: 用户进程发起请求,内核接受到请求后,从I/O设备中获取数据到buffer中,再将buffer中的数据copy到用户进程的地址空间,该用户进程获取到数…
转自:Unix网络编程中的的五种I/O模型 下面主要是把unp第六章介绍的五种I/O模型. 1. 阻塞I/O模型 例如UDP函数recvfrom的内核到应用层.应用层到内核的调用过程是这样的:首先把描述符.接受数据缓冲地址.大小传递给内核,但是如果此时 该与该套接口相应的缓冲区没有数据,这个时候就recvfrom就会卡(阻塞)在这里,知道数据到来的时候,再把数据拷贝到应用层,也就是传进来的地址空 间,如果没有数据到来,就会使该函数阻塞在那里,这就叫做阻塞I/O模型,如下图: 2. 非阻塞I/O模…
原文转自:  Windows Socket五种I/O模型 Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误.但功能强大.为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种…
转载:http://www.cnblogs.com/tianzhiliang/archive/2010/08/31/1813637.html 如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了选择(Select).异步选择(WSAAsyncSelect).事件选择(WSAEventSelect).重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型.每一种模型均适用于一种特定的应用场景.程序员…
因为项目需要,接触和使用了Netty,Netty是高性能NIO通信框架,在业界拥有很好的口碑,但知其然不知其所以然. 所以本系列文章将从基础开始学起,深入细致的学习NIO.本文主要是介绍五种I/O模型,概念是枯燥的,不过还是得理解才行. LINUX与UNIX中一些概念 在网络管理,Linux UNIX很相似.UNIX系统一直被用做高端应用或服务器系统,因此拥有一套完善的网络管理机制和规则, Linux沿用了这些出色的规则,使网络的可配置能力很强,为系统管理提供了极大的灵活性. 通俗一点讲,就是在…
转载自:http://blog.csdn.net/jay900323/article/details/18141217/ socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(…
来自   http://www.52im.net/thread-1935-1-1.html 4.互联网服务端处理网络请求的原理 首先看看一个典型互联网服务端处理网络请求的典型过程:<ignore_js_op> 由上图可以看到,主要处理步骤包括: 1)获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3): 2)构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4): 3)返回数据,服务器将已构建好的响应再通过内核空间的网络 I/O 发还给客户端(5-…
Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误.但功能强大.为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种: Windows Socket五种I/O模型——代码全攻…
6. I/O处理方式(5种I/O模型) 6.1 几个概念的辨析 (1)同步和异步 ①是访问数据的方式,主要是针对IO(资源.数据)而言的.关键在于I/O操作完成后,有没有提供通知机制. ②同步的IO,要求进(线)程主动去读写数据,在读写过程还是会阻塞.而异步I/O操作时,进程不主动读写数据,而是内核完成数据读写完成以后将通知进(线)程. (2)阻塞和非阻塞 ①是针对进(线)程而言的,进程要访问的数据是否就绪,是否需要等待. ②阻塞与非阻塞是针对同步应用而言的.IO操作分为两个阶段:等待数据和数据…
五种典型开发周期模型(瀑布.V.原型化.螺旋.迭代) 总结一下经常可以见到的系统开发周期模型.    在过去的几年里,可以很奇葩的碰到类似于“创业项目库”这种需求非常明确,工作量十分可控,对质量要求比较低,业务建模比较easy,功能构成比较少的“面子项目”.类似于这种项目,采用传统意义上的瀑布模型就非常合适了,如果范围控制和风险控制做的比较好的话,真的如同一个瀑布一样,会“飞流直下三千尺”,直接将项目送到客户的小机上,部署运行,大家欢乐的拿到绩效奖金,回家happy去了.    但是仅仅注重“面…
文档地址:https://www.cse.huji.ac.il/course/2004/com1/Exercises/Ex4/I.O.models.pdf 五种I/O模型: 1.  blocking I/O                 阻塞I/O 2. nonblocking I/O           非阻塞I/O 3. I/O multiplexing (select and poll)       I/O多路复用 4. signal driven I/O (SIGIO)       …
 http://blog.csdn.net/sinat_34990639/article/details/52778562  http://www.cnblogs.com/chy2055/p/5220793.html 一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所示: 整个请求过程为: 用户进程发起请求,内核接受到请求后,从I/O设备中获取数据到…
 一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所示: 整个请求过程为: 用户进程发起请求,内核接受到请求后,从I/O设备中获取数据到buffer中,再将buffer中的数据copy到用户进程的地址空间,该用户进程获取到数据后再响应客户端. 在整个请求过程中,数据输入至buffer需要时间,而从buffer复制数据至进程也需要时间.因此根据在这两段…
堵塞I/O(blocking I/O) 非堵塞I/O (nonblocking I/O) I/O复用(select 和poll) (I/O multiplexing) 信号驱动I/O (signal driven I/O (SIGIO)) 异步I/O (asynchronous I/O (the POSIX aio_functions)) 前四种都是同步.仅仅有最后一种才是异步IO. I/O过程分为两个过程,数据准备和数据拷贝 堵塞I/O模型: 该模型在两个过程中一直处于堵塞状态,直到数据拷贝完…
一. 什么是单例模式 只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在. 单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间: 能够避免由于操作多个实例导致的逻辑错误.如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用,那么单例模式也许是一个值得考虑的选择. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必…
一.IOCP(I/O Completion Ports)简介        要实现异步通信,必须要用到一个很风骚的I/O数据结构 ,叫重叠结构"Overlapped",Windows里所有的异步通信都是基于它的,完成端口也不例外.       Overlapped重叠结构 这里可以简单的将其理解为一个操作系统和用户之间的参数传递变量,属于"单IO数据"的一部分) (这张图是个人自己的理解,这两张图结合起来看) 当我们创建一个I/O完成端口的时候,系统内核实际上会创建…
下面都是以网络读数据为例 [2阶段网络IO] 第一阶段:等待数据 wait for data 第二阶段:从内核复制数据到用户 copy data from kernel to user 下面是5种网络IO模型 [阻塞blocking IO] 两阶段全程阻塞 recvfrom -> [syscall -> wait -> copy ->] return OK [非阻塞nonblocking IO] 第一阶段是非阻塞的不断检查是否数据准备好,第二阶段阻塞读取数据 recvfrom -&…
overview 这个字符到底是什么含义呢?其实它的意思就是当程序在等待设备操作的时候,可以继续往下做而不必阻塞到那个地方等待设备操作的返回,这就造成了程序运行和设备操作时间上的重叠.  Overlapped I/O也称Asynchronous  I/O,异步I/O模型.异步I/O和同步I/O不同,同步I/O时,程序被挂起,一直到I/O处理完,程序才能获得控制.异步I/O,调用一个函数告诉OS,进行I/O操作,不等I/O结束就立即返回,继续程序执行,操作系统完成I/O之后,通知消息给你.Over…
1.基本概念 1.1同步和异步 同步和异步关注的是消息通信机制 1.1.1同步 所谓同步,就是在发出一个调用时,在没有得到结果之前,调用就不返回,一直在等,但是一旦调用返回,就能得到返回值. 1.1.2异步 异步与同步相反,调用在发出之后,这个调用就直接返回了,调用者不能立刻得到结果,而是在调用彻底完成后,通过状态.通知和回调来通知调用者 1.1.3举例 你打电话问书店老板有没有<计算机网络>这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可…
I/O模型 UNIX下可用的5种I/O模型: (1)阻塞I/O (2)非阻塞I/O (3)I/O复用(select和poll) (4)信号驱动I/O(SIGIO) (5)异步I/O 对于一个套接口上的输入操作,第一步通常涉及等待数据从网络中到达.当所等待分组到达时,它被拷贝到内核中的某个缓冲区.第二步就是把数据从内核缓冲区拷贝到应用进程缓冲区. 1.阻塞I/O模型 最流行的I/O模型是阻塞I/O(blocking I/O)模型.缺省情况下,所有套接口都是阻塞的. 以数据报套接口作为例子,我们有下…
引言 上一篇文章中介绍了一些无缓冲文件I/O函数,但应该什么时机调用这些函数,调用这些I/O函数时进程和内核的行为如何,如何高效率地实现I/O?这篇文章就来谈一谈Linux下的5种I/O模型,以及高性能服务器编程中常用的I/O复用,为后面实现精简版本的高性能服务器做铺垫. Linux下的5种I/O模型 Linux下可用的5种I/O模型: 阻塞I/O 非阻塞I/O I/O复用 信号驱动式I/O 异步I/O 一个输入操作通常包括两个不同阶段: 等待数据准备好 从内核向进程复制数据 对于套接字的输入操…
http://blog.chinaunix.net/uid-25324849-id-247813.html 1. I/O模型 Unix下共有五种I/O模型 a. 阻塞I/O b. 非阻塞I/O c. I/O复用(select和poll) d. 信号驱动I/O(SIGIO) e. 异步I/O(Posix.1的aio_系列函数) 1). 阻塞I/O模型 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待.... 数据准备好了,从内核拷贝到用户空间 I/O函数返…
1. Unix的五种I/O模型 从上往下:阻塞程度(高-----低)I/O效率  (低-----高) 阻塞I/O(Blocking I/O):传统的IO模型 非阻塞I/O(Non-Blocking I/O): 注意这里所说的NIO并非Java的NIO(New IO)库. I/O多路复用(I/O Multiplexing): 经典的Reactor设计模式,有时也称异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型. 信号驱动I/O(Signal Driven I/O)…
Unix下I/O模型主要分为5种: (1)阻塞式I/O (2)非阻塞式I/O (3)I/O复用(select和poll) (4)信号驱动式I/O (5)异步I/O 1.阻塞式I/O模型 unix基本的套接字接口,例如:connect.accept.read/write.recv/send.recvfrom/sendto.recvmsg/sendmsg,它们默认是阻塞的. 2.非阻塞式I/O模型 调用fcntl可以把一个套接字设置成非阻塞式. 3.I/O复用模型 I/O复用是通过调用select或…
客户端:创建套接字,连接服务器,然后不停的发送和接收数据. 比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请求后,创建一个专门用于和该客户端通信的套接字和一个辅助线程.以后该客户端和服务器的交互都在这个辅助线程内完成.这种方法比较直观,程序非常简单而且可移植性好,但是不能利用平台相关的特性.例如,如果连接数增多的时候(成千上万的连接),那么线程数成倍增长,操作系统忙于频繁的线程间切换,而且大部分线程在其生命周期内都是处于非活动状态的,这大大浪费…
用户速度体验的1-3-10原则 性能影响 有很多研究都表明,性能对用户的行为有很大的影响: 79%的用户表示不太可能再次打开一个缓慢的网站 47%的用户期望网页能在2秒钟以内加载 40%的用户表示如果加载时间超过三秒钟,就会放弃这个网站 页面加载时间延迟一秒可能导致转换损失7%,页面浏览量减少11% 8秒定律:用户访问一个网站时,如果等待网页打开的时间超过8秒,会有超过30%的用户放弃等待 影响用户体验的几个因素 客户端硬件配置 客户端网络速率 客户端与服务端距离 服务端网络…
刚看完 UNIX 第五章内容,我想按照自己的方式将自己获得的知识梳理一遍,以便日后查看!先贴上一段简单的 TCP 服务器端代码: #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <error.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #d…