Java NIO(New I/O,非阻塞 I/O)天生适合处理高并发、高连接数、低数据量的场景(如 IM、网关、推送服务)。下面从原理 → 核心组件 → 高并发设计要点 → 常见坑系统讲一下。
一个或少量线程,管理大量连接
通过:
SocketChannelServerSocketChannelDatagramChannelSelector selector = Selector.open();
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ);
Selector → 处理 accept / read / write
✅ 简单
❌ 业务阻塞会拖垮整站
Reactor线程:
- accept
- read
- write
业务线程池:
- 解码
- 业务逻辑
✅ 适合大多数高并发服务
✅ Netty 默认思路
Main Reactor:
- accept
Sub Reactor:
- read/write
✅ 百万连接级
✅ Netty / Nginx 同款
❌ 每次 new ByteBuffer
✅ 使用 ByteBuffer.allocate() 池化
Netty 使用
PooledByteBuf
FileChannel.transferTo()MappedByteBuffer适合:
OP_WRITEif (!buffer.hasRemaining()) {
key.interestOps(SelectionKey.OP_WRITE);
}
原生 NIO 的问题:
EventLoopGroup boss = new NioEventLoopGroup();
EventLoopGroup worker = new NioEventLoopGroup();
Java NIO 处理高并发的核心是:
用 Selector 做事件驱动,用少量线程管理海量连接,把耗时操作隔离出去。
如果你愿意,我可以:
你更想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。