Java NIO非阻塞模式与node.js异步操作

abi*_*rai 16 java multithreading asynchronous nio node.js

我没有仔细阅读node.js的代码细节.

但是,通过对Node.js中的线程的一些研究,我发现它有单线程来接受来自多个客户端的连接.

当与客户端连接时,它触发连接事件并侦听另一个客户端并以异步方式完全工作,并且从线程池执行客户端请求的休息操作,并通过回调将结果发送回主线程(接受连接的线程).

在Java NIO中同样也是ServerSocketChannel,SocketChannel可以设置为非阻塞模式,而选择器单线程可以监视多个通道.因此,使用NIO ServerSocketChannel,SocketChannel也可以从单个线程中为多个客户端异步管理连接

那么,NIO的非阻塞模式和与单线程异步的node.js是否遵循相同的单线程概念模式?正如他们都说他们在单线程上执行.

Ale*_*dov 5

一般来说,异步,特别是 NIO,不一定由单线程支持,它们可以由多个线程支持以提高性能。然而,多线程需要额外的同步(不复杂,但准确)。由于 javascript 缺乏同步实用程序,Node.js 必须使用单线程。Java异步框架可以使用多线程。

附录

为什么 Node.js 设计为单线程?来自理解 Node.js

“所以我不必担心代码同时访问相同的数据结构?”

你说对了!这就是 JavaScript 单线程/事件循环设计的全部魅力!

因此,单线程设计最可能的原因是为了取悦 JavaScript 程序员,因为他们总体上不熟悉同步概念。

  • Node.js 使用单线程,因此不需要同步原语,反之亦然 (2认同)

use*_*421 3

不会。非阻塞意味着操作不会阻塞,并且它们会告诉您它们做了什么。异步意味着操作并行继续,并在完成时回调您。它们是完全不同的编程范例。