博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
I/O模型
阅读量:7181 次
发布时间:2019-06-29

本文共 762 字,大约阅读时间需要 2 分钟。

hot3.png

一般来说 I/O 模型可以分为:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞 四种IO模型
同步阻塞 IO :
在此种方式下,用户进程在发起一个 IO 操作以后,必须等待 IO 操作的完成,只有当真正完成了 IO 操作以后,用户进程才能运行。 JAVA传统的 IO 模型属于此种方式!
同步非阻塞 IO:
在此种方式下,用户进程发起一个 IO 操作以后 边可 返回做其它事情,但是用户进程需要时不时的询问 IO 操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的 CPU 资源浪费。其中目前 JAVA 的 NIO 就属于同步非阻塞 IO 。
异步阻塞 IO :
此种方式下是指应用发起一个 IO 操作以后,不等待内核 IO 操作的完成,等内核完成 IO 操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问 IO 是否完成,那么为什么说是阻塞的呢?因为此时是通过 select 系统调用来完成的,而 select 函数本身的实现方式是阻塞的,而采用 select 函数有个好处就是它可以同时监听多个文件句柄,从而提高系统的并发性!
异步非阻塞 IO:

在此种模式下,用户进程只需要发起一个 IO 操作然后立即返回,等 IO 操作真正的完成以后,应用程序会得到 IO 操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的 IO 读写操作,因为 真正的 IO读取或者写入操作已经由 内核完成了。目前 Java 中还没有支持此种 IO 模型。

    对于epoll系统调用来说,JAVA NIO是同步非阻塞io。同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态 。

转载于:https://my.oschina.net/netflasher/blog/663297

你可能感兴趣的文章
Hybird-App离线缓存系统
查看>>
探索两种优雅的表单验证——策略设计模式和ES6的Proxy代理模式
查看>>
Linux系统如何低于TCP洪水攻击
查看>>
【117天】尚学堂高琪Java300集视频精华笔记(13-17)
查看>>
redis数据迁移
查看>>
NodeJS文档之Module(1)-Module的简介
查看>>
使用User authentication and permissions
查看>>
Yii2 数据库复制和读写分离
查看>>
Facebook 将关闭旗下云端服务器 Parse
查看>>
解耦小技巧 - 接口最基本的使用策略
查看>>
[ ES6 ] 二. 使用 Babel 编译你的ES6代码
查看>>
java线程
查看>>
为医疗信息化插上智慧的翅膀
查看>>
Linux下的自动化运维ansible工具
查看>>
第九节:python pickle序列化、装饰器、模块
查看>>
我的友情链接
查看>>
windows XP 获取网卡MAC和IP地址
查看>>
python对象类型与运算
查看>>
SNMP 诊断方法
查看>>
ELK日志分析集群部署笔记
查看>>