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

时间:2013-12-23 09:53:18

标签: java multithreading node.js asynchronous nio

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

Apendix

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

"So I don't have to worry about code accessing the same data
 structures at the same time?"

 You got it! That's the entire beauty of JavaScripts
 single-threaded/event loop design!

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

答案 1 :(得分:2)

没有。非阻塞意味着操作不会阻塞,并且它们会告诉您它们的作用。异步意味着它们可以并行继续运行,并在完成后回拨给您。它们是完全不同的编程范例。