源码版本:PerconaServerforMySQL5.7.19
MySQL的连接处理分为3类,分别是一个线程处理所有连接、一个连接对应一个线程,以及线程池,这3种处理连接的方式被封装成C++类,他们有一个共同的基类Connection_handler。
One_thread_connection_handlerPer_thread_connection_handlerThread_pool_connection_handler本文简要分析Thread_pool_connection_handler类的实现,如有错误,欢迎批评指正。先看下线程池相关代码逻辑的调用关系:
main主函数mysqld_main初始化环境Connection_handler_manager::init()初始化连接管理类network_init初始化网络mysqld_socket_acceptor-connection_event_loop();等待新的连接请求事件voidConnection_handler_manager::process_new_connection(Channel_info*channel_info)处理新的连接boolThread_pool_connection_handler::add_connection(Channel_info*channel_info)新的连接放入队列queue_put连接放入队列wake_or_create_thread唤醒或者创建新的工作线程create_worker创建新的工作线程worker_mains线程函数handle_event处理事件threadpool_process_request处理请求do_