`
文章列表
上张图先: 该CPU L2=3MB 首先谈谈对象分配池.不管是内存池也好,对象池也好,首要的速度就是要快。可能有人说内存池为了碎片问题,那减轻碎片负担是不是也是为了速度快呢? 影响速度首先要从2个角度考虑,一个是机器的硬件特性,其次是缓存的命中率。硬件特性包括了对各种不同大小字段的读取,而缓存命中率在大内存的时候更显得犹为重要(因为内存没有硬盘的I/O瓶颈一说)。一会会结合数据图一一指出。所以在写的时候,为slub提供了以下特性:(多参考自linux源码,精练而成) 1.以页面为颗粒度,进行分配。 比如32机器上的页面为4KB,则每次分配以4KB做为颗粒度。当然这个可以调节, ...
      起码有个把月没看javaeye的博客首页了,今晚特意点了一下,果然和个把月前的感觉一样。还是在“保八”的策略。       其实在很早的时候,我就跟javaeye管理人员发出意见,说博客首页太乱了。后来还真改了,改成有分类的阶梯按钮。挺好,清晰了不少。但是仍然没有一个评级的内容档次。说到归纳的功能,不得不说javaeye搜索时的信息垂直抓取,真的很不错。不但搜索的人省心省事,直接一个页面就可以参考,而且对于网站来说,也少了很多分级的烦恼。       那么,我们顺着这个思路往下,在信息越来越聚合并且冗余的互联网上,快速找到需要的兴趣内容,无论是定制还是搜索的手段, ...
前篇 IOCP的分层一     在对象池的使用上,我采用了一前写的一个数组模拟链表的结构,并且做了修改。最大的发现就是,STL的偏特化特性导致空间不能配置的去NEW它,而VECTOR的标准结构里是将这一块隐藏起来的,用户只要不停的PUSH。不过解决的方法当然有,代码修改后丑陋了点: ListOfArray.h的代码 #pragma once #include <assert.h> /** V0.2 2010/04/15 重新考虑了下add这个东西,赋值是一个operate = 的操作。如果你的类里有许多对象,那么按照C++对象的原则,你要为每个对象的 ope ...
      写网络代码时,总希望把逻辑和网络层分开。而在IOCP这样的高并发连接时,Get中返回所带的Key性价比让人垂涎不止。可以把逻辑和网络当成一个对象通过KEY返回,也可以通过一个网络ID,来查找逻辑对象。来讨论下前者:      IOCP_KEY={NetObject, LogicObject}; //暂时结合在一起       当Accept时,申明出一个IOCP_KEY进行维护。Get获得IOCP_KEY时,下一步就是传给上层的逻辑处理。而做法上又不想把整个IOCP_KEY给上层,这样的话结构之间耦合太紧。对上层来说,必须的是一个收到的协议包内容,一个逻辑对象(看需求也可以加入一个 ...
      和朋友在聊游戏服务器的时候,对新的服务器扩展,让我想起了big world的方式。突然觉得big world的负载平衡真的很不怎么样。举个例子来说,在并行编程里,有A,B,C三件事组成的S,big world就相当是把A的一半,B的一半组合起来做,然后剩下的一半组合起来,可想而知在负载需要细化的时候是多么的繁琐。而晚上讨论新的服务器扩展实际 相当把真实的场景当成了一个傀儡计算,真正的都在后台,真正做到把A,B,C中的每一块单独拿出来做一个并行处理。       每一次和高手的交流都让我增加了很多信心,现在就算让我来做服务器主程,我都有把握的豪情。       同 ...
QQ: 2#4#2#1#0#6#7#6#4    #表示为空  Mail: lin_style#foxmail.com    #替换成@   系列一:游戏服务器的总体框架 系列二:游戏服务器的邮局路由 系列三:游戏服务器的邮局服务器      该篇的小总结主要是想综合我手上的代码情况做个总结。此篇后,可能会暂时停止编码,我发现我的很多思维上的东西,其他类似的已经有很多交集点。因此我觉得需要潜心专研几个其他的框架。 而现在手头上的编码大概有4000行左右(不完全统计),一些很基本的服务器和框架形状已经呈现,达到目的了,再下去就是闭门造车了。而且对以前发的文章一些新 ...
     一家之言,如果你觉得天天看书无效、纠结语法的时候可以试试我的方法。      当我初学C/C++的时候,按照网络上的方式,无一例外的进行一系列的图书洗礼,什么C++ PRIMER,effective。。一拉下来。每次都以终于好不容易熬完一本书为荣,这真是太紧了,当然,不是我太大(韩寒语)。      过去的一年,我看了很多领域的杂书,包括经济的,推理的,记录的。尤其看到“太监”一性别诞生的时候,以即日后引得风波浪涛,真的是哑然一笑。任何物品的 出现,都是以创造为主的不是吗?从这条线推下来,我发现越后来的人真的是越难。比如同时写出一个排序算法,后来人的排序价值明显不如前 ...
  QQ: 2#4#2#1#0#6#7#6#4 #表示为空 Mail: lin_style#foxmail.com #替换成@ 行为 难点 邮局服务器流程图 邮局服务器详细图 安全     行为 邮局服务器控制着两个对象,客户端和bin程序。 接收客户端的协议,根据协议中的 ...
/* QQ: 2#4#2#1#0#6#7#6#4 #表示为空 Mail: lin_style#foxmail.com #替换成@ */   行为 难点 邮局路由流程图 邮局路由详细图 实例代码目录说明 算法的示例代码 行为 对于客户端: 1.    接受客户端的短连接 2.    返回给客户端一个密匙 对于邮局服务器: 1.    接受邮局服务器的主动连接并记录,理论上可以动态 2.    接受邮局服务器的定时更新 3.    筛选出邮局服务器的负载信息返回 难点 粗略思考下,有这 ...
/* QQ: 2#4#2#1#0#6#7#6#4 #表示为空 Mail: lin_style#foxmail.com #替换成@ */   核心,我的并行思路 整体拓扑图 代码执行模块层次   核心,我的并行思路 21:31 2009-12-18     昨晚睡觉的时候,又仔细的考虑了下采取的整个框架模型。前提是要充分利用多核和分布。 方法一:把整个游戏看成一个场景,多线程+锁的肆意执行。想都不用想,代价何其巨大和复杂,抛弃 方法二:为了解决这种异步,加入一个任务队列,并且指定一个线程只能执行几个场景。也就是网络收包还是共同的 ...
/* 杂碎代码存放 */ int _HexToDec(char c) { if( c>='a' && c<='f') return c-87; if( c>='0' && c<='9' ) return c-48; return -1; } int _tmain(int argc, _TCHAR* argv[]) { //格式成十六进制 char *p="中文测试"; char BuffHex[32]; char *pBuffHex = BuffHex ...
技术上: 1.命名上的几个动词搞混了。一些下划线的滥用。 2.阅读上的复杂。太悲剧了,每次都在效率上纠结大半天,结果在未完成时就开始优化。而优化的代码总是有点怪异的,对着自己以前一个复杂的文件内流满面。 3.功能上的复杂。再次体会到KISS原则的威力。 4.早上发现问题越界操作了。发现2个独立的for循环中,第二个for循环依赖了第一个for的变量值。由于在一些数据的依赖上优化和技巧性很强,所以一些数据的初始时很奇怪,比如N个for循环。出了问题好,不然我总是担心。 5.出了个大BUG.因为是2个游戏的混合,我负责的地方要取消一个值的存储,改为即时的。在改代码时,那代码太诱惑了。分了两端调用一次 ...
        有奇怪需求的代码,都是历史的问题遗留。在这个时候,就需要借助语言的一些特性。就比如这次遇到的:在一个基类接口函数里,调用一个取得GetMaxLife的函数。因为扩充的需求,人物里加入了一些Life的数值,而怪物类没有。不幸的是它们都继承自这个基类。那么问题就转变成,如何在这个基类接口函数里,识别到不同的派生类做不同的事。想到了这么几个方法 1:GetMaxLife是个虚函数。如果是的话一切都解决了。噩梦的是,可惜非也。连修改的权限都没有,因为一个更底的基类(GetMaxLife是属于它的)的初始化是根据sizeof的判定。多次尝试,还是放弃 2:手工的判断是人物类和怪物类,也就 ...
            脑袋里还残留着在福州惊鸿一瞥车站广告上贴着的"牛年更牛"的时候,虎的前爪已经悄悄的搭在了我的肩上。。。         每年都总感觉自己做得很不够,万幸的是想追求的东西数量跟统计局公布数字老走相反的路线,越来越少也越来越明确了。细细的分下,分别从技术生活大类蔓爬开来。         生活.书籍         前半年时间,还是保持着比较杂的阅读量,主要以人物形态为主。包括余华的《许三观卖血记》《活着》,国外的《月亮月六便士》,童话《小王子》等。         后半年的时候,突然喜欢上了文字。我很赞同韩寒说的作家肯定要有文字上的文章,否则那只是哲 ...
        爷最近和可爱的冬瓜私底下开始了一个游戏的非秘密非官方性的民间活动。虽然是非秘密性,但是爷不太想提,因为还没什么成果。所以说大家看到一些"非XX"的字眼,其实代表的意思就是"XX"。因为官方 ...
Global site tag (gtag.js) - Google Analytics