<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ping]]></title><description><![CDATA[lighttpd,ttserver,tcpip]]></description><link>https://blog.youkuaiyun.com/pingnning</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pingnning]]></copyright><item><title><![CDATA[tokyo cabinet源码分析-mdb设计和实现]]></title><link>https://blog.youkuaiyun.com/pingnning/article/details/4773829</link><guid>https://blog.youkuaiyun.com/pingnning/article/details/4773829</guid><author>pingnning</author><pubDate>Thu, 05 Nov 2009 20:52:00 +0800</pubDate><description><![CDATA[  mdb - memory db mdb是cabinet的一种数据组织方式，其他还有hdb(hash)、bdb(btree)等，详见"tokyo cabinet源码分析"。由名字可知，mdb使用纯内存(不一定，见下面)，速度最快。它是后面其他较高级的数据组织方式的基础，hdb、bdb的read cache都是直接使用mdb实现。而且mdb的实现最简单，所以先从mdb分析。 ]]></description><category></category></item><item><title><![CDATA[宏的一些副作用]]></title><link>https://blog.youkuaiyun.com/pingnning/article/details/4737129</link><guid>https://blog.youkuaiyun.com/pingnning/article/details/4737129</guid><author>pingnning</author><pubDate>Wed, 28 Oct 2009 10:40:00 +0800</pubDate><description><![CDATA[1、优先级问题	1) 传入变量优先级			#define MULTI(a,b)	a * b			MULTI(1+2,3)			=> 1 + 2 * 3	其实是想要(1 + 2) * 3	2) 作为值返回时，类似1）			#define ADD(a,b)	(a) + (b)			int c = ADD(a,b) * 3;	=> (a]]></description><category></category></item><item><title><![CDATA[tokyo tyrant源码分析-编程小技巧]]></title><link>https://blog.youkuaiyun.com/pingnning/article/details/4732249</link><guid>https://blog.youkuaiyun.com/pingnning/article/details/4732249</guid><author>pingnning</author><pubDate>Tue, 27 Oct 2009 10:18:00 +0800</pubDate><description><![CDATA[----------------1、内存分配---------------- char stack[TTIOBUFSIZ];		//65536char *buf = (rsiz  ...free((buf == stack) ? NULL : buf); rsiz是运行时才能确定的值。这种方法的思想是尽可能使用静态分配，因为动态分配有损效率。因为rsiz的未]]></description><category></category></item><item><title><![CDATA[tokyo tyrant源码分析]]></title><link>https://blog.youkuaiyun.com/pingnning/article/details/4732027</link><guid>https://blog.youkuaiyun.com/pingnning/article/details/4732027</guid><author>pingnning</author><pubDate>Tue, 27 Oct 2009 09:35:00 +0800</pubDate><description><![CDATA[目录>	-总体设计			-主从复制实现	-日志系统实现	-编程小技巧 分析的tyrant版本为：1.1.18各节的标题已经清晰表明了其内容。各节的重点是尽可能简单的描述设计和实现，不会对函数或技术点做任何注释。基础知识还是通过书本系统的学习较好。另外描述的风格是剪裁过的源代码+文字解释，没有图片(画图比较浪费时间)，而且我觉得图片除了给点直观的第一印象，]]></description><category></category></item><item><title><![CDATA[tokyo tyrant源码分析-日志系统实现]]></title><link>https://blog.youkuaiyun.com/pingnning/article/details/4724392</link><guid>https://blog.youkuaiyun.com/pingnning/article/details/4724392</guid><author>pingnning</author><pubDate>Sat, 24 Oct 2009 22:18:00 +0800</pubDate><description><![CDATA[ enum {                                   /* enumeration for logging levels */  TTLOGDEBUG,                            /* debug */  TTLOGINFO,                             /* information */  TT]]></description><category></category></item><item><title><![CDATA[tokyo tyrant源码分析-主从复制实现]]></title><link>https://blog.youkuaiyun.com/pingnning/article/details/4724377</link><guid>https://blog.youkuaiyun.com/pingnning/article/details/4724377</guid><author>pingnning</author><pubDate>Sat, 24 Oct 2009 22:14:00 +0800</pubDate><description><![CDATA[  "tyrant分析-总体设计"中已经提到，slave起一个线程(do_slave)做主从复制，它和master建立tcp连接，发送请求命令和起始时间rts +1(上次的更新时间加1秒)给master，然后循环的从master那里接收一条条的记录，更新自己db、ulog和rts file。do_slave是以1秒为频率执行的。(实际是等待一次do_slave执行完毕后，再等待1秒，然后进]]></description><category></category></item><item><title><![CDATA[tokyo tyrant源码分析-总体设计]]></title><link>https://blog.youkuaiyun.com/pingnning/article/details/4676878</link><guid>https://blog.youkuaiyun.com/pingnning/article/details/4676878</guid><author>pingnning</author><pubDate>Thu, 15 Oct 2009 18:49:00 +0800</pubDate><description><![CDATA[ ------------------------	总体设计---------------------------------------结构：---------------多线程。三类线程： 	主线程(1个)：		监听socket，将接收到的请求sockfd分发给工作线程，以及信号处理。	worker线程(thnum个,参数指定，默认为8)：		从]]></description><category></category></item></channel></rss>