当前位置:首页 > 日记 > 正文

mysql源代码学习偷看线程说明

mysql源代码学习偷看线程说明
感觉代码有点乱,注释代码是随机写的。似乎没有统一的规范。不同文件中的代码风格有差异。也许在很多牛mysql的手上,它会把人的牛长的。我看是比较浅的,适应自己的代码风格,青蛙,或者敬畏的源头开始我们的旅程。我的菜鸟,大神拍。

MySQL可以启动,我们应该如何学习不能一步一步地从主的角度出发,把MySQL作为软件来比较底层数据库,涉及到数据库的各个方面,没有坚实的理论基础,也很熟悉mysql的各个模块,从主会介绍自己的死胡同啊,看什么,最后什么都没有,我们很脆弱。

经过思考,我想调试服务器通过客户端,所以它是更现实的学习服务器代码,通过客户端的动作,看服务器的响应。例如,从客户端登陆行动,看看服务器通信,用户识别,识别和任务分配,通过创建表,不同的物理存储服务器如何解析DDL和通过INSERT语句采取不同的存储引擎,服务器如何进行保存操作。看看如何创建并通过SELECT语句优化SQL语句的语法树,看看服务器的交易是通过回滚。这主要是通过MySQL数据库的代码跟踪的思路研究或特定的代码不做太多(主要是我不熟悉C++),好读书,不求甚解,哈哈。
因此,为服务器的分析准备了以下SQL语句。
复制代码代码如下所示:
1,登录(登录)
mysql.exe -中- P
2、DDL(建表语句)
创建表tb_myisam(C1 int,C2 varchar(256))= MyISAM引擎;
创建表tb_innodb(C1 int,C2 varchar(256))= InnoDB引擎;
3、插入
插入tb_myisam值(1,孤独的脂肪);
插入tb_innodb值(1,孤独的脂肪);
4、选择
选择从tb_myisam C1;
SELECT * FROM tb_innodb;
5、回滚

