Vla*_*sny 26 java io networking nio
我在StackOverflow和一些博客上阅读了几篇关于java.net vs java.nio的帖子.但我仍然无法理解何时应该更喜欢NIO而不是螺纹插座.你能否在下面检查我的结论并告诉我哪些不正确以及哪些错过了?
因为在线程模型中,您需要为每个活动连接专用一个线程,并且每个线程为其堆栈提供250Kilobytes的内存,使用每个套接字模型,您将在大量并发连接上快速耗尽内存.与NIO不同.
在现代操作系统和处理器中,可以认为大量活动线程和上下文切换时间对于性能几乎无关紧要
NIO的整个吞吐量可以更低,因为异步NIO库在高负载环境中使用的select()和poll()比唤醒和放入休眠线程更昂贵.
NIO一直比较慢,但它允许您处理更多的并发连接.它本质上是一个时间/空间权衡:传统IO速度更快但内存占用更大,NIO速度更慢但使用的资源更少.
Java每个并发线程的硬件限制为15000/30000,具体取决于JVM,这会将每个连接模型的线程限制为此并发连接数最大,但JVM7将没有此限制(无法确认此数据).
所以,作为结论,你可以这样:
我对么?
这对我来说似乎是正确的,除了关于 Java 限制线程数 \xe2\x80\x93 的部分,该部分通常受其运行的操作系统的限制(请参阅Java VM 可以支持多少个线程?和Can'在 4GB iMac OSX 10.6.3 Snow Leopard(32 位)上,Java 无法超过 2542 个线程。
\n\n要达到这么多线程,您可能需要调整 JVM 的堆栈大小。
\n