NIO 连接就绪后,数据由哪个线程读取

111次阅读
没有评论

很多人学到 Selector 时会卡在这里:内核都已经告诉你某个连接可读了,那数据到底是谁去把它读出来?答案通常没有那么神秘,标准 NIO 模型里还是线程自己继续调用 read()。

Selector 负责的是通知

Selector 的作用是告诉你哪些 Channel 已经就绪,比如可读、可写或可连接。它并不会替你把应用层数据直接搬到业务对象里。

真正读取通常是谁做

一般就是处理这次 select 结果的那个线程继续调用 read()。如果框架做了线程池切换,也只是把“谁来读、谁来执行业务”进一步拆分,不代表内核替应用完成了读取逻辑。

为什么这点重要

因为只有分清“收到就绪通知”和“真正消费数据”不是一回事,才能理解 Reactor、线程模型和业务解码为什么要分层设计。

结论

NIO 里可读事件只是一个信号,真正把数据读出来,通常还是由应用线程完成。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-03-13发表,共计358字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)