abi*_*rai 16 java multithreading asynchronous nio node.js
我没有仔细阅读node.js的代码细节.
但是,通过对Node.js中的线程的一些研究,我发现它有单线程来接受来自多个客户端的连接.
当与客户端连接时,它触发连接事件并侦听另一个客户端并以异步方式完全工作,并且从线程池执行客户端请求的休息操作,并通过回调将结果发送回主线程(接受连接的线程).
在Java NIO中同样也是ServerSocketChannel,SocketChannel可以设置为非阻塞模式,而选择器单线程可以监视多个通道.因此,使用NIO ServerSocketChannel,SocketChannel也可以从单个线程中为多个客户端异步管理连接
那么,NIO的非阻塞模式和与单线程异步的node.js是否遵循相同的单线程概念模式?正如他们都说他们在单线程上执行.
一般来说,异步,特别是 NIO,不一定由单线程支持,它们可以由多个线程支持以提高性能。然而,多线程需要额外的同步(不复杂,但准确)。由于 javascript 缺乏同步实用程序,Node.js 必须使用单线程。Java异步框架可以使用多线程。
附录
为什么 Node.js 设计为单线程?来自理解 Node.js:
“所以我不必担心代码同时访问相同的数据结构?”
你说对了!这就是 JavaScript 单线程/事件循环设计的全部魅力!
因此,单线程设计最可能的原因是为了取悦 JavaScript 程序员,因为他们总体上不熟悉同步概念。