Node.js是单线程的。Javascript V8引擎和一些内部库是多线程的。对于I/O,节点将I/O委托给可能是多线程的操作系统。
如果我的node.js应用程序正在连接到redis或,sql/mariadb服务器,我假设我不需要一个用于redis或mysql的连接池。
作为一名开发人员,我创建了1个redis或mysql连接,并将其重用以发送/获取数据。当数据到达时,节点将调用回调来处理数据。
我理解使用Java/.NET的连接池,但它们是多线程的,因此Java/.NET中的连接池有明显的好处。
我的问题是:当节点是单线程时,为什么我们需要node.js中的连接池?有什么好处吗?节点不会利用底层操作系统和javascript引擎的多线程特性,而不需要开发人员这样做吗?
谢谢
发布于 2017-07-07 15:38:17
发布于 2017-07-07 15:52:28
您需要连接池,因为即使一个线程也可以容纳多个“阻塞”DB连接(假设这里是RDBMS )。如果没有连接池,您的应用程序将为每个附加DB请求从头创建每个连接,即使是在一个异步/非阻塞系统(如Node )中。
示例:
request 1 - insert user -- wait for response (assume it's 5 secs)
request 2 - insert invoice - wait for response (assume it's 3 secs)
request 3 - insert another invoice请注意,请求3将立即处理,而无需等待请求1和2的完成。在这个单线程中,我们已经使用了三个资源连接到DB。想象一下,每次需要DB操作时都要创建每个数据库。从连接池中抓取一个要快得多!
https://stackoverflow.com/questions/44974210
复制相似问题