如果 Web 服务器是非阻塞的,这是否意味着它处理 IO 的方式与 node.js 相同



我很快就会使用一个名为Undertow的服务器。 该网站说:

Undertow 是一个用 java 编写的灵活性能的 Web 服务器, 提供基于蔚来汽车的阻塞和非阻塞API。

如果 Undertow 允许非阻塞,这与 node.js 相同吗? 我不是说语言或类似的东西。 我有一个单独的项目,我认为node.js将是一个不错的选择,但是如果我可以将单个产品用于多个项目,那将很有帮助。

编辑:我发现了这个问题。 Java NIO非阻塞模式与节点.js非同步操作 我开始认为我混淆了事情。

Undertow 基于 JBoss XNIO 库,与 Nodejs 一样,XNIO 依赖于操作系统功能(可用时为 epoll 或 kqueue)来通知 IO 事件(例如,当数据可以从套接字读取时)。

在 Undertow 中,接受传入的请求是按照此模型完成的,由 IO threads .在这些线程上执行阻塞操作意味着延迟处理新的传入请求。请参阅 Undertow 关于 IO 线程的文档

在 IO 线程旁边,Undertow 管理另一个线程池,即 Worker threads 来处理阻塞任务(想想调用 Web 服务或查询数据库等任务)。这就是你不会从 Nodejs 得到的!

要使用工作线程,必须从 IO 线程调度请求处理。该API全面且易于使用,再次请参阅Undertow的文档作为起点。

来自维基百科:

在计算机科学中,异步 I/O 或非阻塞 I/O 是一种输入/输出处理形式,允许其他处理在传输完成之前继续。

非阻塞和异步是同义词,这就是所有标准节点.js Web 服务器的工作方式。

最新更新