2008年11月7日

持久化的多键映射,使用BerkeleyDB

摘要: 如前介绍,相当于 std::map >,但接口也不完全相同,这里只贴代码:/*vim:settabstop=4:*/#ifndef__febird_bdb_kmapdset_h__ #define__febird_bdb_kmapdset_h__ #ifdefined(_MSC_VER)&&(_MSC_VER>=1020) #pragmaonce #endif #include #include"native_compare.h" #include"../io/DataIO.h" #include"../io/Mem 阅读全文

posted @ 2008-11-07 18:29 能发波 阅读(167) 评论(0) 推荐(0)

持久化的 map ,使用 BerkeleyDB

摘要: 使用前面介绍的序列化框架,可以非常简单地将Bekeley DB作为存储层,实现一个易于使用的,强类型的,持久化的map。这个设计的的基本原则就是:模板作为一个薄的、类型安全的包装层,实现层的代码可以多个模板实例来公用,这样不但加快了编译时间,也减小了生成的代码尺寸。这个实现相当于std::map,但接口上也不完全相同,主要是基于易实现和性能考虑。下一篇介绍std::map >的BerkeleyDB实现。多的不说,贴上代码。file: dbmap.h/*vim:settabstop=4:*/#ifndef__febird_bdb_dbmap_h__ #define__febird_bdb_ 阅读全文

posted @ 2008-11-07 18:14 能发波 阅读(346) 评论(0) 推荐(0)

最便捷、最强大、速度最快的C++序列化框架

摘要: 项目地址:http://code.google.com/p/febird最便捷、最强大、速度最快的C++序列化框架。特别注意:vc6太古老,不符合C++规范,无法使用该框架1.高性能,速度非常快,比你能找到的同类产品至少快一个数量级2.在网络通讯,数据库存储中非常好用。3.预先支持所有基本类型,所有stl容器类型(除stack/queue之外)4.支持变长int32/uint32/int64/uint645.支持stl::pair,boost::tuple6.可选的版本控制,而非强制a)对于小对象,通常不需要版本控制b)boost::serialization的版本号是强制的,当初我设计这个序 阅读全文

posted @ 2008-11-07 18:08 能发波 阅读(203) 评论(0) 推荐(0)

2008年10月30日

多线程 Pipeline 的改进

摘要: 如果一个任务的执行分多个步骤,有些步骤慢,有些步骤快,如果在处理时间长的步骤上使用更多线程,那么因为队列的缓冲作用,在平均处理时间上,这些步骤就可以大致持平了,从而导致更大的吞吐量。 以前的 Pipeline 完全胜任这样的需求,但是,如果有一个这样的需求,考虑如下例子:有若干篇文章(百万以上),需要对这些文章进行分析并索引,使用Pipeline,分成以下步骤:步骤平均耗费时间(每篇文章)顺序注释一,读取文章很快,5毫秒按文章ID顺序读取二,分析文章较慢,30毫秒处理顺序无所谓三,索引文章较快,8毫秒按文章ID顺序建立索引基于效率上的考虑,顺序建索引的速度快得多,实现上也更简单为了平衡速度,在 阅读全文

posted @ 2008-10-30 16:55 能发波 阅读(334) 评论(0) 推荐(0)

爱尔兰巨角鹿的死去

摘要: 地球上曾经出现了一种鹿,叫做爱尔兰巨角鹿,毫无疑问,它有非常巨大的鹿角。按照新达尔文注意的解释:在开始的时候,较大的鹿角使得鹿有较强的生存能力,它夺取了第一个高地。后来事情发生了一点变化,雌鹿开始喜欢鹿角巨大的雄鹿,那些鹿角稍微小点的雄鹿,大多不是因为生存不下去而灭绝了,而是因为没有雌鹿和它交配而没了后代。然后,鹿角就越来越大,以至于大得对它来说是巨大的负担,让它承受不起,但是,为了能够得到母鹿,鹿角还在不停地长大。为什么母鹿会喜欢大得夸张以至于毫无实用性甚至是有害的鹿角呢?道金斯给出了一个非常合理的解释:固然小鹿角的雄鹿的生存能力和大鹿角的雄鹿一样强,但是,正因为鹿角已经成了一个负担,负担得 阅读全文

posted @ 2008-10-30 15:43 能发波 阅读(480) 评论(0) 推荐(0)

2008年9月27日

语言进化的推动力

