网络编程----阻塞、非阻塞和同步、异步IO
来源:互联网 发布:微淘与淘宝达人 编辑:程序博客网 时间:2024/06/06 15:40
我是学渣,但我想进步。
本文是面试我的牛人问我的,你知道什么是阻塞、非阻塞和同步、异步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
- 网络编程io总结区分。阻塞,非阻塞,异步,同步
- 网络IO-阻塞、非阻塞、同步、异步
- 网络编程-阻塞非阻塞同步异步
- 网络编程概念:同步、异步、阻塞和非阻塞
- Android 网络编程之同步,异步,阻塞和非阻塞
- 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
- 广义同步&异步 阻塞&非阻塞 及 网络IO中的同步&异步,阻塞&非阻塞
- 网络IO,阻塞,非阻塞,异步,同步io的总结
- Unix网络编程:阻塞、非阻塞、同步io、异步io的区别
- 阻塞,非阻塞IO和同步,异步IO
- 阻塞,非阻塞IO和同步,异步IO
- 阻塞,非阻塞IO和同步,异步IO
- 阻塞,非阻塞IO和同步,异步IO
- java 同步阻塞io和异步非阻塞io
- 网络IO之阻塞、非阻塞、同步、异步总结
- 网络IO之阻塞、非阻塞、同步、异步总结
- 网络IO之阻塞、非阻塞、同步、异步总结
- C# 正则表达式匹配多层嵌套的括号里面的内容 百度api逆地址解析
- hadoop学习笔记 Hadoop进程
- hdoj继续畅通工程
- 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]
- java 效率编程 的一些小知识点
- 网络编程----阻塞、非阻塞和同步、异步IO
- DPDK代码内存分析
- Quartz 参数说明
- redmine 安装实现全过程细节
- ios 画虚线
- 算法痕迹---并查集
- JVM 基础知识
- 多线程编程基础知识
- APP常用设置尺寸