【问题标题】:Are java servlet containers capable of asynchronous I/O processing without additional threads?java servlet 容器是否能够在没有额外线程的情况下进行异步 I/O 处理?
【发布时间】:2021-11-08 15:34:49
【问题描述】:

对于 Node.js 和 ASP.NET Core 等框架,它们能够异步处理 I/O 任务的请求,而无需创建额外的线程。 java servlet容器也能做到这一点吗?如果不是,java servlet 容器是否会在线程中等待 I/O 任务,直到请求被完全处理?

【问题讨论】:

  • 我不确定 servlet 容器,但我认为大多数都使用每个请求线程的方法。但是,有一些框架,如 Vert.x,其工作方式与 Node.js 等非常相似。

标签: java servlets


【解决方案1】:

好的,我自己找到了答案。

根据Jakarta EE 9 documentation,:

有两种常见情况,其中与请求关联的线程可能处于空闲状态。

  • 线程需要等待资源可用或在构建响应之前处理数据。例如,应用程序可能需要在生成响应之前查询数据库或从远程 Web 服务访问数据。

  • 线程在生成响应之前需要等待一个事件。例如,应用程序可能必须等待 Jakarta Messaging 消息、来自另一个客户端的新信息或队列中可用的新数据,然后才能生成响应。

这些场景代表了限制 Web 应用程序可扩展性的阻塞操作。 异步处理是指将这些阻塞操作分配给一个新线程,并立即将与请求关联的线程重新调整到容器。

因此,java servlet 容器能够进行异步处理。但是,它们将为 I/O 和 CPU 绑定任务创建新线程,这与 Node.js 和 ASP.NET Core 的模型不同。

【讨论】:

    猜你喜欢
    • 2020-02-07
    • 2019-08-16
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多