摘要: 最近又读了一些进化论。联想到当前,最有潜力和最有影响力的几种计算机语言:C/C++,Java,.Net,D,当然其中.Net不是单一的语言,而是一个多语言的平台。其中D语言大家相对比较陌生。这里我要重点说的是C++和D。先说C/C++。虽然C++和C有很大的差异,但我还是要把他们放在一起,因为它们的很多共同的优缺点。先说优点:C/C++历史悠久,有广泛的支持平台、的现有库、用户基础、性能就更不用说。但是它们有缺点,很致命,就是开发效率低。虽然使用现代C++在很大程度上改善了开发效率低下的问题。但是C++相比于C还有另外的缺点:1. 学习难度高!以至于大家经常说,搞了5年C++,不敢说熟悉C++ 阅读全文

posted @ 2008-09-27 16:04 能发波 阅读(144) 评论(0) 推荐(0)

2008年6月3日

WinApi 参数的层次

摘要: 我以前一直对WinApi参数太多,使用困难颇有微词,但是仔细想想,直接使用Api编程的情况是非常少的。Api难用点,功能强点,好过好用但功能弱。同时,仔细分析下Api的参数,能发现,它其实是很有设计原则的,我只归纳出以下:尽量使用单层参数,也是说,参数是简单数据类型,没有内嵌结构;尽量避免使用多层参数,也就是说,不得不使用结构传递参数的时候,结构里面尽量避免再内嵌其它结构。因此可以看到,一个参数很多的Api中,往往有好几个参数共同表达一个逻辑实体,而在面相对象中,这应该用一个对象来表达。看看这个Api,很生动的一个例子:WINSOCK_API_LINKAGEINTWSAAPIGetAddrIn 阅读全文

posted @ 2008-06-03 17:36 能发波 阅读(226) 评论(0) 推荐(0)

2008年5月9日

泛型就意味着代码膨胀?

摘要: 我所了解的泛型实现,也就C++和Java,C++靠的是用代码膨胀来满足性能,Java泛型则只是一个Sugar。现在使用C++泛型的人越来越多,生成的程序体积也越来越大。一个对10种数据和10种算子使用了泛型算法的程序,代码膨胀的最大可以达到100倍。但实际上,生成的代码“很模板”。现在的C++还没有C++0x 的 closure/auto 等功能,代码膨胀已经达到了很恐怖的程度。——比如使用了 Boost.asio 的程序尺寸就很恐怖。现在,代码膨胀虽然已经是一个很引起大家注意的问题,但是还没有让大家足够注意。虽然有一些减少代码重复的技巧,但那只是技巧而已,对问题的映射不是很直接,有一定难度, 阅读全文

posted @ 2008-05-09 17:06 能发波 阅读(288) 评论(0) 推荐(0)

2008年5月3日

vista 中网上银行不能用的 bug 解决方案

摘要: 我碰到过这个问题,一开始我把工行的网站加入“可信站点”区域后,可以用了,但是过了一段时间(安装了一些Windows更新后),又不能用了,也还是不能用网上银行,总提示“the "my" store could not be opened ”,到“可信站点”中看,工行的站点仍然在啊!不知道微软哪根筋抽了!不过现阶段,人家再抽筋,我们也必须跟着人家也抽筋,要不就别用网上银行!这个问题困扰了好久,每次我都是使用管理员权限打开 IE 再重新粘贴网址来付款,有时候这种方法还不能用,比如在其他(非阿里巴巴旗下)网站使用支付宝付款时。气愤之下,曾经到一个论坛大骂IE,大骂微软那帮傻.逼。但 阅读全文

posted @ 2008-05-03 00:49 能发波 阅读(119) 评论(0) 推荐(0)

2008年4月22日

多线程的 pipeline 设计模式

摘要: 一个简单例子:有很多个html网页,网页的id、title、url、path等信息存在一个数据库表中,网页内容存储在一个磁盘阵列上。现在要把所有网页都读出来,统计其中的html标签、正文等信息,并写入另一个数据库表,怎样的设计最好呢?一般的想法是使用多个平行的线程,每个线程处理某个ID范围的网页。但是仔细分析就可以发现,对每个网页的处理可以分为以下处理步骤:读取数据库行 读取文件内容 解析html,生成统计数据 将统计结果写入数据库 这几个处理步骤有各自的特征,读取数据库的时间一般主要消耗在数据库服务器响应,读取文件内容一般主要消耗在磁盘IO上,解析、统计消耗在计算上,写统计结果也消耗在数据库 阅读全文

posted @ 2008-04-22 16:49 能发波 阅读(346) 评论(0) 推荐(0)

导航