Tomcat 从 8.x 版本开始将默认的 I/O 模型从 BIO (Blocking I/O) 切换为 NIO (Non-blocking I/O),并在 8.5 版本中彻底移除了 BIO 支持。这一变革主要基于以下核心原因:高并发需求、资源利用效率、以及应对现代网络环境(如慢速客户端和长连接)的挑战。 以下是详细的深度解析: 1. 突破并发瓶颈 (The C10K Problem) BIO (阻塞式 I/O) 的局限性: BIO 采用的是 “一个连接一个线程” (One-thread-per-connection) 的模型。每当有一个客户端连接进来,Tomcat 就必须分配一个独立的线程来处理。 如果并发量只有几百,BIO 没问题。 一旦并发量达到上千甚至上万(C10K 问题),服务器就需要创建成千上万个线程。 后果: 线程是操作系统昂贵的资源。过多的线程会导致内存溢出(OOM),且 CPU 会花费大量时间在“线程上下文切换”上,而不是处理实际业务,导致系统崩溃。 NIO (非阻塞 I/O) 的优势: NIO 采用 “多路复用” (I/O Multiplexing) 模型。它...