我是学渣。但我想进步。

本文是面试我的牛人问我的。你知道什么是堵塞、非堵塞和同步、异步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的更多相关文章

  1. 《网络编程》非堵塞 I/O

    概述 在前面文章中,我们介绍了 I/O 的五种模型<I/O 模型>.从那里能够知道,非堵塞式的 I/O 是进程调用 I/O 操作时.若数据未准备就绪.则马上返回一个 EWOULDBLOCK ...

  2. linux 下同步异步,堵塞非堵塞的一些想法

    补充: 发现一个更好的解释样例:同步是一件事我们从头到尾尾随着完毕.异步是别人完毕我们仅仅看结果. 堵塞是完毕一件事的过程中可能会遇到一些情况让我们等待(挂起).非堵塞就是发生这些情况时我们跨过. 比 ...

  3. 008. 阻塞&非阻塞、同步&异步

    阻塞 非阻塞:关注的对象是调用者: 阻塞:调用者发起调用后,处于等待状态,直到该调用有返回: 非阻塞:调用者发起调用后,不需要等待返回,可以往下执行: 同步 异步:  关注的对象是被调用者: 同步:服 ...

  4. Java网络编程和NIO详解3:IO模型与Java网络编程模型

    Java网络编程和NIO详解3:IO模型与Java网络编程模型 基本概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32 ...

  5. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

  6. c++ 网络编程(十) LINUX/windows 异步通知I/O模型与重叠I/O模型 附带示例代码

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9662931.html 一.异步IO模型(asynchronous IO) (1)什么是异步I/ ...

  7. 谈谈对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)

    一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...

  8. 服务器端IO模型的简单介绍及实现 阻塞 / 非阻塞 VS 同步 / 异步 内核实现的拷贝效率

    小结: 1.在多线程的基础上,可以考虑使用"线程池"或"连接池","线程池"旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲 ...

  9. I/O阻塞非阻塞,同步异步

    http://www.cnblogs.com/luotianshuai/p/5098408.html "阻塞"与"非阻塞"与"同步"与&qu ...

  10. 高性能IO设计模式之阻塞/非阻塞,同步/异步解析

    提到高性能,我想大家都喜欢这个,今天我们就主要来弄明白在高性能的I/O设计中的几个关键概念,做任何事最重要的第一步就是要把概念弄的清晰无误不是么?在这里就是:阻塞,非阻塞,同步,异步. OK, 现在来 ...

随机推荐

  1. iOS地图集成示例:百度地图POI检索

    一.集成百度地图(傻瓜教程,以网站说明文档为准,此处罗列几项主要步骤) 1.登录  http://lbsyun.baidu.com  百度地图开发者平台,获取SDK和集成文档. 2.百度地图可以提供的 ...

  2. Speex回声消除原理深度解析

    这里假设读者具有自适应滤波器的基础知识.Speex的AEC是以NLMS为基础,用MDF频域实现,最终推导出最优步长估计:残余回声与误差之比.最优步长等于残余回声方差与误差信号方差之比,这个结论可以记下 ...

  3. 深入理解Redis——(总纲)

    前言 Redis这个东西,我来来回回的也搞了好几遍,之前更偏向于实战,很多时候只知其然而不知其所以然,最近借阅了一本<深入理解Redis>,就系统的整理一下. 为何选择Redis 开源免费 ...

  4. Jquery中绑定事件的异同

    谈论jquery中bind(),live(),delegate(),on()绑定事件方式 1. Bind() $(selector).bind(event,data,function) Event:必 ...

  5. ABP的一些特性 (Attribute)

    大家应该很熟悉Attribute这个东西吧,ABP里面扩展了一些特性,做过滤权限,返回内容等进行控制,在这里小记下,方便后续查看. [DontWrapResult]  //ABP默认对返回结果做了封装 ...

  6. 联想笋尖S90(S90-t 、S90-u)解锁BootLoader

    工具下载链接: http://pan.baidu.com/s/1eSgZuka 备用下载链接: http://pan.baidu.com/s/1dFKqSId 本篇教程,仅限于联想笋尖S90(S90- ...

  7. linux ssh 经常断开 的解决方法

    1.现象 在linux ,用ssh进行远程连接时,经常会发生长时间后断线,或者是无响应,就像卡住的感觉(键盘输入不进去). 2.解决方法 在ssh客户端的linux设置 # sudo vim /etc ...

  8. 【Oracle】redo与undo

    一 .redo(重做信息) 是Oracle在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务.Oracle中记录这些信息的文件叫做redo log file ...

  9. Linux scp 后台运行传输文件

    Linux scp 设置nohup后台运行 1.正常执行scp命令 2.输入ctrl + z 暂停任务 3.bg将其放入后台 4.disown -h 将这个作业忽略HUP信号 5.测试会话中断,任务继 ...

  10. 多种效果进度指示层效果iOS源码项目

    该源码是一个多种效果进度指示层效果源码案例,源码KVNProgress,KVNProgress提供多种效果的进度指示层,有半透明效果,也支持全屏显示.指示层还高度支持自定义,可以按自己的需求定制.效果 ...