- 博客(14)
- 收藏
- 关注
原创 Beautiful Code {16. The Linux Kernel Driver Model: The Benefits of Working Together}
题目好像很玄的样子,有点《集市与教堂》的味道。 从代码上来讲,这是一个用c实现面向对象的继承特性,像是解释C++的继承如何实现的。记得有个朋友提醒过我子类对象的内存不一定是父类的内存在后面,虽然实际是这样的,但标准没有要求。 #define container_of(ptr, type, member) ({ / cons
2010-02-24 22:18:00
233
google的好东西-proto bufffer
今天研究了下google的proto buffer,其实以前就看过,但是没深入研究,今天凑巧心情好 :D 。这个东西可以在协议设计上大展身手,本质上就是序列化的协议,无论是用于网络通信还是数据存储。它的很精妙的地方是base128的编码,设计了一套完整的类型。支持字段的添加和删除,这个功能非常实用。库的功能也很完善,支持数据的压缩,还有缓存,完全满足我们的需要。自己以前有类似的想法,但是能力不...
2009-09-13 00:17:24
153
编程无他,唯手熟尔
看过一句话,“编程无他,唯手熟尔”,是的,不能否认。代码是要不断 的写的,如果哪天不写代码了就是告别技术了。最近改一个模块,翻来覆去,现在留下的代码量不及我写过的1/3,不断的重构,两星期前的代码基本没有了。云风每次用以前的代码都不是拷贝粘贴,都有修改。现在也体会到了,现在很洋洋得意的代码,几天之后再看也许就难看的很了,人在走,水在流。因为这种不停的重构让我有了研究敏捷编程的兴趣。手熟,不只是...
2009-09-12 01:49:05
302
学习google的hashtable
看了一下google的hashtable的实现,densehashtable如果用了内存池,还有优势吗?它的代码写的很漂亮,反正比看到的gnu的好,注释不那么乱和没用。一套type的操作写的很好,开了一个思路,在template类或函数,可以把template 的类型当作value操作,比如if 是指针。。。是字符串。。。这个和偏特化的作用有些重合,可以少写不少特化。 modern c+...
2009-09-08 23:57:18
129
无锁编程
研究下无锁编程,方向是消息队列,读写者的问题。现在有成熟的方案,就是ringBuffer,环形队列。还有是重写数据结构的,从底层改变,使用一些原语。boost就实现了几个无锁的数据结构。没有锁就需要原语,赋值语句和比较语句算不算原子操作呢?boost是把autoIncrement用汇编实现的,有没有必要?环形队列是理想的方法,在网络编程中还是很实用的。他针对的问题虽然很局限,实际上只有一个写者...
2009-08-16 00:49:12
111
The Mana World 有感
我想The Mana World和一个完整的MMORPG游戏还差很远,底层用的enet,没有多线程,简单的脚本系统。简单的框架却也可以让架构显的非常清晰,揭示了MMORPG的核心。...
2009-08-13 00:28:58
226
事件注册机制
研究了下CEGUI的源码,感性的说很漂亮,很舒服,结构清晰,self-explain。我对界面研究不多,我就是被CEGUI的强大功能和漂亮代码“诱惑”进来的。重点看了下事件注册机制的实现,发现和我实现的服务器端的事件注册机制很相似,理解起来很容易,基本思路就是事件处理,事件注册者,事件发生者,三个角色清晰分工。当然CEGUI比我的代码更灵活,我是把每个事件处理封装成仿函数,注册事件的存储也包括...
2009-08-02 23:35:54
110
服务器架构
和同事聊天谈到服务器架构的话题,根据应用的特点不同的服务器的“高性能”的标准都是不一样的,架构自然也不同。有的追求高并发,有的追求实时相应。对于MMO这样的应用,消息队列还是常用的,在网上看到一些有关的文章也是这样,就是线程功能单一,消息做缓存。我很看好erlang,可惜找不到应用的场景,只能借鉴它的思想。...
2009-08-01 01:24:07
109
vector的猫腻
vector的猫腻还是很多的。源码注释里标明了resize和clear都是expensive的,clear是遍历所有元素析构删除,resize对于需要新增的元素都要构造,如果想达到把vector的元素都恢复成默认构造的状态,clear();resize(size);看起来蛮简练的,实际上还不如for_each直接把每个元素赋值快,前者两次便利,一次调用析构,一次调用构造函数。后者只调用一次...
2009-07-30 23:56:53
132
直觉优化
优化代码也有直觉?最近做了几个在脑子中有模糊印象的优化,这些想法一直在脑子里存在着,可行性也没有验证,写代码时总是时不时的蹦达两下,还不如干脆做了了事。和状态有关,以前做不出来的,现在竟然能做了。直觉当然要profile才能证明值不值得。比如今天,用union把两个word union成一个dword,比较,复制都可以从两个字的操作用一个双字操作来实现,测了下时间,几十万次才节省了几毫秒,能节...
2009-07-29 23:51:40
99
还是索引
因为服务器中经常有大量的遍历,所以维护索引的速度和遍历的速度都很重要。考虑把几个容量小的索引从set改成vector,遍历查找也比维护set的速度快。对象的构造还是很占资源的。把系统中++iter都改成iter++了,能少两次对象构造,很值得。找到一本好书,Memory as a programming concept in C and C++,在google book上有,200多页,正好符...
2009-07-26 23:54:09
79
索引速度测试
晚上认真测了一下hash_map,vector,数组,无索引的效率比较,得到一个比值 54:14:7:4,hash_map的效率让我有点吃惊,毕竟它底层用了vector,hash也是一个整值,却比vector慢了这么多,gprof看到的是迭代器的构造,复制占用了大量的时间。vector的效率比直接用数组低的原因是迭代器的构造和复制。是否可以考虑修改stl的实现把迭代器减少?最后决定把hash_...
2009-07-25 00:55:40
98
原创 万恶之源
讨论组里讨论,有人什么理由也不说,直接来一个“**是万恶之源”,我都在不知道怎么回答了。有万恶之源吗?有的话那就有“银弹”了,一个道理。其实,如果完全按照逻辑思维,问题的答案没有太多,这就像缺少一个属性值,想半天如何不添加字段来得到它的值,事实上往往从一开始就决定了根本绕不过,这就到问题的本质了。讨论问题麻烦讲逻辑,否则没人陪你吵架,浪费生命。...
2009-07-23 00:18:57
108
原创 由此起步
已经工作一年零两个月了,今天在javaeye填了一下简历,也算整理下自己。今天老大找人做客户端,突然发现自己已经无法接受图形界面的编程了,我彻底的接受了Unix的理念。想起曾经看到的一副漫画,“我恨图形界面”。微软的那套东西复杂度太高,随着一个又一个版本,堆积起来一个庞大的软件,可以相信问题会越来越多,这是客观规律。 最近研究的还是lua,erlang,web服务器编程。只有lua是有项目应用...
2009-07-22 00:04:20
98
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人