2011-02-24

最近读MySQL代码读的很爽。主要是vc下编译、调试、查找引用要比emacs啊eclipse之类的好多了。eclipse的CDT要是BUG少一点就好了。读代码主要是为了了解MySQL协议。很多东西非得去看代码,光凭Google搜是得不到答案的。比如刚连接的时候,Server发给Client的那个Hello packet中的thread id有什么用?我目前发现只有在kill的时候有用。按我现在的分析,SAE的mysql proxy发给client的这个值始终为0。

还有很有意思的一件事情,有个同事跑过来问我,MySQL怎么处理网络连接的,用的是不是select? 我说“是”,然后他“哦”了一声,很满意的走了。还有人会继续想当然,用的是select啊,难怪不能支持高并发啊。而实际上,MySQL默认是thread-per-connection的模型。用select只是为了同时在多种协议上监听(TCP、Local socket、shared memory等)。 可是,看代码最多回答What,而不能回答Why。代码中偶尔也会有注释写为什么这么设计(比如server和client如何协商auth plugin那段),但是这样的注释太稀少了。所以我在想是不是同时得多去邮件列表里搜搜。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