mysql服务器多线程模型_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好很多(圖中縱坐標應該是每秒事務處理數吧)。
總結
以上是生活随笔為你收集整理的mysql服务器多线程模型_mysql-线程模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql5.6 mysqld safe
- 下一篇: mysql5.7 server id_三