【发布时间】:2011-07-10 12:56:40
【问题描述】:
我几乎已经决定不使用异步、非阻塞的 Java NIO。总体而言,复杂性与收益之间的关系非常值得怀疑,我认为在这个项目中特别不值得。
但我读到的关于 NIO 的大部分内容,以及与旧 java.io.* 的比较都集中在非阻塞、异步 NIO 与使用 java.io.* 的每个连接线程同步 I/O 上。但是 NIO 可以用在同步、阻塞、线程一个连接的模式下,这似乎很少讨论。
问题来了:同步阻塞 NIO 与传统同步阻塞 I/O (java.io.*) 相比有什么性能优势吗?两者都是每个连接的线程。复杂度如何比较?
请注意,这是一个普遍的问题,但目前我主要关注 TCP 套接字通信。
【问题讨论】:
-
+1 表示谨慎 - 复杂性应该是可怕的。
-
您不能将每个线程连接与阻塞操作一起使用,每个连接需要 2 个线程。
-
(继续) ...除非你只是在做请求/响应的事情。如果您使用 socket.getInputStream.read() 您将失去直接缓冲区的所有好处,但 impl。仍然使用选择器来阻止读取。我想不出为什么(以及在哪个操作系统上)它应该有好处。
-
stackoverflow.com/a/4752404/32453 提到阻塞模式下的 NIO 更快...
标签: java performance io nio blocking