首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java NIO非阻塞模式与node.js异步操作

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

Stack Overflow用户
提问于 2013-12-23 17:53:18
回答 2查看 7.1K关注 0票数 17

我还没有看过node.js的代码细节。

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

当与客户端连接时,它触发连接事件并监听另一个客户端,完全以异步方式工作,客户端请求的rest操作从线程池中执行,结果通过回调返回给主线程(接受连接的线程)。

就像Java NIO中的wise和ServerSocketChannel一样,SocketChannel可以设置为非阻塞模式,并且通过选择器,单线程可以监控多个通道。因此,使用NIO ServerSocketChannel,SocketChannel也可以从单线程为多个客户端异步管理连接

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

EN

回答 2

Stack Overflow用户

发布于 2013-12-23 18:40:59

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

附录

为什么Node.js的设计是单线程的?来自Understanding Node.js

“这样我就不必担心代码同时访问相同的数据结构了?”

你成功了!这就是JavaScripts单线程/事件循环设计的全部优点!

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

票数 4
EN

Stack Overflow用户

发布于 2013-12-23 17:58:06

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20740961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档