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



我还没有详细了解node.js.的代码

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

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

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

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

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

Apendix

为什么Node.js在设计上是单线程的?从理解Node.js:

"所以我不必担心代码访问相同的数据结构">

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

因此,单线程设计最有可能的原因是取悦javascript程序员,而这些程序员通常不熟悉同步概念。

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

最新更新