大家都知道,MySQL可以通过多个客户端的并发操作,也包括登录,当然,当他们登录,其他用户可以做一些其他的操作,所以我们想登录应该有一个特殊的线程的客户端和服务器连接的创建,确保每个用户的登录时间,,这个任务应该由一个独立的线程进行执行。
首先,我们介绍了在下一个MySQL中创建线程的功能,并创建线程的功能。它看起来像_begin_thread和CreateThread。我们在整个解决方案中通过VS找到它,宾果!在my_winthread。C,我们发现函数调用_begin_thread pthread_create。在os0thread。C,我们发现os_thread_create叫做CreateThread函数调用。一个系统如何封装两个系统功能定睛一看,发现my_winthread。C在项目mysys,和os0thread。C级Innobase项目下!!这不是InnoDB存储引擎的插件,它原来是存储引擎的封装底层功能。我认为MySQL的应用范围很广。除了开源之外,插件存储引擎也是不可或缺的。用户可以根据实际应用选择不同的存储引擎,对于大公司,他们将开发自己的存储引擎。
下面的分析pthread_create是如何调用_begin_thread,首先看源代码。
复制代码代码如下所示:
国际pthread_create(pthread_t * thread_id,pthread_attr_t *属性,
pthread_handler函数,void *参数)
{
处理包含指定选择器的线程;
结构pthread_map *地图;
dbug_enter(pthread_create );
如果(!(地图= malloc(sizeof(*地图)))))
dbug_return(- 1);
映射函数;
地图->参数=参数;
pthread_mutex_lock(thr_lock_thread);
# ifdef __borlandc__
包含指定选择器的线程=(处理)_beginthread((void(_userentry *)(void *))pthread_start,
属性->属性-> dwstacksize dwstacksize:
65535,(无效*)地图;
其他#
包含指定选择器的线程=(处理)_beginthread((void(__cdecl *)(void *))pthread_start,
属性->属性-> dwstacksize dwstacksize:
65535,(无效*)地图;
# endif
dbug_print(信息),(包含指定选择器的线程= %路
* thread_id =地图-> pthreadself =包含指定选择器的线程;
pthread_mutex_unlock(thr_lock_thread);
如果(包含指定选择器的线程=(处理)- 1)
{
int错误=错误;
dbug_print(误差
()不能创建线程来处理请求(错误%d)
dbug_return(误差:1);
}
无效(设定线程的优先级别(包含指定选择器的线程,属性->优先));
(0)dbug_return;
}

关键代码是以下三句话:
复制代码代码如下所示:
映射函数;
地图->参数=参数;
_beginthread((void(__cdecl *)(void *))pthread_start,
属性->属性-> dwstacksize dwstacksize:
65535,(无效*)地图;

从这里我们可以看到,一个新的线程创建的固定功能的pthread_start的名字,我们来创建函数func是安装在地图上,在同一地图的安装功能参数,因此我们可以推断pthread_start功能,会有这样的代码:
地图- >功能(图->参数);
MySQL没有选择直接_beginthread(函数,stack_size,参数)形式,但一个包,不知道这是什么好处专家观点不那么小,我菜鸟的顿悟,但~ ~
在这一点上,我们设置的断点在pthread_create功能,调试mysqld,打破断点,并看到系统线程的状态:
我们第一次进入pthread_create,没有线程开始创建。从理论上讲,系统线程应该只有一个主线,但现在有这么多线程。这些应该由InnoDB存储引擎创建的线程(特别是在plugin_init)。根据线程的名称,结合注释,它猜测这些线程的作用。
io_handler_thread:你可以知道的名字,这些都是我/ O线程负责磁盘I / O。
svr_error_monitor_thread:它应该是一个服务器错误监控线程。
svr_lock_timeout_thread:它应该是一个带锁的线程。
svr_master_thread:
/ *************************************************************************
控制服务器的主线程。
服务器控制的线程应该是特定于作业的线程。
svr_monitor_thread:
/ *************************************************************************
一个线程打印输出的信息通过各种InnoDB监视器..
监视线程并打印信息。

轻轻的飘,不去游说,我们只关心pthread_create线。在调试的基础上,具有相同名称的多个线程的线程_threadstart找到,如下所示:
调试表堆栈可以知道三个线程的创建者和角色,如下所示

造物主
处理功能
create_shutdown_thread
handle_shutdown
start_handle_manager
handle_manager
handle_connections_methods
handle_connections_sockets创作者:一个函数调用pthread_create创建一个线程。

处理功能:由pthread_create创建线程的线程函数称为具体。
从名字上我们可以看到,handle_connections_sockets应与螺纹的加工,在秩序方面,也应如此,只有在所有的其他线程的系统必须被创建,以创建监听线程(螺纹连接),监控系统应该由最后一个线程创建。
查找我们需要登录的线程。下一次这个线程,分析如何登录,以及在登录后分配给用户什么资源。
作者:在cnblogs没有代码

相关文章

如何恢复默认的字体在windows7系统

如何恢复默认的字体在windows7系统

字体,恢复,默认,系统,电脑软件,注释:有时我们觉得系统默认字体不好,然后改变字体。因为它在更换字体之前不记得系统原来的字体,所以不知道如何将它恢复到默认字体。这是个好办法。有兴趣的朋友可以参考一下。 在使用系统时,我们有时会觉得系统…

完全卸载MySQL在Debian的方法

完全卸载MySQL在Debian的方法

方法,卸载,电脑软件,Debian,MySQL,在服务器配置测试与服务环境之前,我很容易用在线现成的脚本安装,MySQL也不会启动,所以我只是重新安装mysql服务器get -清除,原本认为这种命令可以帮助我很好地解决这个问题,所以我按下面的命令重新安装: 复制代…

fpxpress.exe的功能是什么该fpxpre

fpxpress.exe的功能是什么该fpxpre

查询,功能,过程,电脑软件,fpxpress,点评:fpxpress.exe是微软微软FrontPage Express网页制作相关的程序,默认的Internet Explorer捆绑编辑HTML网页 进程文件:fpxpress或fpxpress.exe 进程名称:微软FrontPage Express 过程类别:安全风险的过程 …

Win8系统安装IIS7.0步详细教程

Win8系统安装IIS7.0步详细教程

详细教程,系统安装,电脑软件,评论:IIS是微软Web服务器的重要组成部分。今天,萧边将推出Win8系统安装IIS7.0的步骤和说明图文教程。主要阐述了通过Win8安装IIS7.0的方式,不知道如何操作。朋友可以看一下。 IIS是微软Web服务器组件。今天我们要…

基础教程教你用Word2010书法

基础教程教你用Word2010书法

基础教程,教你用,电脑软件,书法是中华民族的艺术瑰宝,能写一手好字,在书法艺术上的技能,我们要从古人学书法字帖, 。事实上,书法可以DIY,使用Word2010可以根据自己的需要作出与众不同的书法设计。 首先,创造一个书法。 运行Word 2010,点击文件;在…

PPT的原因和解决办法不能从检查中

PPT的原因和解决办法不能从检查中

检查,解决办法,原因,电脑软件,PPT,核心提示:PPT公开和解决方案遇到PPT打开不要担心,根据检查这一步可以解决你的问题原因和解决办法到1。PowerPoint无法打开文件类型版本,表示不同的PPT打开、关闭… PPT无法打开的原因及解决方法 如果你不担心…

如何设置Win7的解决方案没有在待机

如何设置Win7的解决方案没有在待机

解决方案,如何设置,状态下,电脑软件,点评:一旦电脑进入待机状态,就会断网,应用程序也会停止运行,所以电脑不需要设置待机来解决,这种情况需要挂一些游戏或应用非常实用,在这里与大家分享待机下的电脑设置方法,感兴趣的朋友可以参考一下。 有时,当我…

Vista/Win7内存管理详细的了解会让

Vista/Win7内存管理详细的了解会让

内存,内存管理,会让你,原因,详细,点评:对于Windows Vista、Windows7内存的使用,进行了详细的介绍文章,让你了解Windows7的大内存的原因 Vista / Win7内存管理的详细解释,对于Windows Vista、Windows7内存的使用,大多数用户从XP升级相信更多的自…

Soundtrax是soundtrax.exe-过程

Soundtrax是soundtrax.exe-过程

过程,电脑软件,Soundtrax,soundtrax,exe,点评:soundtrax.exe是前尼禄soundtrax相关计划的一部分 进程文件:soundtrax或soundtrax.exe 工序名称:前Nero Soundtrax 过程类别:安全风险的过程 英文描述: soundtrax.exe是一个过程,属于领先尼禄sound…

ppwerpoint演示印刷作为一个讲座

ppwerpoint演示印刷作为一个讲座

作为一个,演示,讲座,电脑软件,ppwerpoint,作为一名记者,在演示前把你的PowerPoint演示文稿打印给观众。观众可以参考相应的手稿时,你所展示的,或者你可以参考在本手稿。如果你打印演示在讲义的形式,你可以把空白行在每一页的每一页为观众注意。…

如何修改的Win8通知对话框的显示时

如何修改的Win8通知对话框的显示时

对话框,通知,显示,修改,时间,点评:如何修改Win8通知对话框的时间,或调整。许多新手朋友对此表示怀疑。其实很简单。这是一个很好的教程,希望能对你有所帮助。 图标:在Win8界面右上角的通知对话框;; 首先,我们打开Windows 8的控制面板,选择并轻松使…

mysql数据库错误代码中文详细说明

mysql数据库错误代码中文详细说明

中文,数据库,错误代码,详细说明,电脑软件,1005:创建表失败 1006:创建数据库失败 1007:数据库已经存在,数据库未能创建。 1008:数据库不存在,删除数据库失败 1009:删除数据库文件失败导致数据库删除失败 1010:删除数据目录失败导致数据库的删除 1011…