线程池是Mysql5.6的一个核心功能,对 于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题。当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导 致资源利用率低,降低了服务质量。线程池是一种通用的技术,通过预先创建一定数量的线程,当有请求达到时,线程池分配一个线程提供服务,请求结束后,该线 程又去服务其他请求。 通过这种方式,避免了线程和内存对象的频繁创建和释放,降低了服务端的并发度,减少了上下文切换和资源的竞争,提高资源利用效率。 所有服务的线程池本质都是位了提高资源利用效率,并且实现方式也大体相同。本文主要说明Mysql线程池的实现原理。

在Mysql5.6出现以前,Mysql处理 连接的方式是One-Connection-Per-Thread,即对于每一个数据库连接,Mysql-Server都会创建一个独立的线程服务,请求 结束后,销毁线程。再来一个连接请求,则再创建一个连接,结束后再进行销毁。这种方式在高并发情况下,会导致线程的频繁创建和释放。当然,通过 thread-cache,我们可以将线程缓存起来,以供下次使用,避免频繁创建和释放的问题,但是无法解决高连接数的问题。One- Connection-Per-Thread方式随着连接数暴增,导致需要创建同样多的服务线程,高并发线程意味着高的内存消耗,更多的上下文切换 (cpu cache命中率降低)以及更多的资源竞争,导致服务出现抖 动。相对于One-Thread-Per-Connection方式,一个线程对应一个连接,Thread-Pool实现方式中,线程处理的最小单位是 statement(语句),一个线程可以处理多个连接的请求。这样,在保证充分利用硬件资源情况下(合理设置线程池大小),可以避免瞬间连接数暴增导致 的服务器抖动。

最新文章

  1. Request.UrlReferrer
  2. Spring的问题解决记录
  3. 如何编写可维护的面向对象JavaScript代码
  4. C# DatrgridView表格控件的一些用法
  5. webview中的页面兼容iphone6和6+
  6. 什么是automatic variable?
  7. EmberJS路由详解
  8. 1014 C语言文法
  9. Protobuf动态解析那些事儿
  10. Linux系统常用命令 __转载的
  11. Flex 箭头(军标)库封装完成
  12. 数组在C++和java中的区别
  13. 实用AutoHotkey功能展示
  14. 封装fastjson为spring mvc的json view
  15. 快手 Android 工程师面经
  16. 201521123027 <java程序设计>第11周学习总结
  17. vue2 watch引用类型 失败原因
  18. python脚本在linux下的执行
  19. Windows Server 2016-Win Ser 2016已删减内容
  20. BackBone结合ASP.NET MVC实现页面路由操作

热门文章

  1. django-template-forloop
  2. 2.1_Scikit-learn数据集
  3. 怎么爆加密过后的前端JS
  4. sqlserver查询---分配cpu等资源
  5. MySQL命令行学习
  6. J2SE 8的输入输出--读取/写入文本文件和读取/写入二进制数据
  7. Dictionary 字典的使用
  8. 模板引擎-freemarker
  9. 基于OpenGL编写一个简易的2D渲染框架-03 渲染基本几何图形
  10. 编写jQuery插件(二)——jQuery插件类型和机制