阻塞是怎么回事?

java中的io与nio主要区别在于阻塞上
io采用的是阻塞
nio可自定义
阻塞与非阻塞到底有什么不同?其底层是怎么实现的呢?
从内核的角度来理解,就是进程的阻塞 运行状态的切换
阻塞实际上是进程在等待资源,而资源没有就绪(如网卡数据没到来),那么进程就进入阻塞状态。
这个进程什么时候再投入运行呢 ---- 等网卡数据到来时即可继续运行了

阻塞IO的缺点是占用了一个进程,却让这个进程在阻塞队列中睡大觉
好比我请了一个工人干活却因为水泥没到,只好让工人傻等着,还得管吃管住,白白浪费资源

阻塞式IO数量比较少的时候问题不明显,并发稍微大一些系统就吃不消了,如有1000个进程都在阻塞,那么你的机器估计什么都干不了了,资源全浪费了
那位大哥问了,浪费的是什么资源?
是这样的,系统能够创建的进程是有上限的 最大几千个吧
如果有1000个处在阻塞中是不是一种浪费呢
另外就是进程调度,这么多的阻塞进程参与进程调度,会浪费一些时间

======================================

非阻塞进程是怎么工作的呢?
非阻塞进程去读取网卡数据,如果数据没来 则立即返回而不是在那儿傻等
返回后进程可以继续干别的事情,等网卡的数据来了会主动通知进程的
这样就使进程化被动为主动了

非阻塞IO的威力在于作为Server端,接收客户端高并发请求时
只需要启动一个进程即可处理成千上万的客户端请求,充分利用了资源

======================================

[color=red]网上很多人都说nio提高性能,我个人不太认同
nio只是数据读写的方式与以往不同,数据的传输速度没有任何变化,处理速度也没有变化
如有一个网络数据包在12:00到达网卡,那么它不会因为采用了IO或NIO而改变到达时间
这个数据包处理需要20ms,同样它不会因为采用了IO或NIO而缩短处理时间

NIO只是提高了资源的利用率[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值