Java NIO非阻塞模式vs node.jsasynchronous操作

我还没有经历node.js的代码细节。

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

当与客户端连接时,它会触发连接事件并监听另一个客户端,并以asynchronous方式完全工作,客户端请求的hibernate操作从线程池执行,结果通过callback被发送回主线程(接受连接的线程)。

像Java中的NIO也是ServerSocketChannel一样,SocketChannel可以设置为非阻塞模式,并且使用select器单线程可以监控多个通道。 因此,使用NIO ServerSocketChannel,SocketChannel也可以从单个线程中为多个客户端asynchronouspipe理连接

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

一般的asynchronous,特别是NIO不一定是单线程支持的,它们可以被multithreading支持来提高性能。 但是,multithreading需要额外的同步(不是复杂的,而是精确的)。 由于JavaScript缺less同步工具,Node.js必须使用单线程。 Javaasynchronous框架可以使用多个线程。

Apendix

为什么Node.js是单线程devise的? 从了解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! 

所以单线程devise的最可能的原因是请javascript程序员,这是一致的,不熟悉同步的概念。

不是,非阻塞意味着操作不会阻塞,而是告诉你他们做了什么。 asynchronous意味着他们的操作继续并行,并在完成时给您回电。 他们是完全不同的编程范例。