Java NIO(New I/O,自 JDK 1.4 引入)的线程模型通常是围绕 Selector(多路复用器)+ 少量线程处理大量连接 来设计的,常被称为 Reactor 模型。下面从核心组件、典型线程模型、常见变体和注意点几个层面说明。
Java NIO 本身是 非阻塞 I/O API,线程模型由你怎么用这些 API 决定:
(也是 Netty 前身、早期 NIO 示例常见模型)
+---------------------+
| Selector |
+---------------------+
|
accept / read / write
|
+---------------------+
| 单线程 EventLoop |
+---------------------+
acceptread / decode业务处理write / encode也称为 Reactor + Worker Thread Pool
Selector
|
+-------------+
| Reactor 线程 |
+-------------+
| |
read accept
|
+-----------+
| 线程池 |
| 业务处理 |
+-----------+
|
write
也称为 Multi-Reactor
Main Reactor (Boss)
|
| accept
v
Sub Reactor 1 (Worker)
Sub Reactor 2 (Worker)
Sub Reactor 3 (Worker)
acceptbossGroupworkerGroupchannel.configureBlocking(false);
OP_WRITENIO 只负责 I/O 多路复用,业务线程怎么排布是你自己的事
| 模型 | 每连接线程 | 并发能力 | 复杂度 |
|---|---|---|---|
| BIO | 1 个 | 低 | 低 |
| NIO 单 Reactor | 1 个 | 中 | 中 |
| NIO + 线程池 | 少量 | 高 | 中高 |
| 主从 Reactor | 少量 | 很高 | 高 |
Java NIO 的线程模型本质是:用少量线程通过 Selector 监听大量连接,再按职责拆分成 Reactor 线程和业务线程,最终形成 Reactor / 主从 Reactor 模型。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。