您现在的位置:主页 > 技术中心 > 数据库技术 > Mysql

Mysql源码学习——Connection Manager

来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:54 点击:

 

1.连接的线程数

 

       Mysql支持单线程和多线程两种连接线程数。如果是单线程,则在同一时刻,只能有一个connection连接到Mysql,

 

其他的连接会被挂起。如果是多线程,则同一时刻可以支持多个connection同时连接到服务器。

 

     可以通过设置服务器的启动参数来设定连接的线程数:

 

mysqld.exe --thread-handling=no-threads

mysqld.exe --thread-handling=one-thread-per-connection

 

  

 

服务器如何通过参数来选择使用哪种方式的呢?且看服务器中的分支代码:

 

#ifdef EMBEDDED_LIBRARY

  one_thread_scheduler(&thread_scheduler);

#else

  if (global_system_variables.thread_handling <=

      SCHEDULER_ONE_THREAD_PER_CONNECTION)

    one_thread_per_connection_scheduler(&thread_scheduler);

  else if (global_system_variables.thread_handling == SCHEDULER_NO_THREADS)

    one_thread_scheduler(&thread_scheduler);

  else

    pool_of_threads_scheduler(&thread_scheduler);  /* purecov: tested */

#endif

 

  

 

这段代码出现在get_options函数中,此函数是根据传入的服务器参数,设置相应参数的模式。由这段代码可以看出,如果定义了EMBEDDED_LIBRARY宏定义(估计应该是嵌入式使用),则调用one_thread_scheduler,即使用单线程。如果参数小于等于SCHEDULER_ONE_THREAD_PER_CONNECTION,则调用one_thread_per_connection_scheduler,即每个连接一个线程,即多线程。 至于global_system_variables.thread_handling是如何进行设置的呢?其实就是根据我们传递给服务器的参数--thread-handling进行设置的,参数的设置统一在函数get_options中,其调用mysqld_get_one_option,其中有个分支,代码如下:

 

case OPT_THREAD_HANDLING:

  {

    global_system_variables.thread_handling=

      find_type_or_exit(argument, &thread_handling_typelib, opt->name)-1;

    break;

  }

 

  

 

对参数初始化有兴趣的可以具体的看下get_options这个函数,这里就不详细讲解了。 我们来看下one_thread_scheduler和one_thread_per_connection_scheduler的源代码,看下他们都做了些什么?

 

void one_thread_scheduler(scheduler_functions* func)

{

  func->max_threads= 1;

#ifndef EMBEDDED_LIBRARY

  func->add_connection= handle_connection_in_main_thread;

#endif

  func->init_new_connection_thread= init_dummy;

  func->end_thread= no_threads_end;

}

 

void one_thread_per_connection_scheduler(scheduler_functions* func)

{

  func->max_threads= max_connections;

  func->add_connection= create_thread_to_handle_connection;

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

推荐热点

  • mysql-mmm
  • mysqldump命令——MySQL数据库备份还原
  • Oracle数据导入MySQL的快捷工具:MySQL Migration Tool
  • 简简单单储存过程——循环一个select结果集
  • MySQL数据库十大优化技巧
  • Mysql安装笔记
  • Mysql主主复制架构配置
  • Mysql的Procedure 参数为NULL问题分析
  • MySQL Stmt预处理提高效率问题的小研究
?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
Copyright © 2004-2024 上海卓卓网络科技有限公司