摘要: 之前遇到一个问题,需要将场景服务这个模块拆分出来,用独立的一个线程去执行。使用独立的线程好处就是,逻辑写的可以相对简单粗暴点,不必考虑到大量的场景服务逻辑卡主线程的情况。 由于我们服务器之前是使用python作为脚本开发,而大家都知道的python有个gil,这意味着并发的线程里只有一个可以获得解释 阅读全文
posted @ 2017-11-30 22:35 adinosaur 阅读(1653) 评论(0) 推荐(0) 编辑
摘要: 最近由于遇到一些问题,老大们决定把场景显示相关的代码拆分出来用一个独立的线程去做(大概是实现一个独立的场景服务吧),感觉这样挺好的,毕竟这部分功能本来就较为独立。 我对这部分内容还挺感兴趣的,思考了一下,心里有一个感觉是比较好的解决方法,遂提笔记录下来:) 先简单说说背景:地图场景是按格子划分的,每 阅读全文
posted @ 2017-11-13 00:41 adinosaur 阅读(726) 评论(0) 推荐(0) 编辑
摘要: 目前项目组正在使用的热更新机制有一些潜规则,其中一个就是不能更新闭包函数(因此也就不能对函数使用装饰器修饰)。 热更新机制原理 先来说说目前的热更新机制的原理,由于更新类是一个较为复杂的话题,因此这里只讨论更新函数的情况。 当需要热更新一个函数时: (1)首先是调用python的built-in函数 阅读全文
posted @ 2017-10-22 16:04 adinosaur 阅读(908) 评论(0) 推荐(0) 编辑
摘要: 原文链接:The internals of Python string interning 由于本人能力有限,如有翻译出错的,望指明。 这篇文章是讲Python string interning是如何工作的,代码基于CPython2.7.7这个版本。 前一段时间,我向同事解释了python的buil 阅读全文
posted @ 2017-09-16 23:26 adinosaur 阅读(971) 评论(0) 推荐(0) 编辑
摘要: 今天下班在班车上想了一个关于配置表存储的小优化,起因是早上的时候发现了一个bug,这个bug是由于在运行时动态更改了一个列表配置导致的。 其实关于这种运行时“偷偷”改配置的问题我之前也有考虑过,这种应该是一不小心就会写出的,这不终于都出了一个。 至于如何预防这种问题,我认为在python里面似乎也没 阅读全文
posted @ 2017-09-06 23:02 adinosaur 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 上次总结Python3的字典实现后的某一天,突然开窍Python的__slots__的实现应该也是类似,于是翻了翻CPython的源码,果然如此! 关于在自定义类里面添加__slots__的效果,网上已经有很多资料了,其中优点大致有: (1)更省内存。 (2)访问属性更高效。 而本文讲的是,为什么更 阅读全文
posted @ 2017-08-27 15:19 adinosaur 阅读(1607) 评论(0) 推荐(0) 编辑
摘要: 众所周知,python3.6这个版本对dict的实现是做了较大优化的,特别是在内存使用率方面,因此我觉得有必要研究一下最新的dict的源码实现。 前后断断续续看了大概一周多一点,主要在研究dict和创建实例对象那部分的代码,在此将所得记录下来。 值得一提的事,新版的dict使用的算法还是一样的,比如 阅读全文
posted @ 2017-08-07 00:36 adinosaur 阅读(4721) 评论(0) 推荐(0) 编辑
摘要: 前段时间使用libevent网络库实现了一个游戏服务器引擎,在此记录下其中遇到的一个问题。 我在设计服务器上选择把逻辑和网络分线程,线程之间通信使用队列。但是这样做会有个问题: 当逻辑线程想要主动的发一个数据包的时候,网络线程此时可能还阻塞在等待网络IO的系统调用上(比如说epoll)。如果不做特殊 阅读全文
posted @ 2017-07-08 20:27 adinosaur 阅读(7603) 评论(0) 推荐(2) 编辑
摘要: 最近项目的开发工作较少,因此有时间能捣鼓自己的东西。于是花了大概两个星期的时间,粗略的搭起了一个游戏服务器的框架。 对我而言重复造此轮子的意义有: (1)在经历过一个上线游戏项目的洗礼之后,作为对这一年的开发工作、技术学习的一个总结,将自己这一年来所学所得所思所想,通过代码表达出来。 (2)作为一个 阅读全文
posted @ 2017-06-14 01:25 adinosaur 阅读(1894) 评论(0) 推荐(0) 编辑
摘要: 这次总结一下c++的两个内存模型。本来内存模型的概念应该是编程语言无关的。但是在众多高级编程语言中貌似只有c++支持使用不同的内存模型(Java只能使用顺序一致型内存模型)。 内存模型主要是和原子操作相关。在c++11中,一个原子对象,其load和store方法都有一个参数,用于指定操作所使用的内存 阅读全文
posted @ 2017-01-29 01:41 adinosaur 阅读(960) 评论(0) 推荐(0) 编辑