zoukankan      html  css  js  c++  java
  • mysql-线程模型

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

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

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

    参考: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好很多(图中纵坐标应该是每秒事务处理数吧)。

  • 相关阅读:
    DHCP工作过程
    园区网——网络架构
    ARP协议
    网络拓扑结构设计+网络设备简介
    Linux- 常用命令
    Linux-FTP
    【noip2018】【luogu5021】赛道修建
    【noip2018】【luogu5024】保卫王国
    【codeforces】【Round#523D】TV shows
    【bzoj4810】【ynoi2018】由乃的玉米田
  • 原文地址:https://www.cnblogs.com/holoyong/p/7444602.html
Copyright © 2011-2022 走看看