网络编程----堵塞、非堵塞和同步、异步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, 现在来 ...
随机推荐
- 99.ext afteredit事件详解
转自:http://www.jcodecraeer.com/a/jquery_js_ajaxjishu/2012/0524/203.html 1 摘要 grid.on(afteredit,afterE ...
- String和八种基本数据类型互相转换
//String转换为对应的八种基本数据类型 String str="100"; //Value out of range. Value:"200" Radix ...
- MVC异步上传图片到本地/服务器
这两天朋友问我,有没有异步上传图片到本地/服务器这种demo,他有用, 我就想,好吧, 那刚好周末了,整理一套出来. 主要用到的是jquery uploadify 这个juqery的插件 ,可以无刷新 ...
- Windows phone开发之文件夹与文件操作系列(一)文件夹与文件操作
Windows phone7中文件的存储模式是独立的,即独立存储空间(IsolatedStorage).对文件夹与文件操作,需要借助IsolatedStorageFile类. IsolatedStor ...
- JavaScript中赋值运算符的使用
JavaScript中的赋值运算可以分为简单赋值运算和复合赋值运算.简单赋值运算是将赋值运算符(=)右边表达式的值保存到左边的变量中:而复合赋值运算混合了其他操作(例如算术运算操作)和赋值操作.例如: ...
- Android studio 添加引用新建类库
1.新建一个工程包 2.修改AndroidManifest.xml 将AndroidManifest.xml 修改为 <manifest xmlns:android="http://s ...
- 【SQL】ROWNUM和ROWID
一.ROWNUM ROWNUM伪列是Oracle先查到结果集之后再加上去的一个伪列,这个伪列对符合条件的结果添加一个从1开始的序列号,并且序列号是从1开始增序排列的. SQL> select r ...
- 在滑动3D模型(Cube)时,手指点击进入相应的某一部分
public void OnClickRay() { Ray ray = new Ray(); RaycastHit shootHit; ray.origin = cameras.transform. ...
- Linux 僵尸进程如何处理
Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态.例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止.如果子进 ...
- UVa OJ 679 - Dropping Balls
本题是一个二叉树问题——Perfect Binary Tree. 一个完美二叉树(PBT)的深度为D,从根结点开始,按层次遍历顺序编号为1,2,...,2D-1. 有若干个球,依次由根结点落下.当一个 ...