首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >非阻塞mysql客户端实际上是如何工作的?

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

Stack Overflow用户
提问于 2016-03-31 05:28:54
回答 1查看 1.8K关注 0票数 1

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

代码语言:javascript
运行
复制
switch(action) {
    case 'a':
        connectMysql(function(mysqlConnection) {
            // some queries X
        });
        break;
    case 'b':
        connectMysql(function(mysqlConnection) {
            // some queries Y
        });
        break;
    /***** more actions *****/
}

它每次为每个操作打开一个新的MySQL连接,编写此方法的人认为,这种方法可以确保查询并行执行,并且在同时存在大量请求时不会彼此阻塞。

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

如果查询被卡住的话,原因可能是处理了太多的请求,而更多的mysql连接肯定不会有帮助。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-31 05:38:33

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

一些MySQL模块提供内置的连接池,允许您绕过每个连接的一个查询限制,同时保持与服务器的连接数量上限(以免在本地超过服务器和/或耗尽套接字文件描述符)。最终,IMHO的池选项是并发性的最佳解决方案。

非阻塞方面只意味着在等待查询完成时,您不会停止执行其他任何操作。这允许您在等待查询时执行其他操作,例如响应其他web服务器请求、触发计时器等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36324869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档