gpt4 book ai didi

mysql - 非阻塞 mysql 客户端实际上是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 06:15:06 39 4
gpt4 key购买 nike

我最近看到了一段如下的 node.js 代码,它应该作为一个独立的服务运行,而不会在每次收到新请求时都重新启动:

switch(action) {
case 'a':
connectMysql(function(mysqlConnection) {
// some queries X
});
break;
case 'b':
connectMysql(function(mysqlConnection) {
// some queries Y
});
break;
/***** more actions *****/
}

每次action都打开一个新的mysql连接,写这个的人认为这种方式可以保证查询并行执行,在请求量很大的时候不会互相阻塞同时。

这让我很困惑,因为我认为 node.js 的 mysql 客户端是非阻塞的,不会阻塞任何东西。

如果查询有任何机会被卡住,原因可能是进程处理了太多请求,更多的 mysql 连接肯定无济于事。

或者,非阻塞客户端只是意味着它会异步发送查询,但是当查询过多时,查询最终会在 mysql 服务器端被阻塞?

最佳答案

MySQL 协议(protocol)不允许查询的多路复用,主要是因为当您连接到服务器时,您只占用一个线程,并且在任何给定时间每个线程最多只有一个未完成的查询。因此,为了方便起见,用于 Node 的 MySQL 模块通常会实现某种队列。

一些 MySQL 模块提供内置的连接池,它允许您解决每个连接一个查询的限制,同时保持与服务器的连接数上限(以免压倒服务器和/或本地用完套接字文件描述符)。恕我直言,就并发性而言,池化选项最终是最佳解决方案。

非阻塞方面只是意味着您在等待查询完成时不会停止做任何其他事情。这允许您在等待查询的同时做其他事情,例如响应其他 Web 服务器请求、触发计时器等。

关于mysql - 非阻塞 mysql 客户端实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36324869/

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