网络I/O模型--5种常见的网络I/O模型

阻塞与非阻塞

  阻塞就是卡在那儿什么也不做,双方之间也没有信息沟通。

  非阻塞就是即使对方不能马上完成请求,双方之间也有信息的沟通。

同步与异步

  同步就是一件事件只由一个过程处理完成,不论阻塞与非阻塞,最后完成这个事情的都是同一个过程

  异步就是一件事由两个过程完成,前面一个过程通知,后面一个过程接受返回的结果。

异步和事件驱动(multi IO)

  异步是指数据准备好并且已经拷贝到用户空间,在通知用户来取数据

事件驱动理解为准备好数据了但是没有拷贝到用户空间,这个时候去通知用户,用户再去取数据,经过拷贝过程取得数据。

5种常见的网络I/O模型

  • blocking I/O  -- 阻塞类型的I/O
  • nonblocking I/O -- 非阻塞类型的I/O
  • I/O Multiplexing -- 多路复用型I/O 
  • Signal-Driven I/O -- 信号驱动型I/O
  • Asynchronous I/O -- 异步I/O 

  

 

1. blocking I/O  -- 阻塞类型的I/O

  流程图如下:

    

  linux下socket默认是阻塞的,阻塞模式在准备数据和拷贝数据两个过程都是阻塞的,在这期间客户端一直卡着,双方也没有数据交流。

2.nonblocking I/O -- 非阻塞类型的I/O

  流程图:

    

    linux下使用fcntl方法将socket设置为非阻塞模式

    flags = fcntl(sockfd, F_GETFL, 0);                        //获取文件的flags值。

fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);   //设置成非阻塞模式;

  非阻塞模式下,如果数据还没有准备好,服务端会返回error,客户端根据这个error判断后,再次发起recv,直到数据准备好,这个过程虽然客户端也在这里卡着了,但是这期间一直和服务有着信息交换。

3.I/O Multiplexing -- 多路复用型I/O

  流程图:

       

  多路复用型IO,有的也称为事件驱动型IO,常用select,poll,epoll来处理多个IO连接状态。当某个IO连接的数据准备好了,select返回,通知用户进行read操作,这种IO的好处是一次可以监听多个连接,坏处是要两次调用,两次返回,单个连接和非阻塞IO没有多大的性能提升。

    在多路复用模型中,对于每一个socket,一般都设置成为non-blocking,但是,如上图所示,整个用户的process其实是一直被block的。只不过process是被select这个函数block,而不是被socket IO给block。因此select()与非阻塞IO类似。

4.Signal-Driven I/O -- 信号驱动型I/O

  流程图:

  

  首先我们允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。

5.Asynchronous I/O -- 异步I/O

  流程图:

    

  当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者的输入输出操作

  

参考资源:

  http://www.cnblogs.com/findumars/p/6361627.html

  https://www.cnblogs.com/kunhu/p/3624000.html

  

原文地址:https://www.cnblogs.com/Zhangyq-yard/p/10114785.html

时间: 2024-09-30 00:00:41

网络I/O模型--5种常见的网络I/O模型的相关文章

自然语言处理中CNN模型几种常见的Max Pooling操作

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型.图1展示了在NLP任务中使用CNN模型的典型网络结构.一般而言,输入的字或者词用Word Embedding的方式表达,这样本来一维的文本信息输入就转换成了二维的输入结构,假设输入X包含m个字符,而每个字符的Word Embedding的长度为d,那么输入就是m*d的二维向量. 图1 自然语言处理中CNN模型典型网络结构 这里可以

103.219.308种常见的网络***类型

根据浏览器的网络***与第二种常见类型相关联.他们企图经过网络浏览器破坏机器,这是人们运用互联网的最常见办法之一. 浏览器*** 根据浏览器的网络***与第二种常见类型相关联.他们企图经过网络浏览器破坏机器,这是人们运用互联网的最常见办法之一.浏览器***一般始于合法但易受***的网站.***者***该站点并运用歹意软件感染该站点.当新拜访者(经过Web浏览器)抵达时,受感染的站点会尝试经过运用其浏览器中的缝隙将歹意软件强制进入其体系. 暴力破解 暴力破解***类似于打倒网络的前门.***者企图

