总结NIO

本文深入探讨了系统I/O的基本概念,包括常见的I/O模型对比,如BIO、NIO、select、poll和epoll的区别。文章重点介绍了NIO如何通过改进读写函数,实现更高效地利用CPU资源,避免了传统BIO模型中多线程的资源浪费。同时,文中还详细解释了Reactor模式在NIO中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自Java NIO浅析

https://tech.meituan.com/2016/11/04/nio.html

常见I/O模型对比

https://blog.youkuaiyun.com/tjiyu/article/details/52959418

所有的系统I/O都分为两个阶段:等待就绪和操作

需要说明的是等待就绪的阻塞是不使用CPU的,是在“空等”;而真正的读写操作的阻塞是使用CPU的,真正在"干活",而且这个过程非常快,属于memory copy,带宽通常在1GB/s级别以上,可以理解为基本不耗时。

下图是几种常见I/O模型的对比:

回忆BIO模型,之所以需要多线程,是因为在进行I/O操作的时候,一是没有办法知道到底能不能写、能不能读,只能”傻等”,即使通过各种估算,算出来操作系统没有能力进行读写,也没法在socket.read()和socket.write()函数中返回,这两个函数无法进行有效的中断。所以除了多开线程另起炉灶,没有好的办法利用CPU

NIO的读写函数可以立刻返回,这就给了我们不开线程利用CPU的最好机会:如果一个连接不能读写直接返回(socket.read()返回0或者socket.write()返回0),我们可以把这件事记下来,记录的方式通常是在Selector上注册标记位,然后切换到其它就绪的连接(channel)继续进行读写

select、poll、epoll之间的区别

Reactor

http://www.jasongj.com/java/nio_reactor/

https://juejin.im/post/5b4570cce51d451984695a9b#heading-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值