3

就在最近,我了解了 NIO。我的理解是,NIO 的主要优点是我们可以只用一个(或几个)线程处理许多连接,这要归功于 NIO 的非阻塞特性。但是我们不能使用 Executors 并拥有一个工作线程列表来实现这个目标吗?

我看不出 NIO 比 Executor 有任何优势。相反,我认为执行器比使用 NIO 更好,因为读取消息非常容易,例如我们只需要调用 readLin(),但是在 NIO 中,我们应该检查消息是否是部分的或缓冲区是否有多个消息。

非阻塞的特性也存在于executor的灵魂中,这里我们调用executor的execute函数,基本上就是将连接添加到一个buffer中,等待固定数量的线程空闲。

那么,为什么有人会使用 NIO 而不是使用 executors 呢?

谢谢

4

1 回答 1

0

在遇到可扩展性问题之前,多线程与 NIO 一样快(甚至比 NIO 更快)。线程过多导致性能低于 NIO。

但在某些情况下,据说多线程阻塞 IO 仍然比 NIO 更好:http: //paultyma.blogspot.com/2008/03/writing-java-multithreaded-servers.html

于 2016-07-15T03:08:43.173 回答