阻塞I/O,非阻塞I/O,同步I/O,异步I/O
根据应用程序是否阻塞自身运行分为:
阻塞I/O:是指应用程序在执行I/O操作后,如果没有获得响应,
就会阻塞当前线程,不能执行其他任务。
非阻塞I/O:是指应用程序在执行I/O操作后,不会阻塞当前线程,
可以继续执行其他的任务
根据I/O响应方式的不同,可分为:
同步I/O:指收到I/O请求后,系统不会立刻响应应用程序,等到处理完成,系统
才会通过系统调用的方式,告诉应用程序I/O的结果。
异步I/O:指收到I/O请求后,系统会先告诉应用程序I/O请求已经收到,随后去异步
处理,等处理完成后,系统在通过事件通知的方式,告诉应用程序结果
阻塞,非阻塞和同步异步其实就是两个不同角度的I/O划分方式,它们描述的对象也不同;
阻塞非阻塞针对的是io调用者(即应用程序),而同步异步针对的是io执行者(即系统)。
举例如下:
同步异步
系统调用 read 是同步读,所以,在没有得到磁盘数据前,read 不会响应应用程序。
而 aio_read 是异步读,系统收到 AIO 读请求后不等处理就返回了,而具体的 read 结果,
再通过回调异步通知应用程序。
阻塞非阻塞
使用 send() 直接向套接字发送数据时,如果套接字没有设置 O_NONBLOCK 标识,
那么 send() 操作就会一直阻塞,当前线程也没法去做其他事情。
当然,如果你用了 epoll,系统会告诉你这个套接字的状态,那就可以用非阻塞的方式使用。
当这个套接字不可写的时候,你可以去做其他事情,比如读写其他套接字。
转载自:极客时间专栏。
阻塞I/O,非阻塞I/O,同步I/O,异步I/O的更多相关文章
- 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...
- 简述同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...
- 同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...
- python网络编程-同步IO和异步IO,阻塞IO和非阻塞IO
同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...
- Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别
1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于 ...
- 阻塞IO、非阻塞IO、同步IO、异步IO等
https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...
- Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结
转自:http://www.360doc.com/content/13/0117/12/5073814_260691714.shtml 同步和异步:与消息的通知机制有关. 本质区别 现实例子 同步模式 ...
- 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...
- 阻塞式和非阻塞式IO
有很多人把阻塞认为是同步,把非阻塞认为是异步:个人认为这样是不准确的,当然从思想上可以这样类比,但方式是完全不同的,下面说说在JAVA里面阻塞IO和非阻塞IO的区别 在JDK1.4中引入了一个NIO的 ...
随机推荐
- servlet传入多个数据
通过&来传入值:<a href="bookquery?page=1&nameBook=&author=&publisher=>1</a> ...
- EPICS Archiver Appliance的定制部署1
https://blog.csdn.net/weixin_43767046/article/details/112116112 简单部署试了一下之后,又试了下Site specific install ...
- python爬虫(含scrapy)
python爬虫 1.解析HTML: lxml 是一种python编写的库,可以迅速.灵活的处理xml和html 使用:根据版本的不同,有如下两种: 形式1: from lxml import etr ...
- aop中的名词解释
aop中的名词解释 aop spring Joinpoint(连接点) 目标对象中所有可以增强的方法叫做连接点 Pointcut(切入点) 目标对象中要增强的的方法 Advice(通知/增强) 增强的 ...
- C# 通过反射获取类字段名和值并加入到字典中(包含递归获取)
//测试类 public class HKAddvisitor1{ public string code { set; get; } public string msg { set; ge ...
- Abp+Vue iis发布报错 HTTP Error 500.30 - ANCM In-Process Start Failure
1.项目发布到文件系统 2.IIS设置 ABP 如果使用时Net Core 跨平台,它依赖AspNetCoreModuleV2模块(没有的话需要先安装) 下载地址:https://dotnet ...
- GPS地图生成03之数据获取
1. 引言¶ 六只脚是国内著名的户外网站,拥有大量的户外GPS轨迹路线,网址为:http://www.foooooot.com/ 2. 数据分析¶ 2.1 获取所有轨迹¶ 搜索关键 ...
- 两行CSS让页面提升了近7倍渲染性能
参考:https://juejin.cn/post/7168629736838463525 content-visibility.contain-intrinsic-size属性
- S-HR常用源码
1.public static String getUserId(Context ctx) { UserInfo userInfo = ContextUtil.getCurrentUse ...
- Prowide Core:SWIFT [tm] MT(FIN)消息传递的Java框架 开源
Prowide Core(以前称为WIFE)是用于管理SWIFT MT消息的开源Java框架. 库的主要功能是针对所有MT消息类型的全面Java模型,以及简单易懂的解析和构建API. 该项目自2006 ...