异步I / O – Java
我一直在寻找有关
Java中异步I / O的优点的详细信息,特别是从应用程序堆栈设计.
我遇到过很多事件驱动服务器的例子,如Node.js,Tornedo等. 我无法理解的是,为什么在Java EE中使用JBoss或Weblogic应用服务器的整个应用程序堆栈迁移到事件驱动的体系结构. 甚至这些服务器也支持非阻塞I / O.是的,他们正在为每个请求分配一个线程,但是如果有一个线程池,资源是不是在良好的性能参数范围内呢? 请按以下方式向我提供一些意见. >为什么使用Apache-Tomcat / JBoss / Weblogic的传统Java EE体系结构考虑转向事件驱动的体系结构. 解决方法
您提到的一个关键概念是:
已经一次又一次地证明,当你的目标是支持大量并发用户时,每个请求一个带有IO绑定应用程序的线程最终会耗尽你的线程池.事实证明,你正在谈论的框架如Node.js,Tornado等,擅长处理大量并发用户,你的应用程序最有可能只是在等待某些事情发生而且没有做任何CPU完全约束的任务.换句话说,这些工具非常适合构建实时应用程序,如在线游戏,聊天室,日志记录系统,通知系统,其主要目标是尽快与许多用户快速协调小消息传递. 实际上,这些工具在编写基于websocket的应用程序方面非常出色,因为它实际上是为用户提供实时或接近实时的体验. 虽然许多公司确实从一开始就使用这些平台,但我认为传统堆栈的公司更常使用事件驱动工具作为其系统的补充.当你使用像node.js或Tornado这样的东西时,你可能会发现自己放弃了许多你依赖的内置软件,而不得不使用自己的api和驱动程序. node.js已经存在了一段时间了,实际上有很多支持连接到数据库,nosql平台和构建系统,但它需要一段时间才能实现. 作为一个实验,尝试编写一个简单的tcp聊天应用程序,每个请求使用一个线程,并查看您可以支持多少用户.最终,您将达到限制,您可以启动多少OS线程,这确实很昂贵. 然后看一下使用一个线程(即默认线程)可以在node.js中获得多少.您会发现每秒可以支持极大量的并发请求.众所周知,它可以扩展到数百万,因为它不受线程的限制,它只受内存,文件描述符数量和cpu限制. 尽我所能回答你的问题: >我认为仅仅因为你听到node.js和事件驱动的架构有多么简单而放弃整个平台是不可行的.如果您需要构建一个IO绑定的高度并发应用程序,您真的必须问自己.如果是这样,为什么不用它来补充你现有的堆栈呢?>我不确定你的第二个问题,你的设备是什么意思?>您可以基于传统工具在云中构建出色的应用程序,就像使用事件驱动的体系结构一样.事实上,它可能是一个“云”应用程序,实际上与选择平台无关.>我想说的更多是关于规模而不是性能.您可能会发现node.js应用程序比运行相同代码的Java应用程序运行得更慢或更快.但是node.js能够做的是允许更高的吞吐率,因为它不会达到我提到的那个线程限制.这也意味着您已经构建了一个适当的事件驱动的应用程序,您不会阻止它.如果你阻止,你就取下了整个系统! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |