Node.js是单线程的。Javascript V8引擎和一些内部库是多线程的。对于I / O,节点将I / O委托给可能是多线程的OS。
如果我的node.js应用程序正在连接到redis或sql / mariadb服务器,我认为我不需要Redis或mysql的连接池。
作为开发人员,我创建了1个redis或mysql连接,并重用它来发送/获取数据。当数据到达时,节点将调用回调以处理数据。
我了解Java / .NET的连接池,但是它们是多线程的,因此Java / .NET中的连接池具有明显的优势。
我的问题是:当节点为单线程时,为什么在node.js中需要连接池?有什么好处吗?如果开发人员不必这样做,节点是否不会利用底层操作系统和JavaScript引擎的多线程功能?
谢谢
Node运行您的单线程代码。但是,Node.js实际上有一个线程池可供使用,您的代码无法访问该线程池。线程机制是使用libuv实现的。深入了解libuv书,并解释libuv的内部工作原理。
基本上,您的代码在事件循环(单线程)的上下文中运行。然后,将任何异步工作从池中卸载到可用线程,并且事件循环将只轮询直到其中一个线程完成了异步工作。完成后,异步调用注册的回调函数将被调用,并将在下一个I/O Callback Phase
事件循环中使用。您可以在Node.js文档中阅读有关事件循环及其阶段的更多信息。
使用这种事件循环样式构建应用程序的好处之一是抽象了通常与多线程应用程序关联的关键部分编码(互斥量,信号量等)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句