摘要: 前面讲了mysql的启动,线程的初始化,线程池的基本原理,现在就看看工作线程都在循环中主要干了什么,顺便说一下以后的方向,以后主要会学习mysql的cache原理,大约涉及到6000行左右的代码,不知道什么时候能搞清楚,之后就会进入innodb引擎,主要攻几方面方面:innodb的文件存储结构,索引 阅读全文
posted @ 2017-05-18 00:13 macJack 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 今天抽空主要看了一下mysql线程池(cached threads)的实现原理,总体并不那么复杂,也学到了一些设计原理,值得记录一下。为了简化代码,让思路更清晰,我删去了不少错误处理,线程同步锁的代码,mysql中大量使用全局变量,这些都需要锁了控制访问。 先大致说一下几个关键的东西: 1、List 阅读全文
posted @ 2017-05-08 00:24 macJack 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 前面简单浏览了st_vio和st_net这两个结构体,在此稍微总结下,mysql是一个连接一个线程专门去处理的,线程用THD结构体描述,其中包含了st_net字段用来描述这个连接的网络属性,st_net包含st_vio,而st_vio则抽象化了网络接口。 下面就看看st_vio和st_net的初始化 阅读全文
posted @ 2017-05-06 12:24 macJack 阅读(478) 评论(0) 推荐(0) 编辑
摘要: st_net也是一个网络属性相关的结构体,还没有接触太多,但在mysql启动的时候就会设置好里面的参数 阅读全文
posted @ 2017-05-06 09:46 macJack 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 工作忙,学习忙,但还是得随便写点。 st_vio,顾名思义,应该是指virtual IO,即虚拟IO。根据代码里的注释,这个是一个高度抽象的进程间通信接口结构体,mysql中,如果不是用C++类来抽象,那么就是用含函数指针的结构体来抽象,这也是C语言最常用的习惯。 阅读全文
posted @ 2017-05-03 23:04 macJack 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 今天终有点空闲(心情?)整理下mysql的网络部分代码了。整体网络部分的代码是非常简单的,mysql几乎没有做过多的封装,很直接的调用系统函数,一目了然。 总体看来,mysql主要使用了一个连接一个线程的模型,对客户端连接的socket使用非阻塞模式。linux版本,甚至包括OSX都用的是poll函 阅读全文
posted @ 2017-04-23 18:23 macJack 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 今天正式开始漫漫长路,打算这几年用业余时间刷刷mysql5.5源代码,由于手边的书籍基本都是基于mysql5.5的,所以就不用5.7版本的代码了,更何况我更关注基本内核。因此,没有特殊指明,那么,一般都指mysql5.5版本。工作原因没有深入去了解mysql,既然想玩技术,决定用业余时间搞搞些技术活 阅读全文
posted @ 2017-04-09 20:28 macJack 阅读(915) 评论(0) 推荐(0) 编辑