首页
有问必答
文章专栏
收获啦:热门问答
请问python map函数下参数func怎样才能传入2个参数进去?
如何高效地阅读 jQuery 源码?
Python新手,请教一下:什么是lambda函数?它有什么好处?
python中有哪些简单的算法
软件测试适合女生学吗?
云计算,计算机专业的能进行自学吗?网上有好的视频课程吗
发布
提问题
发文章
登录
注册
BIO与NIO、AIO的区别
2020-05-19 15:59
发布
站内问答
/
基础入门
11147
4
2
4条回答
野的像风
2021-12-15 18:17
先需要了解几个概念:同步和异步,阻塞和非阻塞。同步和异步同步:进程触发IO操作的时候,必须亲自处理;你必须亲自去银行取钱。异步:进程触发IO操作的时候,可以不亲自处理,它把操作委托给OS处理,委托的时候需要告知数据的地址和大小,然后自己去做别的事情,当IO操作结束后会得到通知;你把银行卡给我,让我帮你去银行取钱,你需要告诉我银行卡密码和取多少钱,我取完了之后把钱给你。总结:自己干就是同步,别人干就是异步。阻塞和非阻塞阻塞:进程触发IO操作的时候,如果此时此时没办法读或者写,那么进程就一直等待,直到读写结束;比如你去银行ATM取钱,前面有人在排队,那么就要一直等待,直到你取完钱;非阻塞:进程触发IO操作的时候,如果此时此时没办法读或者写,那么就先去做别的,等到有通知后,再继续读写;比如你去银行柜台取钱,人比较多,那就先领一个号,等着叫到号再去对应的窗口办理业务;这里不太恰当的是,我们等待的过程中,还得听着叫号。总结:我要等着不能做其他事就是阻塞,我不用等可以做其他事就是异步。BIO、NIO、AIOBIO:同步阻塞;一个请求过来,应用程序开了一个线程,等IO准备好,读写IO也是自己干;但是为一个请求就启动一个线程,开销是比较大的,因为启动和销毁线程开销很大,每个线程都要占用内存,所以可以引入线程池,可以在一定程度上减少这些开销;NIO:同步非阻塞;不用等待IO准备,准备好了会通知,不过IO操作还是要自己干;NIO是一种多路复用机制,利用单线程轮询事件,Channel来决定做什么,避免连接数多的时候,频繁进行线程切换导致性能问题(Select阶段阻塞)。AIO:异步非阻塞;因为事情不是自己做,其实也没有阻塞一说(都是非阻塞);AIO是在NIO的基础上,引入异步通道的概念;NIO是采用轮询的方式,不停地询问stream中数据是否准备好了,准备好了就处理;AIO是向操作系统注册IO监听,操作系统完成IO操作了之后,主动通知,触发响应的函数。我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
加载中...
查看其它4个回答
一周热门
更多
>
相关问答
女孩子学Java会不会很难?
12 个回答
【
转行
】
Java对于零基础转行的是不是很难?
7 个回答
java的话,自学很差,有什么办法能改善一下吗
156 个回答
【
css样式
】
在html中引入CSS样式的方式有哪些?
3 个回答
JAVA中反射是什么?
3 个回答
【
Android-SDK
】
Suface studio能做Java编程吗?
2 个回答
Java对于0基础转行的是不是很难?
4 个回答
【
编程语言
】
面向对象和面向过程有什么本质区别?
2 个回答
java求助
1 个回答
【
服务器
】
如何在js中调用php?
2 个回答
相关文章
如何控制Java流程
0 个评论
java自定义异常怎么使用
0 个评论
什么是Java异常
0 个评论
为什么都说Java就业难?原来Java应该这样学!
0 个评论
java中什么是类
0 个评论
Java的集合是什么意思
0 个评论
什么是Java反射
0 个评论
Java环境如何安装
0 个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
一周热门 更多>