mysql服务器多线程模型_mysql-线程模型

mysql的社区版中采用的连接方法就是One-Connection-Per-Thread,这种方式最大的问题在于,当连接数非常多时,线程上下文切换成本高(mongodb也为每个连接创建一个线程,有一个listener线程会使用select监听端口,监听到连接时就创建一个线程为该连接服务)。从mysql5.6商业版开始提供Pool-Threads模式,即使用线程池来处理客户端的连接,mariadb中也引入了这种机制。

下图就是Pool-Threads的模型结构,将线程池分为若干个Group,每个Group持有若干个worker线程、一个listener线程、两个队列。listener线程用于监听连接,worker线程用于处理连接请求,优先队列用于排队优先级高的连接(已经开启事务、获得锁的连接),普通队列用于排队普通连接。一个连接只可能在一个group中得到处理,但可以被group中不同的线程处理(线程池服务的最小单位是语句)。

7668ac153e4cb6dd0dc72e2baa09f91d.png

下图表达了client(web server)通过连接池向server发请求,server的线程池中有3个group,每个group有1个worker线程。

08404d500e279d7061f4c910a638f064.png

参考:http://www.cnblogs.com/cchust/p/4510039.html

mariadb Threadpool Benchmarks : https://mariadb.com/kb/en/the-mariadb-library/threadpool-benchmarks/,在并发量大时,线程池要比One-Connection-Per-Thread好很多(图中纵坐标应该是每秒事务处理数吧)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值