gpt4 book ai didi

javascript - 所有异步 IO Nodejs 代码都使用 libuv 吗?

转载 作者:行者123 更新时间:2023-12-03 06:35:15 28 4
gpt4 key购买 nike

我读过几篇描述 Node 事件循环如何工作以及如何从单个“主”线程实现异步操作的文章,但我不清楚一件事 -

所有异步 IO Nodejs 代码都在底层使用 libuv 吗?例如 - 通过 Sequelize/Tedious 连接到数据库

据我了解,目标是确定增加 process.env.UV_THREADPOOL_SIZE 是否会导致数据库连接出现潜在瓶颈。我在日志中看到超时,等待数据库连接,尽管数据库服务器从未显示出任何性能问题。

这些是我读过的文章 -

https://www.future-processing.pl/blog/on-problems-with-threads-in-node-js/ http://abdelraoof.com/blog/2015/10/28/understanding-nodejs-event-loop/ https://nodesource.com/blog/understanding-the-nodejs-event-loop/
When is the thread pool used?

最佳答案

所有异步操作都不使用libuv线程池。它们可能都通过 libuv 中的接口(interface),但并不是所有东西都在 libuv 内部使用线程。

例如,计时器不使用线程,网络调用也不使用线程。它们都使用操作系统级异步功能。据我了解,所有主要平台都使用线程池进行异步磁盘 I/O(尽管某些平台中确实存在操作系统级异步磁盘 I/O)。给定库可以实现的其他异步操作(例如读取温度探测器或类似操作)都可以使用自己的方法(无论他们认为最合适的方法)。它不是由 libuv 或 node.js 决定的。

它将检查实现特定数据库的代码,以了解数据库瓶颈可能在哪里。它可能使用线程,也可能限制同时数据库连接的数量。它可能有自己的内部连接池,并且可能需要增加。只有检查特定代码以及它如何处理您所观察到的特定情况才能确定答案。没有“通用”答案。这取决于 Node.js 的数据库接口(interface)的编码方式。

关于javascript - 所有异步 IO Nodejs 代码都使用 libuv 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38254426/

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