工作原理
根据连接id将连接分配到线程组中,线程组中的listener线程监控任务并将事务类型的任务放入优先队列,非事务任务放入普通队列,
worker线程优先将优先队列中的任务处理掉再处理普通队列中的任务,线程组中worker线程循环取出任务,执行,返回结果。
在线程组之外有一个timer线程,主要做以下事情.
1.监控线程组的状态,如果监控到线程组中的线程不够用,就唤醒或者创建线程.
2.kill 超时连接线程
# 线程池有关的参数变量:
thread_concurrency # 允许进入innodb内部的最大线程数 ,一般情况下设置为 cpu核数或者2倍
thread_handling # 线程模式 pool-of-threads,表示启用线程池
thread_pool_high_prio_mode # 放入优先队列的语句模式,transactions ,state
thread_pool_high_prio_tickets # 每个连接被放入到优先队列的次数
thread_pool_idle_timeout # 线程最大闲置的时间,如果超过这个时间就会被销毁
thread_pool_max_threads # 最大线程数
thread_pool_oversubscribe # 每个线程组处于活跃状态的线程数
thread_pool_size # 线程组数 , 默认为 cpu数
thread_pool_stall_limit # 活跃线程停滞的时间,如果超过这个时间限制,就会创建或者唤醒其他线程 /timer线程检查间隔
thread_stack # 线程占用的内存大小
thread_statistics # 是否收集线程的统计信息
# 线程池有关的状态变量:
Threadpool_idle_threads # 空闲的线程数
Threadpool_threads # 线程总数
Threads_running # 正在运行的线程数
线程池问题
http://blog.jobbole.com/87944/
线程池实现原理:
perconadb 手册
https://www.percona.com/doc/percona-server/5.6/genindex.html