Node.js是单线程的。 Javascript V8引擎和一些内部库是多线程的。对于I/O,节点将I/O委托给可能是多线程的OS。节点为单线程时,为什么我们需要node.js中的连接池?
如果我的Node.js应用程序连接到Redis的,或者SQL/MariaDB的服务器,我想我不应该需要的Redis或MySQL连接池。
作为开发人员,我创造1个Redis的或MySQL连接并复用它来发送/获取数据。当数据到达时,节点将调用回调来处理数据。
我明白连接与Java/.NET池,但他们是多线程的,所以用Java/.NET连接池有明显的好处。
我的问题是:为什么我们需要在node.js的连接池时,节点是单线程的?它有什么好处吗?如果开发人员不这样做,节点是否不利用底层操作系统和JavaScript引擎的多线程功能?
感谢
谢谢你的评论和链接。那么使用redis连接池或mysql连接池会有什么好处,因为节点将使用其内部线程池进行I/O操作? – Avneet
当然,这些连接池仍然让你有正在为等待新的连接被打开头顶的共享和可代替多个连接。这是正确实施时的优化。 – peteb
@Avneet也从Redis的和mysql的线程池,仍在与libuv就像你的代码运行。所以没有一个由这些软件包创建的独立池。你的代码是用这些包实现的,你的代码是单线程运行的,这些池只是提供开放的连接,只是等待工作。无需等待连接打开。 – peteb