对于Node.js和ASP.NET Core等框架,它们能够异步处理I/O任务的请求,而无需创建额外的线程。javaservlet容器也能做到这一点吗?如果没有,那么javaservlet容器是否会等待线程中的I/O任务,直到请求得到完全处理?
好吧,我自己找到了答案。
根据雅加达EE 9文件:
有两种常见的情况,与请求相关联的线程可能处于空闲状态。
线程需要等待资源可用或处理数据,然后才能构建响应。例如,在生成响应之前,应用程序可能需要查询数据库或访问来自远程web服务的数据。
线程在生成响应之前需要等待事件。例如,在生成响应之前,应用程序可能必须等待Jakarta Messaging消息、来自另一个客户端的新信息或队列中可用的新数据。
这些场景表示限制web应用程序可伸缩性的阻塞操作异步处理是指将这些阻塞操作分配给一个新线程,并立即将与请求相关联的线程重新调整到容器中。
因此,javaservlet容器能够进行异步处理。然而,它们将为I/O和CPU绑定任务创建新的线程,这与Node.js和ASP.NET Core的模型不同。