随笔分类 -  DataStruct

摘要:这篇文章来自在Segmentfault 上面我提出的一个问题问题背景: Python在执行的时候会加载每一个模块的PyCodeObject,其中这个对象就包含有opcode,也就是这个模块所有的指令集合,具体定义在源码目录的 /include/opcode.h 中定义了所有的指令集合,在执行的时候通过加载opcode完成指令的流水线执行过程,opcode也就是所有指令集合生成的字符串。执行体位于源码目录的 /Python/ceavl.c 中PyEval_EvalFrameEx()函数就是虚拟机的执行体函数,它会加载指令集合并完成运算。问题描述: 在PyEval_EvalFrameEx()函数中 阅读全文
posted @ 2013-04-27 12:19 _Boz 阅读(1659) 评论(0) 推荐(1) 编辑
摘要:00 – 背景知识- B-Tree & B+Treehttp://en.wikipedia.org/wiki/B%2B_treehttp://en.wikipedia.org/wiki/B-tree- 折半查找(Binary Search)http://en.wikipedia.org/wiki/Binary_search_algorithm- 数据库的性能问题 A. 磁盘IO性能非常低,严重的影响数据库系统的性能。 B. 磁盘顺序读写比随机读写的性能高很多。- 数据的基本存储结构 A. 磁盘空间被划分为许多大小相同的块(Block)或者页(Page). B. 一个表的这些数据块以链表 阅读全文
posted @ 2013-03-19 10:18 _Boz 阅读(887) 评论(0) 推荐(0) 编辑
摘要:引言:前面的一系列文章都在说了事件模型,也就是简单的做一个介绍,然后贴出了一些代码作为Demo,上次说到了在反应堆中的超时管理。今天就来说说关于利用最小堆来管理超时的问题。NOTICE:判断一个事件是否超时的方法是, 事件超时时间 减 当前时间 ,如果大于零,说明没有超时,如果小于零,说明该事件超时了。一般做法是怎样来管理所有的超时事件呢?以前的用法都是利用链表来保存所有的超时事件,轮训查看是否事件超时,若超时就采取相应的措施,比如移除事件等。后来的Nginx和libevent采取了更好的措施,Nginx是利用红黑树来管理,而libevent是利用最小堆来管理。今天的主题是最小堆,所以下面的内 阅读全文
posted @ 2012-04-30 19:41 _Boz 阅读(3936) 评论(3) 推荐(3) 编辑
摘要:引言:昨天写了一个简单的通过字典树来索引比较大的字母集合的程序。通过字典树,确实能够大大减少查询时间,是一种不错的字母表的匹配方案。这里我就拿出来分享一下。(ps:英文单词集大概有35W+ 条记录,数据量确实不小,在操作中为了简化,去除了英文单词中的 " ' " "-" 等等,作为字典树,必须以26 个英文字母作为树的子节点的索引。)看看字典树的结构定义:typedef struct _dict_tree_{ struct _dict_tree_ * dt[TREENODENUM]; char c ; char flag ;}DT ;dt 指针指 阅读全文
posted @ 2012-04-20 21:13 _Boz 阅读(1129) 评论(1) 推荐(3) 编辑
摘要:引言:总所周知,NoSQL,Memcached等作为Key—Value 存储的模型的数据路由都采用Hash表来达到目的。如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。借助于Radix树,我们同样可以达到对于uint32_t 的数据类型的路由。这个灵感就来自于Linux内核的IP路由表的设计。作为传统的Hash表,我们把接口简化一下,可以抽象为这么几个接口。void Hash_create( size_t Max );int Hash_insert( uint32_t hash_value , value_type value ) ;value_type *Hash_get( u 阅读全文
posted @ 2012-04-15 14:26 _Boz 阅读(7804) 评论(1) 推荐(3) 编辑
摘要:引言:应用级别的内存分配器的作用主要在于减少malloc函数的调用,降低系统的内存碎片。作为高性能的服务器,一般都会有自己的内存分配方案。slab作为一款Linux内核的经典内存分配方式,应用在很多的应用级别的软件上,比如说Memcached 等。 今天的主题就分享一下最近写的slab的一个简单的Demo,在于分享,代码有些粗糙,比如缺少对于内存字节的比例因子,缺少关于内存不足的情况下重分配等。不过各种应用各有各自的用途,在实现某些cached操作的软件中,由于带有LRU 算法等,在内存快使用完后就采取淘汰策略,所以不一定在内存不足的情况下重新给操作系统分配。Slab内存分配器原理: ... 阅读全文
posted @ 2012-04-13 20:25 _Boz 阅读(2307) 评论(1) 推荐(2) 编辑

4AI?Z:cp1z?_RJQle1]Gs;P!T)RHroW|