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

来源:互联网 发布:免费地磅称重软件 编辑:程序博客网 时间:2024/05/22 04:58

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


1. 入口点:

handle_connections_sockets()函数

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

代码SVN地址:


2. 线程策略:

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

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

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


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

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

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


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

mysqld.exe --thread-handling=no-threadsmysqld.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





(二)嵌入式服务器版本



原创粉丝点击