mysql中用户线程作用,mysql用户线程的建立与用户线程的状态源码解析
发布日期:2021-06-24 11:22:09 浏览次数:4 分类:技术文章

本文共 930 字,大约阅读时间需要 3 分钟。

pig已经好长一段时间没有分享文章了,有点对不起订阅的朋友。最近在做比较复杂跟困难的事情,也并不一定最终会有成果,因此必须对此沉默。 停了一段时间,现在定个小目标----2个星期至少写一篇小文章,简单讲清楚一个小细节。希望自己最后坚持下来。

回题,mysql是多线程的数据库,每个应用会话连接到数据库时,会使用或者创建一个用户线程, 至于是使用尚未使用的用户线程还是新创建一个用户线程,取决于是否还有没有分配给用户会话的用户线程。 这样说,可能还太好理解,下面再继续描述跟补充:

mysql数据库(这里指的是mysql5.7,其他版本是否有这功能未查)为了使用户会话连接可以快速建立,将一些将用于用户会话的线程提前建立起来,这些线程是一个普通的用户线程,一直处于等待被某个用户连接会话使用的状态。下面是这类线程的栈,该线程在调用Per_thread_connection_handler::

block_until_new_connection  函数,等待被新的会话连接使用。

9a605f7e88d45f3f8f41828646445401.png

另外一类用户线程,就是被已经某个用户连接(会话)占用着,该用户线程可能正在执行数据库的命令或者等待用户发送命令,下面是等待用户会话发送命令时的用户线程的栈。该用户线程在等待一个网络事件的发生。

4803a35f455bf5aa951466081807c23a.png

到此,应该大家清楚这两种类型的用户线程,我们再来看一下用户线程是如何被创建的--用户线程是被主线程在需要的时候创建的。所谓需要的时候, 就是用户会话跟数据库服务器建立连接时,而数据库服务器没有可以利用的用户线程时(也就是不存在上面所说的第一类用户线程),则直接创建一个新的用户线程。下面是创建用户线程的函数,在该函数体内调用了mysql_thread_create, 创建入口函数为handle_connection的线程。因此handle_connection也就是用户线程的顶层函数。

482325a7cb054d5adcd8b4cc5dc12706.png

下面我们来看一下该函数的栈。

d28a554233738ec6687df2c803e0a283.png

上面提到,在新的用户会话连接进来的时候,会视情况来决定是否需要创建新的用户线程,判断函数如下: .

5cb146af93ed3bd5da30d03f4d787649.png

当blocked_pthread_count> wake_pthread的时候,是不需要创建新的线程的,直接wake up一个idle的用户线程。反之,则需要创建线程。

转载地址:https://blog.csdn.net/weixin_32467749/article/details/115897073 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php页面引用公共文件,WeiPHP插件模板中快速引入公共模板文件
下一篇:Calendar导入java,Java程序使用Calendar.add()方法将分钟添加到当前时间

发表评论

最新留言

很好
[***.229.124.182]2024年04月26日 01时13分02秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

reactos操作系统实现(101) 2019-04-28
Android培训班(75)Dalvik虚拟机的GetStaticMethodID函数 2019-04-28
新手也可以学会TensorFlow 2019-04-28
游戏制作之路(32)创建自定义的界面样式管理 2019-04-28
从小说里学会长大 2019-04-28
iBATIS&Spring合奏(一)--DAO 2019-04-28
iBATIS&Spring合奏(二)--Flex前端融合 2019-04-28
iBATIS&Spring合奏(三)--事务&动态SQL 2019-04-28
C++核心准则C.48:如果构造函数需要用常数初始化成员,使用类内初始化器更合适 2019-04-28
C++核心准则C.49:构造函数中应该做的是初始化而不是赋值 2019-04-28
C++核心准则C.50:如果在构造过程中需要“虚行为”,使用工厂函数 2019-04-28
C++核心准则C.51:使用委托构造函数实现所有构造函数的共通动作 2019-04-28
C++核心准则C.52:合理使用继承的构造函数 2019-04-28
基于Chrome浏览器的前端调试 2019-04-28
Python:Flask部署Nginx、gunicorn、gevent、flask、supervisor 2019-04-28
【李宏毅2020 ML/DL】补充:Ensemble: Bagging, Boosting, Adaboost, Gradient Boosting, Stacking 2019-04-28
【Computer Organization笔记24】光盘,FLASH MEMORY,本单元总结 2019-04-28
【必收藏】台大李宏毅老师课程 | 资源汇总、笔记总结与索引 2019-04-28
【Computer Organization笔记25】I/O:程序直接控制,程序中断方式,直接存储访问(DMA),通道控制方式 2019-04-28
【Computer Organization笔记26】总线 bus :多个部件之间进行数据传送的共享通道,总线设计 - 总线仲裁、数据传输模式、提高总线性能 2019-04-28