理解 NIO 线程,关键是把“等待数据准备好”和“真正读写数据”这两件事拆开看。很多人以为用了 NIO 就完全没有线程阻塞,其实只是阻塞点和线程职责发生了变化。
线程先负责等事件
在典型 NIO 模型里,线程会调用 Selector 等待哪些 Channel 已经就绪。这个等待不是盯着单个连接死等,而是在统一监听一批连接的状态变化。
就绪后还要不要线程去读
要。Selector 告诉你某个连接可读,只代表数据已经准备到可以读取的阶段,真正执行 read()、解析协议、处理业务,仍然需要线程继续往下做。
NIO 节省的是什么
它节省的不是线程这个概念本身,而是减少了“一连接一线程”的浪费,让同一个线程可以管理更多连接。
结论
NIO 线程的核心职责是统一等事件、在连接就绪后触发实际读写,再把后续业务处理分发出去。
正文完




