Percona 8,0 ThreadPool análisis fuente

Las funciones básicas de la Percona 8,0 ThreadPool no hay mucho cambio allí, no sólo es cambiar la forma de las llamadas, aquí sólo el tapón de subprocesos proceso de inicialización y el proceso de llamada.

Threadpool lógica misma puede referirse a:

MariaDB · análisis de código fuente · grupo de subprocesos

Percona 5,7 hilo de análisis de código fuente piscina

plug-inicializado threadpool

grupo de subprocesos está desactivada por defecto, para activar esta función, especifique los parámetros de manejo de --thread = piscina-de-hilos cuando se necesita para iniciar la instancia. Esta variable de parámetro correspondiente al código es Connection_handler_manager :: thread_handling, en el que Connection_handler_manager es una clase singleton, thread_handling su variable miembro estático. Connection_handler_manager código de modelo de conexión es abstracto, cuando se inicia la instancia, habrá un hilo especial escuchar en el se especifica si una nueva solicitud de conexión en el puerto TCP Socket y Unix, esta parte del código implementado en mysqld_main -> Connection_acceptor-> connection_event_loop () , cuando una solicitud de conexión de llamada cuando hay una add_connection objeto Connection_handler correspondiente) método virtual proceso de conexión Connection_handler_manager (, la piscina hilo y antes de que el modelo de rosca-per-conexión aquí entrará diferente ruta de código debido a que el grupo de subprocesos activada, Connection_handler_manager :: manejador es Thread_pool_connection_handler objeto, el miembro cuando los objetos del modelo de hilo por conexión Per_thread_connection_handler. Determinar Connection_handler_manager :: manejador es una función Connection_handler_manager :: init de conformidad Connection_handler_manager :: thread_handling objetos decisión que constructor de la clase.

Connection_handler_manager::init()
{
  switch (Connection_handler_manager::thread_handling)
  {
  case SCHEDULER_ONE_THREAD_PER_CONNECTION:
    connection_handler= new (std::nothrow) Per_thread_connection_handler();
    break;
  case SCHEDULER_NO_THREADS:
    connection_handler= new (std::nothrow) One_thread_connection_handler();
    break;
  case SCHEDULER_THREAD_POOL:
    connection_handler= new (std::nothrow) Thread_pool_connection_handler();
    break;
  default:
    DBUG_ASSERT(false);
  }
}
mysqld_main
 ->init_server_components
  ->plugin_register_dynamic_and_init_all
   ->plugin_init_initialize_and_reap
    ->plugin_initialize
     ->threadpool_plugin_init
	    tp_init  # 初始化threadpool
	    my_connection_handler_set  # 设置connection_handler
		 Plugin_connection_handler *conn_handler = new (std::nothrow) Plugin_connection_handler(chf);
		 Connection_handler_manager::get_instance()->load_connection_handler(conn_handler);

En donde el núcleo de entrada tp_init threadpool inicialización, la inicialización thread_group_t matriz.

conexión my_connection_handler_set procesamiento de ajuste de modo.

ThreadPool proceso llamando

mysqld_main
 ->connection_event_loop
  ->Connection_handler_manager::process_new_connection
   ->add_connection

Que es el núcleo de subprocesos entrada add_connection, contenidos principales son los siguientes:

Crear una conexión, la conexión asignado a un thread_group, insertar grupo de cola.

Servicio de despertador o crear un subproceso de trabajo, si el grupo no es subproceso de trabajo activo.

Supongo que te gusta

Origin www.cnblogs.com/jmliao/p/12627860.html
Recomendado
Clasificación