最近我在玩 Java 套接字和 NIO 来编写服务器。尽管我仍然不清楚为什么 Java NIO 会优于标准套接字。在使用这些技术中的任何一种编写服务器时,在大多数情况下,它归结为拥有一个接收连接并将它们进一步传递给工作线程的调度程序线程。
我已经读过,在线程模型中,每个连接都需要一个专用线程,但我们仍然可以创建一个固定大小的线程池并重用它们来处理不同的连接(从而降低创建和拆除线程的成本) .
但是对于 Java NIO,它看起来很相似。我们有一个接受请求的线程和一些在收到数据时处理数据的工作线程。
我发现 Java NIO 更好的一个例子是维护许多非繁忙连接的服务器,例如聊天客户端或 http 服务器。但无法真正理解为什么。