#19 子网掩码的由来,与几种常见的网络协议

子网掩码: 对应的IP地址中,网络位1,主机位0 IP地址和子网掩码进行逻辑"与"运算,得到的结就是IP地址所对应的网络地址: 主机(终端)使用子网掩码的方式: 将本次通信的目标IP地址与本地IP地址所使用的子网掩码进行逻辑"与"运算,同时也要使用同一个子网掩码与本地IP地址进行逻辑"与"运算,比较这两个结果,如果相同,则表示两台主机位于同一逻辑网段中,可以直接利用ARP协议解析目标主机的Mac地址,从而进行数据通信:否则,无法直接利用ARP协议

几种常见的网络装置汇总以及网络连接方法

首先,对于win7的笔记本而言,由于笔记本中有内嵌的无线网卡,可以直接设置wifi热点:下载connectify,安装完成后就可以直接当做wifi热点了.值得指出的是,当然也可以用市面上的随身wifi作为工具来设置wifi了.但是,自认为这是没有意义的,也即是间接地购买了一个工具. 随身wifi本质上就是一个无线路由器,无线路由器就是将宽带里面的信号通过随身wifi热点来分享出来,这也就是很多人都带随身wifi出差的原因.例如,在酒店中,通过笔记本(当然笔记本就可以不需要这个随身wifi了,但是

几种经典的网络服务器架构模型的分析与比较

原文出处:http://blog.csdn.net/lmh12506/article/details/7753978 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用:事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序.ftp 服务器程序等.相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率. 关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,

简谈-网络爬虫的几种常见类型

众所周知,网络爬虫(或称为网络爬虫.网络蜘蛛.机器人)是搜索引擎最上游的一个模块,是负责搜索引擎内容索引的第一关. 很多人为了提高自己网站的索引量,都是去网上随便找一些爬虫工具来使用.但是很多人不知道,这些抓取网站的小爬虫是有各种各样的不同性格的. 常见的优秀网络爬虫有以下几种类型: 1.批量型网络爬虫:限制抓取的属性,包括抓取范围.特定目标.限制抓取时间.限制数据量以及限制抓取页面,总之明显的特征就是受限: 2.增量型网络爬虫(通用爬虫):与前者相反,没有固定的限制,无休无止直到抓完所有数据.

推荐系统的几种常见模型概述

某个选修课的论文,这里贴过来,之所以贴过来,是因为我认为自己写的确实非常有意义,网上对这个东西确实没有很系统的中文介绍,我自己也是看了许多论文自己也动手做了很多很多实践才领悟的. 这个只是概论,以后有时间再加上具体的模型.算法. ----------------------------------------------------------------------------- 总的来说,推荐系统的目标可以分为预测评分和物品推荐两种,目前对前者的研究也更多,因为前者更适合建复杂的模型,所以这

PHP几种抓取网络数据的常见方法

//本小节的名称为 fsockopen,curl与file_get_contents,具体是探讨这三种方式进行网络数据输入输出的一些汇总.关于 fsockopen 前面已经谈了不少,下面开始转入其它.这里先简单罗列一下一些常见的抓取网络数据的一些方法.//1. 用 file_get_contents 以 get 方式获取内容:$url = 'http://localhost/test2.php';$html = file_get_contents($url);echo $html; //2. 用

网络爬虫的几种常见类型

常见的优秀网络爬虫有一下几种类型: 1.批量型网络爬虫:限制抓取的属性,包括 抓取范围,特定目标,限制抓取时间,限制数量以及相知抓取页面,总之明显的特征就是受限, 2.增量网络爬虫(通用爬虫):与前者相反,没有固定的限制,无休无之直到抓取万所有的数据,这种类型一般用于搜索引擎的网站或程序. 3.垂直网络爬虫(聚焦爬虫):简单的可以理解为一个无限西华的增量网络爬虫,可以细致的对诸如行业,内容,发布时间,页面大小等很多因素进行筛选. 这些爬虫的功能不一,使用的方法也不同,例如谷歌,百度搜索就使用的增