我还没有看过node.js的代码细节。
但是,通过对Node.js中线程的一些研究,我发现它只有一个线程来接受来自多个客户端的连接。
当与客户端连接时,它触发连接事件并监听另一个客户端,完全以异步方式工作,客户端请求的rest操作从线程池中执行,结果通过回调返回给主线程(接受连接的线程)。
就像Java NIO中的wise和ServerSocketChannel一样,SocketChannel可以设置为非阻塞模式,并且通过选择器,单线程可以监控多个通道。因此,使用NIO ServerSocketChannel,SocketChannel也可以从单线程为多个客户端异步管理连接
那么,NIO的非阻塞模式和单线程异步node.js是否遵循单线程概念的相同模式?正如两人所说的那样,他们在单线程上执行。
发布于 2013-12-23 18:40:59
一般来说,异步,特别是NIO,不一定由单线程支持,它们可以由多线程支持以提高性能。但是,多线程需要额外的同步(不复杂,但准确)。由于javascript缺乏同步工具,Node.js不得不使用单线程。Java异步框架可以使用多个线程。
附录
为什么Node.js的设计是单线程的?来自Understanding Node.js
“这样我就不必担心代码同时访问相同的数据结构了?”
你成功了!这就是JavaScripts单线程/事件循环设计的全部优点!
因此,单线程设计最有可能的原因是为了取悦javascript程序员,因为他们总体上并不熟悉同步概念。
发布于 2013-12-23 17:58:06
不是的。非阻塞意味着操作不会阻塞,并且它们会告诉您它们做了什么。异步意味着它们并行地继续操作,并在它们完成时回调您。它们是完全不同的编程范例。
https://stackoverflow.com/questions/20740961
复制相似问题