阻塞I/O,非阻塞I/O,同步I/O,异步I/O
2024-10-20 05:49:15
根据应用程序是否阻塞自身运行分为:
阻塞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,系统会告诉你这个套接字的状态,那就可以用非阻塞的方式使用。
当这个套接字不可写的时候,你可以去做其他事情,比如读写其他套接字。
转载自:极客时间专栏。
最新文章
- Windows一些零碎
- 构建seajs业务模块之grunt VS spm build
- 用js控制选项卡的隐藏与显示
- openstack的控制节点部署
- 【每日scrum】NO.2
- jQuery:balloon气泡提示插件
- C++描述基础算法之直接插入排序
- (转载)让ie6也支持max-width,和max-height实现图片等比例缩放
- EJS模板引擎
- 安全扫描工具 Netsparker
- [Swift]LeetCode376. 摆动序列 | Wiggle Subsequence
- asp.net通过distinct过滤集合(list)中重复项的办法
- python基础题型一
- 快速切题 poj2488 A Knight's Journey
- 利用python 下paramiko模块无密码登录
- spark总结——转载
- bzip2 --安装
- LightOJ1214 Large Division 基础数论+同余定理
- 雅虎天气API调用
- Python编程-面向对象和类
热门文章
- 学习Java Day 5
- bat脚本登陆ftp服务器
- SPA路由实现的基本原理
- Training Spiking Neural Networks with Local Tandem Learning
- 跳板攻击之:frp代理转发
- MyBatis 查询的条目与预期的不一致
- 推荐系统[八]算法实践总结V2:排序学习框架(特征提取标签获取方式)以及京东推荐算法精排技术实战
- SAP NOTE 489676 VF188异常
- 关于fetch请求中非表单模式(form)转化为form格式请求成功问题
- linux 替换csv的换行符(Linux 替换^M字符 方法)