第一章Netty,NIO阻塞模式
基于前文对 FileChannel、Path 及 NIO.2 文件操作的讨论,需要澄清一个核心概念:传统的 FileChannel(用于文件 IO)并不支持配置阻塞/非阻塞模式,它始终是阻塞的。“NIO 阻塞/非阻塞模式”这一概念主要应用于 网络 IO,即 SocketChannel、ServerSocketChannel 和 DatagramChannel。一、核心区别:文件 vs 网络文件通道 (FileChannel)模式:仅阻塞。原因:文件系统底层实现通常不支持异步或非阻塞语义。当你调用 read() 或 write() 时,线程会一直等待直到数据完全读写完毕或发生错误。前文关联:前文提到的 transferTo、map 等操作均在此阻塞模型下运行,但通过零拷贝减少了 CPU 和内存拷贝开销,从而弥补了阻塞带来的部分性能损失。网络通道 (SocketChannel 等)模式:支持阻塞与非阻塞切换。方法:channel.configureBlocking(boolean block)。默认值:创建时默认为 阻塞模式 (true)。二、网络 NIO 的两种模式详解1. 阻塞模式 (Blocking Mode)行为:调用 read()、write()、accept()、connect() 时,若条件不满足(如无数据可读、连接未完成),线程会挂起等待,直到操作完成。特点:编程模型简单,类似传统 BIO,但每个连接需占用一个线程。适用场景:连接数少、逻辑简单的场景。ServerSocketChannelserver=ServerSocketChannel.open();server.configureBlocking(true);/