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

  • 相关阅读:
    使用 requests 维持会话
    使用 requests 发送 POST 请求
    使用 requests 发送 GET 请求
    requests 安装
    使用 urllib 分析 Robots 协议
    使用 urllib 解析 URL 链接
    使用 urllib 处理 HTTP 异常
    使用 urllib 处理 Cookies 信息
    使用 urllib 设置代理服务
    按单生产程序发布
  • 原文地址:https://www.cnblogs.com/holoyong/p/7444602.html
Copyright © 2011-2022 走看看