网络编程----堵塞、非堵塞和同步、异步IO
我是学渣。但我想进步。
本文是面试我的牛人问我的。你知道什么是堵塞、非堵塞和同步、异步IO么?自觉得是分布式系统程序猿的我居然不知道。学习吧。
首先介绍堵塞IO和非堵塞IO:
堵塞IO:是指说程序等待socket文件的事件的时候。是处于堵塞状态的(这之中的过程是,线程进入suspend状态,被增加事件等待队列,退出CPU,将数据写回内存,简而言之就是linux内的schedule过程。)如图所看到的:、
举个样例,这就像是:你去饭店点一份午餐打包带走。从你去開始饭店就開始准备饭菜,你就在那里等着。直等到菜品齐全拿着回家吃。
这之中菜不做完,你就不会走。也不会干其它事情,就是堵塞在饭店等待事件。
非堵塞IO:
通过名称能够知道。这时与堵塞IO全然对立的方式,就是在等待IO事件的时候,仅仅是查询当前IO请求是否就绪,假设就绪则開始工作处理数据。假设没有就绪,则直接返回没有就绪。
举个样例:你去饭店买菜,告诉饭店你要的菜品后。饭店须要一段时间才干准备好你须要的饭菜。这时你还想去取钱,那你就先去取钱,然后过一会再来问菜做好没。假设做好了,那就拿菜走人,假设没做好。那就再去干点其他的事情,过一会再来问。这就是非堵塞的等待事件的发生。
你不会在饭店那里一直等待,仅仅会一次一次的去询问能否够拿菜了。
总结堵塞和非堵塞IO。它们之间的主要维度是堵塞还是不堵塞在当前的事件上面。堵塞就是在事件没有准备好的情况下。主动的schedule,让出自己的CPU时间,直到符合条件的事件出现(或者超时)。
非堵塞则是不会schedule,不会让出自己的CPU时间,直接返回成功或者没成功,由程序自由选择接下来的时间做什么,循环下次继续检查事件的就绪情况。
以下来介绍同步IO和异步IO。
同步IO:
同步IO是指在数据准备好以后,用户线程须要对数据进行自己的操作以达到效果,也就是同步IO是仅仅接收数据事件到来的通知。至于数据须要怎样处理。则须要另行商量。
举样例:你去餐厅买饭。餐厅会通过某种方式告知你,菜品准备好了。你就会到餐厅去取菜。这就是同步IO。
异步IO:
异步IO的意思是说,在事件的等待过程中。事件准备好了也不会告诉你,而是通过你们之前约定的数据处理方法进行处理。
在处理结束后再告知你完毕了。
举样例来说就是:你给饭店下单。然后告诉饭店说做好了就给我送到家里(你的地址)。
这样你就能够继续在家里玩游戏,看电视了。等菜品送到了,自然会通知你送到了。
由此可见。同步IO和异步IO的主要关注维度是数据准备好后的流程。同步IO是准备好了通知你,你再处理。
异步IO是事件准备好了不通知你。用之前定下的规则处理成功后再告诉你。
好好学习,天天向上。凡是。
。。凡是。。。。
网络编程----堵塞、非堵塞和同步、异步IO的更多相关文章
- 《网络编程》非堵塞 I/O
概述 在前面文章中,我们介绍了 I/O 的五种模型<I/O 模型>.从那里能够知道,非堵塞式的 I/O 是进程调用 I/O 操作时.若数据未准备就绪.则马上返回一个 EWOULDBLOCK ...
- linux 下同步异步,堵塞非堵塞的一些想法
补充: 发现一个更好的解释样例:同步是一件事我们从头到尾尾随着完毕.异步是别人完毕我们仅仅看结果. 堵塞是完毕一件事的过程中可能会遇到一些情况让我们等待(挂起).非堵塞就是发生这些情况时我们跨过. 比 ...
- 008. 阻塞&非阻塞、同步&异步
阻塞 非阻塞:关注的对象是调用者: 阻塞:调用者发起调用后,处于等待状态,直到该调用有返回: 非阻塞:调用者发起调用后,不需要等待返回,可以往下执行: 同步 异步: 关注的对象是被调用者: 同步:服 ...
- Java网络编程和NIO详解3:IO模型与Java网络编程模型
Java网络编程和NIO详解3:IO模型与Java网络编程模型 基本概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32 ...
- C#网络编程系列(两)它Socket同步TCPserver
声明原文 笔者:竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...
- c++ 网络编程(十) LINUX/windows 异步通知I/O模型与重叠I/O模型 附带示例代码
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9662931.html 一.异步IO模型(asynchronous IO) (1)什么是异步I/ ...
- 谈谈对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)
一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...
- 服务器端IO模型的简单介绍及实现 阻塞 / 非阻塞 VS 同步 / 异步 内核实现的拷贝效率
小结: 1.在多线程的基础上,可以考虑使用"线程池"或"连接池","线程池"旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲 ...
- I/O阻塞非阻塞,同步异步
http://www.cnblogs.com/luotianshuai/p/5098408.html "阻塞"与"非阻塞"与"同步"与&qu ...
- 高性能IO设计模式之阻塞/非阻塞,同步/异步解析
提到高性能,我想大家都喜欢这个,今天我们就主要来弄明白在高性能的I/O设计中的几个关键概念,做任何事最重要的第一步就是要把概念弄的清晰无误不是么?在这里就是:阻塞,非阻塞,同步,异步. OK, 现在来 ...
随机推荐
- [Apple开发者帐户帮助]三、创建证书(6)创建创建VoIP服务证书
VoIP:基于IP的语音传输(英语:Voice over Internet Protocol,缩写为VoIP)是一种语音通话技术,经由网际协议(IP)来达成语音通话与多媒体会议,也就是经由互联网来进行 ...
- Django 创建新项目后要完成的几个步骤
首先,在过一遍创建新项目的步骤: -创建一个新项目 -建了数据库后要确定自己是用 mysql数据库 还是用 sqlite3数据库 -如果是mysql数据库,那一堆配置 -如果是sqlite3数据库, ...
- layui富文本编译器添加图片
1.创建富文本编辑器 <form class="layui-form" method="post" id="myForm" encty ...
- UOJ 129/BZOJ 4197 寿司晚宴 状压DP
//By SiriusRen #include <cstdio> #include <algorithm> using namespace std; ; struct Node ...
- POI合并单元边框问题解决方法
http://blog.csdn.net/hardworking0323/article/details/51105430
- span标签对于margin-top,margin-bottom无效,但是margin-left,margin-right却是有效的。
首先,span是行内元素,是没有宽高的. 我们来做个简单的布局 <div> <span>内容内容内容内容内容内容内容内容</span> </div> 页 ...
- Java多线程-synchronized关键字
进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行. 一个进程中至少有一个线程 Ja ...
- 解决无法移除tomcat中的项目
问题:启动myeclipse,tomcat提示报错,blind,但是你移除的时候无法移除,只会显示一个黄色的感叹号,此时你直接在webapp中删除时,也提示呗占用无法删除. 办法:关掉myeclips ...
- 【PostgreSQL-9.6.3】创建、修改、删除数据库
1.创建数据库 create database database_name; 2.修改数据库的名称 alter database database_name rename to new_databas ...
- Eclipse代码自动提示(内容辅助content assist)
Eclipse中默认是输入"."后出现自动提示,用于类成员的自动提示,可是有时候我们希望它能在我们输入类的首字母后就出现自动提示,可以节省大量的输入时间(虽然按alt + /会出现 ...