Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果web服务器是非阻塞的,这是否意味着它处理IO的方式与node.js相同?_Java_Node.js_Nonblocking_Undertow - Fatal编程技术网

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

Java 如果web服务器是非阻塞的,这是否意味着它处理IO的方式与node.js相同?,java,node.js,nonblocking,undertow,Java,Node.js,Nonblocking,Undertow,我将很快使用名为Undertow的服务器。报告说: Undertow是一款用java编写的灵活性能web服务器, 提供基于NIO的阻塞和非阻塞API 如果下拖允许非阻塞,是否与node.js相同?我不是说语言之类的。我有一个单独的项目,我认为node.js是一个不错的选择,但如果我可以将一个产品用于多个项目,这将是很有帮助的 编辑:我发现了这个问题。我开始觉得我把事情搞糊涂了。来自: 在计算机科学中,异步I/O或非阻塞I/O是一种输入/输出处理形式,允许在传输完成之前继续其他处理 非阻塞和异步是

我将很快使用名为Undertow的服务器。报告说:

Undertow是一款用java编写的灵活性能web服务器, 提供基于NIO的阻塞和非阻塞API

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

编辑:我发现了这个问题。我开始觉得我把事情搞糊涂了。

来自:

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


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

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

在Undertow中,由
IO线程
按照此模型接受传入请求。在这些线程上执行阻塞操作将意味着延迟处理新传入请求

在IO线程旁边,Undertow管理另一个线程池,
工作线程
,以处理阻塞任务(想想调用Web服务或查询数据库之类的任务),这是使用节点js无法获得的


要使用工作线程,请求处理必须从IO线程调度。API是全面且易于使用的,这也是一个起点。

因此,您认为这只是环境之间的选择吗?一点也不。这只是意味着不同的web服务器使用相同的技术来处理IO。存在我们在功能和性能上仍然存在很多差异。我没有足够的经验使用不同的服务器,因此无法在此推荐任何选项。Wikipedia又错了。异步和非阻塞是两种不同的模型,不是同义词。在非阻塞模式下,传输要么完成,要么没有发生当I/O调用返回时。我修复了Wikipedia,但在这里没有注意到。你是说使用Undertow比Node.js可能会重复吗?我可以处理更多的请求吗?内存利用率如何?不,这不是我的意思。回答这样的问题几乎是不可能的,甚至没有真正意义。这取决于你做了什么n这些请求。我要说的是,使用Undertow,您可以使用常规java线程—工作线程(它们映射到内核线程)来执行阻塞任务(DB调用、文件处理…),而这在Nodejs中是无法做到的。使用Nodejs,您实际上不必担心阻塞任务(如果您知道自己在做什么的话)因为您使用的大多数库都希望在任务完成时调用回调。