Mysql源代码阅读笔记(四) 服务器监听

(一)服务器/客户端版本


1. 入口点:

handle_connections_sockets()函数

我们在此要用实例程序做实验,学习Mysql服务器所使用的两种事件监听技术:select和poll同时介绍更给力的事件监听技术epoll和libevent。

代码SVN地址:


2. 线程策略:

Mysql支持 单线程和多线程 两种连接线程数。

如果是单线程,则在同一时刻,只能有一个connection连接到Mysql,其他的连接会被挂起。

如果是多线程,则同一时刻可以支持多个connection同时连接到服务器。


一般单线程的方式很少采用。

多线程的方式中,采用了线程缓冲池的策略。

即如果一个连接断开后,其所创建的线程不会被销毁掉,而是放到缓冲池中,等待下一个新的connection到来时,首先去线程缓冲池查找是否有空闲的线程,有的话直接使用,没有的话才去创建新的线程来管理这个connection。


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

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

我们查看相关代码:

目前就两种类型,如下
enum scheduler_types
{
  SCHEDULER_ONE_THREAD_PER_CONNECTION=0,
  SCHEDULER_NO_THREADS,
  SCHEDULER_TYPES_COUNT
};

get_options()函数里面:

嵌入式数据库,肯定是用单线程。
服务器版本,则根据命令行参数决定采用单线程或者每连接一个线程。

#ifdef EMBEDDED_LIBRARY
  one_thread_scheduler();
#else
  if (thread_handling <= SCHEDULER_ONE_THREAD_PER_CONNECTION)
    one_thread_per_connection_scheduler();
  else                  /* thread_handling == SCHEDULER_NO_THREADS) */
    one_thread_scheduler();
#endif





(二)嵌入式服务器版本



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值