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

Mysql源码学习——Connection Manager(3)

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

       {

      sql_print_warning("Can't create thread to handle named pipes");

      handler_count--;

    }

}

    if (have_tcpip && !opt_disable_networking)

  {

    handler_count++;

    if (pthread_create(&hThread,&connection_attrib,

               handle_connections_sockets, 0))

    {

      sql_print_warning("Can't create thread to handle TCP/IP");

      handler_count--;

    }

  }

 

if (opt_enable_shared_memory)

  {

    handler_count++;

    if (pthread_create(&hThread,&connection_attrib,

               handle_connections_shared_memory, 0))

    {

      sql_print_warning("Can't create thread to handle shared memory");

      handler_count--;

    }

  }

}

 

  

 

由于对于namepipe和memory share的通信方式不太了解,这里只研究socket的通信方式。从代码中可以看出,handle_connections_sockets便是socket的设置,我们就来看下它。

 

4.socket管理创建新线程socket管理其实比较简单,直接给出其伪代码:

 

handle_connections_sockets

{

    select; //监视socket文件描述符

    new_socket = accept;//处理到来的客户端连接

    thd = new THD;创建THD类

    vio_tmp = vio_new(new_socket,VIO_TYPE_TCPIP, 0);   //初始化VIO结构体

    my_net_init(&thd->net, vio_tmp);//初始化thd的net结构体

    create_new_thread(thd);//为这个连接创建一个新的线程,如果是单线程模式的话,就不会创建一个新线程

}

 

  

 

首先是select函数进行监视socket端口,如果监控到有连接,则通过accept函数接受客户端的连接,然后新建一个THD类,将连接参数全部设置到THD类的参数上,最后调用create_new_thread函数,这个函数便是重点。 我们进入这个函数,看下做了啥。

 

create_new_thread

{

    ++connection_count;//全局连接数自增

    thread_count++;    //全局线程数自增

    thread_scheduler.add_connection(thd);//真正创建线程

}

 

  

 

     So easy,首先将全局连接数+1,全局线程数+1,然后调用add_connection函数,这个函数就是我们在上面第一步设置连接的

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

推荐热点

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