我的Web服务器使用通常的Java I/O和每个连接机制的线程。如今,随着用户的增加(长时间的轮询连接),他们开始屈服。但是,连接大部分处于空闲状态。尽管可以通过添加更多的Web服务器来解决此问题,但我一直在尝试对NIO实现进行一些研究。
我对此有好感。我已经阅读了基准测试,其中使用Linux中新的NPTL库的常规I
/ O 优于NIO。
通过Java I / O配置和使用最新的NPTL for Linux的真实生活体验是什么?有提高的表现吗?
在更大范围的问题上:
在我们期望正常运行(使用LinuxNPTL库)的标准服务器类计算机(具有四核处理器的Dell)中,最大I/O和阻塞线程(我们在Tomcat线程池中配置)的最大数量是多少?如果线程池真的很大,比如说有1000多个线程,会产生什么影响?
任何引用和指针将不胜感激。
挑衅性的博客文章 “避免NIO,获得更好的吞吐量”。保罗·泰玛)2008)的博客声称〜5000个线程没有任何麻烦;我听说人们要求更多:
- 启用NPTL后,Sun和Blackwidow JVM
1.4.2可以轻松扩展到5000+线程。阻塞模型始终比使用NIO选择器快25-35%。采用了EmberIO人士建议的许多技术-
使用多个选择器,如果第一次读取返回Java中等效的EAGAIN,则执行多个(2)读取。但是,我们无法使用Linux NPTL击败每个连接模型的普通线程。
我认为这里的关键是 衡量开销和性能 ,并仅在您知道需要并且可以证明有改善时才转向非阻塞I /
O。编写和维护非阻塞代码的额外工作应纳入您的决定。我的看法是, 如果可以使用同步/阻塞I / O清晰地表达您的应用程序 , 请执行该操作
。如果您的应用程序适合非阻塞I / O,而您不会只是在应用程序空间中严重地重新发明了阻塞I / O,请根据测得的性能需求 考虑使用nio 。
当我在google结果中四处搜寻时,我感到非常惊讶,实际上很少有资源引用任何(最新)数字 !
另外,请参阅PaulTyma的演示幻灯片:旧方法又是新方法。根据他在Google的工作,具体数字表明,同步线程I/ O在Linux上具有相当的可扩展性,并且认为“
NIO更快”是一个神话,这种说法已经存在了一段时间了,但是不再是。在“彗星日报”上还有一些不错的评论。他引用了NPTL上的以下结果(传闻,仍然没有到基准的牢固链接,等等…):
在测试中,NPTL在两秒钟内成功启动了IA-32上的100,000个线程。相比之下,在没有NPTL的内核下进行的测试大约需要15分钟
如果你真的遇到了可扩展性问题,可能需要调整线程堆栈大小使用XX:ThreadStackSize
。由于您提到Tomcat,请参见此处。
最后,如果您被束缚并决心使用非阻塞I /
O,则由知道自己在做什么的人尽一切努力在现有框架上进行构建。我浪费了太多时间来尝试获得正确的非阻塞I
/ O解决方案(由于错误的原因)。
问题内容: 非阻塞TCP / IP S和在NIO帮我处理与小数目的线程许多TCP / IP连接。但是UDP 呢?(我必须承认我对UDP不太熟悉。) 即使UDP发送操作未在阻止模式下运行,它似乎也不会阻止。确实存在因拥堵或类似原因导致阻塞的情况吗?我真的很好奇,是否存在这样的情况以及生产环境中可能存在的情况。 如果实际上并没有阻塞,并且我不打算使用已连接并仅绑定到一个端口,那么使用非阻塞模式和and
注:本节未经校验,如有问题欢迎提issue 介绍 akka.io包是由Akka和spray.io团队协作开发的。它的设计结合了spray-io模块的经验,并共同进行了改进,使其适应基于actor服务的更加普遍的消费需求。 该 I/O 实现的指导设计目标是要达到极端的可扩展性,要毫不妥协地提供一个API正确匹配底层传输机制,并且是完全的事件驱动、无阻塞和异步。该API命中注定是网络协议实现和构建更高
目标 了解 java.io.File 类的主要用途 了解如何使用字节流和字符流 了解如何从文件读取数据和向其中写入数据 处理外部数据 您在 Java 程序中使用的数据通常来自外部数据来源,比如数据库、通过套接字直接传输的字节或文件存储。大部分收集和处理外部数据的 Java 工具都包含在 java.io 包中。 文件 在所有可用于 Java 应用程序的数据来源中,文件是最常见的,通常也是最方便的。如
80386的I/O指令使得处理器可以访问I/O端口,以便从外设输入数据,或者向外设发送数据。这些指令有一个指定I/O空间端口地址的操作数。有两类的I/O指令: 1、 在寄存器指定的地址传送一个数据(字节、字、双字)。 2、 传送指定内存中的一串数据(字节串、字串、双字串)。这些被称作为“串 I/O指令”或者说“块I/O指令”。 8.2.1 寄存器I/O指令(Register I/O Instruc
80386 允许以以下的两种方式操作输入、输出: 通过独立的I/O地址空间(使用特定的I/O指令) 通过内存映射I/O(使用一般的指令操作数)
我有一个如下所示的文本文件: ...... 我需要读取这个文本文件并将其保存在一个HashMap中,其中奇数行是键,下面的偶数行是值。例如(A,苹果)。我试过下面的代码,它不工作。有人能给我一个提示或建议,告诉我如何才能做到这一点吗?