SlideShare una empresa de Scribd logo
1 de 20
MySQL multi-threaded server implementation(mysql 5.1.49)
Main topic 主线程loop监听连接请求,开启线程处理客户query请求 客户处理线程处理query请求,一个线程一次只能服务于一个client,一个线程可能服务多个client(thread pool 机制)
Sample of pstack pstack <pid_mysqld>
主线程处理流程 主线程处理流程(mysqld.cc main函数) 参数初始化 init_common_variables 线程处理机制 get_options – 一个线程处理一个连接 one_thread_per_connection_scheduler(&thread_scheduler) 网络初始化network_init 开启网络监听(tcp/ip socket) 开启本地监听(unix domain socket或named pipe) handle_connections_sockets(0),进入主线程loop 接受客户端连接请求(tcp/ip socket connect request) 开启线程处理客户端query请求(dml,ddl,.etc)
handle_connections_sockets handle_connections_sockets  loop 建立网络连接( socket accept) 建立THD, 将thd和新建立的socket连接关联起来 my_net_init(&thd->net,vio_tmp)) 开启线程服务客户 create_new_thread(thd) create_new_thread调用了thread_scheduler.add_connection(thd),  thread_scheduler是一个全局变量,mysqld启动的时候被初始化 (one_thread_per_connection_scheduler(&thread_scheduler)
Thread_schedule结构 thread_scheduler
构造函数
thread_scheduler初始化Schedule.cc Create_thread_to_handle_connection 从thread pool取出一个线程, 或 新建一个线程 pthread_create One_thread_per_connection_end 当前客户退出后,将线程放入thread pool
新建线程(pthread_create) create_thread_to_handle_connection 刚开始,thread pool是空的,调用pthread_create创建新的线程 新线程处理函数:handle_one_connection 线程初始化 setup_connection_thread_globals 登录,用户信息验证 login_connection(thd) 进入loop, 处理客户端的query do_command(…) 客户端退出后,断开网络连接,将线程放入thread pool 断开网络连接 end_connection 线程进入thread pool睡眠 thread_scheduler.end_thread(thd,1)
thread_scheduler.end_thread(thd,1) one_thread_per_connection_end cache_thread不返回,直到该线程被主线程唤醒(从thread pool取出线程) 唤醒后立刻处理新客户的请求
handle_one_connection
线程唤醒 create_thread_to_handle_connection 如果thread pool里有sleep的线程,则唤醒一个线程处理客户请求,主线程继续监听
Passing thd 主线程创建thd, 传递给其他线程 新建线程时,通过pthread_create传递thd 从线程池唤醒一个线程时 主线程将thd放到链表. 子线程从链表中取出thd, 存到thread local storage 子线程从tls中取出thd 传递的是指向THD的指针,thread共享地址空间
thd->store_globals
current_thread
主线程loop handle_connections_sockets 新建线程或唤醒thread pool的一个线程后,主线程继续监听,等待新的客户 while(!abort_loop) {          accept(…)  // 建立网络连接 create_new_thread(thd); //线程处理 }
Do_command Dispatch_command
Mysql multi-threaded server building blocks Tcp/Ip socket, Unix domain socket, named pipes Posix thread(pthread_create) Condition variables, mutex locks pthread_cond_wait, pthread_cond_timedwait pthread_cond_signal pthread_cond_broadcast Thread local storage pthread_setspecific pthread_getspecific
reference http://x.saw-unix.com/mysqld_thread_init.jpg http://forge.mysql.com/wiki/MySQL_Internals_Guided_Tour Unix network programming(richardstevens) Advanced programming in the Unix environment (richardstevens)

Más contenido relacionado

La actualidad más candente

主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
Nginx共享内存
Nginx共享内存Nginx共享内存
Nginx共享内存Lucien Li
 
基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案Louis liu
 
OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践Orangle Liu
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocketpwesh
 
Squid安装配置
Squid安装配置Squid安装配置
Squid安装配置Yiwei Ma
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Cabin WJ
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討國昭 張
 
introduce Okhttp
introduce Okhttpintroduce Okhttp
introduce Okhttp朋 王
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计aleafs
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计zhujiadun
 
PostgreSQL 9 Standby
PostgreSQL 9 StandbyPostgreSQL 9 Standby
PostgreSQL 9 StandbyMarch Liu
 
Nginx使用和模块开发
Nginx使用和模块开发Nginx使用和模块开发
Nginx使用和模块开发qingpiao1983
 
淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011Yiwei Ma
 
深入Docker的资源管理
深入Docker的资源管理深入Docker的资源管理
深入Docker的资源管理SpeedyCloud
 
探讨Web优化
探讨Web优化探讨Web优化
探讨Web优化dynamiclu
 
基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送OpenRestyCon
 

La actualidad más candente (20)

主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
Nginx共享内存
Nginx共享内存Nginx共享内存
Nginx共享内存
 
基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案基于MHA的MySQL高可用方案
基于MHA的MySQL高可用方案
 
OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
Split lock
Split lockSplit lock
Split lock
 
Squid安装配置
Squid安装配置Squid安装配置
Squid安装配置
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
 
Metrics
MetricsMetrics
Metrics
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討
 
introduce Okhttp
introduce Okhttpintroduce Okhttp
introduce Okhttp
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
 
分布式系统缓存设计
分布式系统缓存设计分布式系统缓存设计
分布式系统缓存设计
 
PostgreSQL 9 Standby
PostgreSQL 9 StandbyPostgreSQL 9 Standby
PostgreSQL 9 Standby
 
Nginx使用和模块开发
Nginx使用和模块开发Nginx使用和模块开发
Nginx使用和模块开发
 
淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011
 
深入Docker的资源管理
深入Docker的资源管理深入Docker的资源管理
深入Docker的资源管理
 
探讨Web优化
探讨Web优化探讨Web优化
探讨Web优化
 
基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送
 

Destacado

Real world Python+django
Real world Python+djangoReal world Python+django
Real world Python+djangoJoel Corrêa
 
Concurrent paradigms - Paralelism approaches
Concurrent paradigms - Paralelism approachesConcurrent paradigms - Paralelism approaches
Concurrent paradigms - Paralelism approachesJoel Corrêa
 
Web Servers: Architecture and Security
Web Servers: Architecture and SecurityWeb Servers: Architecture and Security
Web Servers: Architecture and Securitygeorge.james
 
Multi-threaded Programming in JAVA
Multi-threaded Programming in JAVAMulti-threaded Programming in JAVA
Multi-threaded Programming in JAVAVikram Kalyani
 
Java Concurrency, Memory Model, and Trends
Java Concurrency, Memory Model, and TrendsJava Concurrency, Memory Model, and Trends
Java Concurrency, Memory Model, and TrendsCarol McDonald
 
Multithreading In Java
Multithreading In JavaMultithreading In Java
Multithreading In Javaparag
 

Destacado (6)

Real world Python+django
Real world Python+djangoReal world Python+django
Real world Python+django
 
Concurrent paradigms - Paralelism approaches
Concurrent paradigms - Paralelism approachesConcurrent paradigms - Paralelism approaches
Concurrent paradigms - Paralelism approaches
 
Web Servers: Architecture and Security
Web Servers: Architecture and SecurityWeb Servers: Architecture and Security
Web Servers: Architecture and Security
 
Multi-threaded Programming in JAVA
Multi-threaded Programming in JAVAMulti-threaded Programming in JAVA
Multi-threaded Programming in JAVA
 
Java Concurrency, Memory Model, and Trends
Java Concurrency, Memory Model, and TrendsJava Concurrency, Memory Model, and Trends
Java Concurrency, Memory Model, and Trends
 
Multithreading In Java
Multithreading In JavaMultithreading In Java
Multithreading In Java
 

Similar a Mysql multi threaded_server_introduction

高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
线程编程方面
线程编程方面线程编程方面
线程编程方面yiditushe
 
Redis在唯品会的应用实践.pdf
Redis在唯品会的应用实践.pdfRedis在唯品会的应用实践.pdf
Redis在唯品会的应用实践.pdfjaydenhu
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,DbaCevin Cheung
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysqlpwesh
 
TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例maclean liu
 
Rpc原理与实现
Rpc原理与实现Rpc原理与实现
Rpc原理与实现wavefly
 
Php Webservers
Php WebserversPhp Webservers
Php Webserverssamon127
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
第一讲 My sql初步
第一讲 My sql初步第一讲 My sql初步
第一讲 My sql初步hjl888666
 
Static server介绍
Static server介绍Static server介绍
Static server介绍sun jamie
 
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展yp_fangdong
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130Jinrong Ye
 
IBM Cloud Private Introduction
IBM Cloud Private IntroductionIBM Cloud Private Introduction
IBM Cloud Private IntroductionGuangya Liu
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记yiditushe
 
备库预热工具relayfetch介绍及性能测试
备库预热工具relayfetch介绍及性能测试备库预热工具relayfetch介绍及性能测试
备库预热工具relayfetch介绍及性能测试zhaiwx1987
 
Openstack neutron 原理详解
Openstack neutron 原理详解Openstack neutron 原理详解
Openstack neutron 原理详解Yong Luo
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 

Similar a Mysql multi threaded_server_introduction (20)

高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
 
线程编程方面
线程编程方面线程编程方面
线程编程方面
 
Redis在唯品会的应用实践.pdf
Redis在唯品会的应用实践.pdfRedis在唯品会的应用实践.pdf
Redis在唯品会的应用实践.pdf
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
 
TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例
 
Rpc原理与实现
Rpc原理与实现Rpc原理与实现
Rpc原理与实现
 
Php Webservers
Php WebserversPhp Webservers
Php Webservers
 
Php Webservers
Php WebserversPhp Webservers
Php Webservers
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
第一讲 My sql初步
第一讲 My sql初步第一讲 My sql初步
第一讲 My sql初步
 
Static server介绍
Static server介绍Static server介绍
Static server介绍
 
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
IBM Cloud Private Introduction
IBM Cloud Private IntroductionIBM Cloud Private Introduction
IBM Cloud Private Introduction
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
 
备库预热工具relayfetch介绍及性能测试
备库预热工具relayfetch介绍及性能测试备库预热工具relayfetch介绍及性能测试
备库预热工具relayfetch介绍及性能测试
 
Openstack neutron 原理详解
Openstack neutron 原理详解Openstack neutron 原理详解
Openstack neutron 原理详解
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 

Mysql multi threaded_server_introduction