我没有查看node.js的代码细节。
但是,经过对Node.js中线程的一些研究,我发现它有单线程来接受来自多个客户端的连接。
当与客户端连接时,它触发连接事件并侦听另一个客户端并以异步方式完全工作,并且从线程池执行客户端请求的休息操作,并通过回调将结果发送回主线程(接受连接的线程)。
在Java NIO中同样也是ServerSocketChannel,SocketChannel可以设置为非阻塞模式,而选择器单线程可以监视多个通道。因此,使用NIO ServerSocketChannel,SocketChannel也可以从单个线程中为多个客户端异步管理连接
那么,NIO的非阻塞模式和与单线程异步的node.js是否遵循相同的单线程概念模式?正如两人都说他们在单线程上执行。
答案 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)
没有。非阻塞意味着操作不会阻塞,并且它们会告诉您它们的作用。异步意味着它们可以并行继续运行,并在完成后回拨给您。它们是完全不同的编程范例。