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

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

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

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

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

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

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

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

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

mysql中用户线程作用,mysql用户线程的建立与用户线程的状态源码解析相关推荐

  1. 【Mysql】MySql中delimiter的作用

    阅读目录 MySql中delimiter的作用 例子 先说结论 MySql中delimiter的作用 Mysql 中默认命令的终止符是; , 但有时候,不希望MySQL这么做,因为你输入的sql 语句 ...

  2. MySQL中加号的作用

    MySQL中+号的作用 MySQL基础篇之加号的作用 MySQL是很基础的一门数据库语言.一般JAVA开发等使用较为普遍.那我们就先看一下JAVA语言中的+号. Java中的+号分为两类: (1)运算 ...

  3. Java 线程池ThreadPoolExecutor的应用与源码解析

    ThreadPoolExecutor 工作原理 假设corePool=5,队列大小为100,maxnumPoolSize为10 向线程池新提交一个任务,会根据ThreadFactory创建一个新的线程 ...

  4. Java Executor源码解析(7)—Executors线程池工厂以及四大内置线程池

    详细介绍了Executors线程池工具类的使用,以及四大内置线程池. 系列文章: Java Executor源码解析(1)-Executor执行框架的概述 Java Executor源码解析(2)-T ...

  5. Java Executor源码解析(3)—ThreadPoolExecutor线程池execute核心方法源码【一万字】

    基于JDK1.8详细介绍了ThreadPoolExecutor线程池的execute方法源码! 上一篇文章中,我们介绍了:Java Executor源码解析(2)-ThreadPoolExecutor ...

  6. 【Android 异步操作】线程池 ( 线程池作用 | 线程池种类 | 线程池工作机制 | 线程池任务调度源码解析 )

    文章目录 一.线程池作用 二.线程池种类 三.线程池工作机制 四.线程池任务调度源码解析 一.线程池作用 线程池作用 : ① 避免创建线程 : 避免每次使用线程时 , 都需要 创建线程对象 ; ② 统 ...

  7. mysql 修改结束符_在MySQL中,用于设置MySQL结束符的关键字是【】

    在MySQL中,用于设置MySQL结束符的关键字是[] 答:DELIMITER 截至目前,还没有科学家从事克隆人的实验研究.() 答:× 智慧职教: 在选择压力表的量程时,一般不超过满量程的( ). ...

  8. SOFA BOLT源码解析之设计要点-线程模型

    1 设计要点解析 1.1  线程模型 此部分内容主要介绍蚂蚁为什么选择Netty4作为基础网络编程框架,来源于蚂蚁技术团队发布的一篇文章: 文章名称为:蚂蚁通信框架实践: 链接地址为:https:// ...

  9. MySQL核心参数含义的源码解析

    引言 你访问的网站,大部分使用Apache服务器;你访问的网站,大部分使用Linux或BSD操作系统:你访问的网站,大部分使用MySQL数据库;你提交DNS域名查询请求大多由BIND服务器分析处理;你 ...

最新文章

  1. git pull出现There is no tracking information for the current branch
  2. Intel(R)Turbo Boost Technology Driver上面显示为感叹号
  3. 经典正则表达式——常用的正则表达式
  4. python单元测试
  5. 关于盘符里某些文件夹删除不了的解决方案研究
  6. oracle字符nul怎么输入,oracle - 如何摆脱Oracle数据库中的NUL字符? - 堆栈内存溢出...
  7. [ZZ]MVC设计模式
  8. Pytorch —— BN、LN、IN、GN
  9. C++ map中使用erase应该注意到的问题
  10. NextJS基础教程
  11. 学习date , clock , hwclork , cal, ls ,cd , pwd, tty, whereis , which ,stat, e
  12. 美团下拉菜单html5,jQuery vue仿美团订餐系统分类菜单切换代码
  13. maven--mvn命令
  14. 阅读技术书籍原著的困扰:技术书籍中的符号用英语该怎么念?
  15. linux调整tmp目录,linux – 如何将默认/ tmp更改为/ home / user / tmp
  16. Windows 11正式版来了!一文带你免费升级、镜像下载、最低系统要求
  17. html设置只在最后一页显示页脚,在Word里怎么设置页脚只在最后一页显示?
  18. python 降低图片分辨率的两种方法
  19. Oracle基本语法查询语句
  20. Linux强制使用短密码|修改短密码|passwd无效的密码

热门文章

  1. 年轻人开始“反推荐算法”:算法不讲武德!
  2. 【报告分享】2021年中国“夜猫”人群洞察报告:月亮不睡我不睡,我是秃头小宝贝.pdf(附下载链接)...
  3. leetcode力扣64. 最小路径和
  4. EMNLP杰出论文 | 当注意力遇到RNN,五倍以上训练加速!
  5. android应用内存不断膨胀,在android中膨胀简单的xml布局时出现内存不...
  6. 数据增长率怎么算_2019 年“泰迪杯”数据分析职业技能大赛A题 超市销售数据分析...
  7. 斯坦福李飞飞CS231n笔记1计算机视觉概述与历史背景
  8. pytorch1.4+tensorboard不显示graph计算图的问题
  9. Vue入门指南-05 Vue实例的生命周期(快速上手vue)
  10. Android调用相册、相机(兼容6.0、7.0、8.0)