当节点为单线程时,为什么在node.js中需要连接池?

阿夫尼特

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

Redis连接池+ Node.js

node.js + mysql连接池

如果node.js是单线程的,那么server.listen()为什么返回?

尝试在Node.js中实现连接池时连接变得未定义

为什么我们需要JDBC的连接池?

如何在node.js中的模块之间共享连接池?

为什么在mysql中使用连接池时需要释放连接?

Node.js单线程与并发

node.js和mysql连接池不导出

为什么每次重新部署时都需要刷新连接池?

为什么gevent需要同步,因为它在单线程中

为什么多线程版本需要与单线程版本相同的时间?

sqlalchemy中的连接池是线程安全的吗?

在Weblogic中复制连接池有什么好处?

连接池什么是removeAbandoned?

在浏览器中,多线程WebAssembly的速度比单线程慢,为什么?

为什么C#中的多线程快速排序比单线程慢

为什么在我的代码中单线程比多线程快?

为什么在 Ookla 的速度测试中选择单线程或多线程连接时连接速度是否不稳定很重要?

为什么单线程进程有多个 Sidekiq 客户端连接?

为什么我会放置一个synchronized块单线程方法中?

为什么单线程操作g需要比没有线程多3倍的时间?

如何在Node.js MongoDb中进行连接连接池

多个线程上的sqlalchemy连接池

什么时候应该在node.js mysql中使用连接池?

如何在启动时使node.js mysql连接池可用

单线程Node.js如何同时处理请求?

Node.js-单线程,非阻塞?