Sur*_*j M 5 javascript java io performance event-driven
我一直在寻找有关Java中异步I/O的优点的详细信息,特别是从应用程序堆栈设计.
我遇到过很多事件驱动服务器的例子,如Node.js,Tornedo等.
我无法理解的是,为什么在Java EE中使用JBoss或Weblogic应用服务器的整个应用程序堆栈迁移到事件驱动的体系结构.
甚至这些服务器也支持非阻塞I/O. 是的,他们正在为每个请求分配一个线程,但是如果有一个线程池,资源是不是在良好的性能参数范围内呢?
请按以下方式向我提供一些意见.
您提到的关键概念之一是:
是的,他们为每个请求分配一个线程
事实一次又一次地表明,当您的目标是支持大量并发用户时,IO 绑定应用程序的每个请求都有一个线程最终会耗尽您的线程池。事实证明,您正在谈论的框架(如 Node.js、Tornado 等)擅长处理大量并发用户,而您的应用程序很可能只是等待某些事情发生,而不执行任何 CPU 操作根本没有绑定任务。换句话说,这些工具非常适合构建在线游戏、聊天室、日志系统、通知系统等实时应用程序,这些应用程序的主要目标是尽可能快地与许多用户快速协调小消息传递。
事实上,这些工具非常适合编写基于 Websocket 的应用程序,因为它实际上是为用户提供实时或近乎实时的体验。
虽然许多公司确实从一开始就使用这些平台,但我认为对于拥有传统堆栈的公司来说,使用事件驱动工具作为其系统的补充更为常见。当您使用 Node.js 或 Tornado 之类的东西时,您可能会发现自己放弃了许多依赖的内置软件,而转而使用自己的 api 和驱动程序。Node.js 已经存在了一段时间了,实际上对于连接数据库、nosql 平台和构建系统有很多很好的支持,但它花了一段时间才到达那里。
作为一项实验,尝试编写一个简单的 TCP 聊天应用程序,每个请求使用一个线程,并查看您可以支持多少用户。最终,您将达到可以启动的操作系统线程数量的限制,这确实很昂贵。
然后看看仅使用一个线程(其默认线程)即可使用 Node.js 走多远。您会发现每秒能够支持极大量的并发请求。众所周知,它的规模可以达到数百万,因为它不受线程的限制,它只受内存、文件描述符的数量和当时的 CPU 的限制。
我能尽力回答你的问题:
| 归档时间: |
|
| 查看次数: |
500 次 |
| 最近记录: |