我在java.net和一些博客上读过几篇关于java.nio和StackOverflow的文章。但是,我仍然不知道什么时候应该更喜欢NIO而不是线程套接字。请你检查我下面的结论,告诉我哪些是不正确的,哪些是漏掉的?
输出来说几乎是微不足道的,因为在高负载环境中异步NIO库使用的select()和轮询()比唤醒和休眠线程更昂贵。
因此,作为结论,您可以这样做:
如果您有数以万计的并发连接-- NIO是一个更好的选择,除非请求处理速度对您来说是一个关键因素--如果您的请求处理速度低于这个速度--那么每个连接都是一个更好的选择(考虑到您有足够的内存来容纳所有并发线程的堆栈,直到maximum)
我说的对吗?
发布于 2011-03-25 20:29:11
这在我看来是正确的,除了关于Java限制线程数量的部分--这通常受到运行在其上的操作系统的限制(请参阅How many threads can a Java VM support?和Can't get past 2542 Threads in Java on 4GB iMac OSX 10.6.3 Snow Leopard (32bit))。
要到达这么多线程,您可能需要调整JVM的堆栈大小。
发布于 2012-01-19 21:18:27
我仍然认为传统IO中线程的上下文切换开销很大。在较高的级别上,只有当多线程不为相同的资源争用时,或者它们花费的时间比资源上的上下文切换开销高得多时,才能使用多线程获得性能。提出这个问题的原因是,使用新的存储技术(如SSD ),您的线程会更快地回到CPU上来竞争。
发布于 2012-04-10 01:47:53
没有一种构建NIO服务器的“最佳”方法,但是这个特定问题的优势表明人们认为存在!您的问题总结了适合这两个选项的用例,这些用例足以帮助您做出适合您的决定。
此外,混合解决方案也是可能的!当线程要做值得他们花费的事情时,您可以将通道交给线程,当它更好的时候,您可以坚持使用NIO。
https://stackoverflow.com/questions/5437722
复制相似问题