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

  • 相关阅读:
    快速排序和归并排序的迭代实现
    Longest Increasing Subsequence Review
    IOCCC 1987 最佳单行代码解读
    C++类的成员函数对应的链接器符号的解析
    Scalable Global ID Generator Design
    欧拉回路 (Euler Circuit) POJ 1780
    深入理解函数内静态局部变量初始化
    memcached 线程模型
    类的加载与ClassLoader的理解
    字符集常见码表说明
  • 原文地址:https://www.cnblogs.com/holoyong/p/7444602.html
Copyright © 2020-2023  润新知