gpt4 book ai didi

node.js - node是单线程的,为什么在node.js中需要连接池?

转载 作者:IT王子 更新时间:2023-10-29 05:59:27 27 4
gpt4 key购买 nike

Node.js 是单线程的。 Javascript V8 引擎和一些内部库是多线程的。对于 I/O, Node 将 I/O 委托(delegate)给可能是多线程的操作系统。

如果我的 node.js 应用程序正在连接到 redis 或 sql/mariadb 服务器,我认为我不需要用于 redis 或 mysql 的连接池。

作为一名开发人员,我创建了 1 个 redis 或 mysql 连接并重新使用它来发送/获取数据。当数据到达时, Node 将调用回调来处理数据。

我理解 Java/.NET 的连接池,但它们是多线程的,因此 Java/.NET 的连接池有明显的好处。

我的问题是:当 Node 是单线程时,为什么我们需要在 node.js 中使用连接池?有什么好处吗? node 是否会在开发人员无需这样做的情况下利用底层操作系统和 javascript 引擎的多线程功能?

谢谢

最佳答案

Node 以单线程方式运行您的代码。然而,Node.js 实际上有一个你的代码无法访问的线程池供其使用。线程机制是用 libuv 实现的.看看libuv book它深入并解释了 libuv 的内部工作原理。

基本上,您的代码在事件循环(单线程)的上下文中运行。然后,所有异步工作都从池中卸载到一个可用线程,事件循环将只进行轮询,直到其中一个线程完成该异步工作。完成后,您的异步调用注册的回调函数将被调用,并将在事件循环的下一个 I/O 回调阶段 中得到处理。您可以在 Node.js docs 中阅读有关事件循环及其阶段的更多信息。 .

使用这种事件循环样式构建应用程序的好处之一是抽象了通常与多线程应用程序关联的关键部分编码(互斥量、信号量等)。

关于node.js - node是单线程的,为什么在node.js中需要连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44974210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com