![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大作
善良的兽人Goodorc
这个作者很懒,什么都没留下…
展开
-
12个球用天平称3次的问题
12个球,其中有1个和其他11个不一样,给你一个天平,称3次,找出不一样的那个 这是个老掉牙的经典问题,在刘飞提示下我想出来了解法。这次挑战一下能否用最好的方式把解法描述清楚。记号: 12个球编号为1、2、3……12 如果1号球可能轻,记为1L;如果1号球可能重,记为1H;可能轻可能重记为1LH。 天平左边轻记为 ; 平衡记为 == 标准重量的球记原创 2012-04-03 17:57:55 · 2364 阅读 · 0 评论 -
Python游戏服务器开发日记(九)近期问题总结。(打酱油中……)
由于领导提出的多进程方案有很多问题,进展缓慢。好在有另一个同事慢慢进展中,我主要是做各种单独的试验,集成各种技术进行尝试。 Python多子进程方案的核心是共享内存,除了mmap方式,还有shm方式,都是linux提供的共享内存方案。 无论哪种共享内存方式,都需要自行申请整块内存,然后在创建对象时,将对象数据放在共享内存区域,实现多进程都能访问的目的。原创 2015-11-12 15:25:39 · 2121 阅读 · 2 评论 -
Python游戏服务器开发日记(六) 解决GIL难题!——Python再认识
本系列文章的第一章就已经提到,用加载多个python动态链接库的方式,可以巧妙的避开GIL,实现多个python环境运行在同一个进程内。 但是从上一个试验,到思考具体的实际用法,又经过了长达一周多的思考试验。到此时,Meme服务器框架的最底层疑难才彻底明朗。本文将彻底分析多线程下多python环境的使用。原创 2015-09-02 22:09:04 · 2428 阅读 · 0 评论 -
Python游戏服务器开发日记(三)用greenlet模拟lua coroutine的研究
分布式系统中,如果一个Entity访问其他Entity,那么这个调用一般都是异步的,也就是说当时不能立即得到返回值。如果用callback的方式实现,函数就会变得很碎。 skynet在核心层处理了这个问题,并提供了skynet.call来做异步调用。 据我研究,Python2.x提供了生成器(generator)模拟coroutine的方法,但是显然是不原创 2015-08-19 17:44:03 · 1849 阅读 · 0 评论 -
Python游戏服务器开发日记(五)skynet_messagequeue和skynet_timer
最近,skynet群里有同好与我一起讨论skynet底层一些比较难理解的实现细节,乘此机会仔细看了一下源码,我最关心的是skynet_mq和skynet_timer两个我会用到的部分。 本文不想讨论太细节的问题,具体的实现思路我并没有理的非常清晰,还是看代码为好。我这里从实际需求出发,写一些tips,方便新来的小伙伴参考。 skynet的time原创 2015-09-02 22:02:16 · 3677 阅读 · 1 评论 -
Python游戏服务器开发日记(七) 关于协程(greenlet)和C语言的思考
前两周埋头在服务器的具体技术试验里,不断的遇到小问题,不断的解决。 大量的问题核心就是在利用dlfcn库调用python so时,API的用法会有变化。导出符号本身不是什么难题,难在某些Python C API是用宏或者其他方式提供的。最奇葩的是greenlet库,把所有API放在一个全局指针数组里,而且初始化方法也和标准python扩展库不甚相同。后来是采取把greenlet库原创 2015-09-20 23:26:45 · 1804 阅读 · 0 评论 -
Python游戏服务器开发日记(四)scons编译工具、C和C++混合使用
今天在编译python so时出现点问题——把其他C库链接到同一个so里——尝试了一早上发现了方法,已经更新到本系列的第二节里了。 整理了一下工程目录,打算用scons管理。 scons毕竟是一种新型的build工具,比makefile肯定有很大进步,至少更清晰好学,少了很多晕晕的trick。但是相比其他高级工具比如cmake之类的,就不清楚优劣了。原创 2015-08-26 20:57:33 · 2718 阅读 · 0 评论 -
Python游戏服务器开发日记(二)绕过GIL启动多线程Python环境
说道Python和多线程,很容易想到GIL,GIL意味着只要是用Python做的多线程程序,就无法利用多个CPU。 经过一些失败的尝试后,我也一度认为GIL是无解的。我们甚至把注意力转向了IronPython等无锁Python,但是实际上那样问题可能更多,比如我们不熟悉mono,mono也没达到完全成熟的程度。 直到skynet的QQ群里一位朋友介绍了另原创 2015-08-19 17:22:56 · 3383 阅读 · 0 评论 -
Python游戏服务器开发日记(一)目标
到了新的环境,老大让我有空研究下一代服务器技术,作为一个长期任务。 新的服务器想达到的目标:1、分布式系统,对象(Entity)之间的关系类似于Actor模型。 2、逻辑服务,是单进程、多线程的,对象之间发消息进行通信,但是简单读取属性尽可能做到直接。3、必须使用Python语言。开发方式类似于BigWorld引擎。这个目标还是很宏伟的原创 2015-08-19 17:03:21 · 7118 阅读 · 0 评论 -
Python游戏服务器开发日记(八)整体方案改变了……
老大和CTO提出了新的方案,之前的架构被推翻了。 简单来说,就是使用多进程,工作进程启动python环境。 最奇葩的是,我们回到了利用共享内存保存entity的方案。entity里保存纯data,是一个纯的二进制数据块。 Entity在用的时候,包装成PyObject给Python使用。如果修改了,则重新打包成二进制块存回去。原创 2015-10-16 18:27:59 · 2667 阅读 · 0 评论 -
TXT格式的Excel表格读取问题优化解法(目前我所知的最简洁算法)
做大型游戏的国内公司,据我所知全都在用Excel做数据——程序把数据接口抽象出来,给策划在Excel里填写数据——除不同的编辑器之外,数据的使用方法几乎都是一样的。 把Excel表格存为txt格式,就得到了一个很简单的文本表格。把它拿给程序识别,只需要解决两个问题: 1、正确的按行、列分析读取数据 2、数据存储我打算把这篇博客写的尽原创 2012-10-27 22:33:01 · 1953 阅读 · 1 评论 -
DP为王——动态规划法学习笔记
动态规划英文名Dynamic Programming,这个名称总让人有一种时曾相识的感觉,可能是因为容易和“线性规划”之类的概念搞混。 首先,适用动态规划的问题十分广泛和常见——地图路径搜索(深度优先、广度优先、A*),填充容器使价值最大化(例如背包体积固定V,有不同的物体具有各自的体积和价值),文本比较算法(常用的diff工具),以及最短路径之类的求最优解的问题,幕后都原创 2012-04-10 14:49:37 · 4980 阅读 · 1 评论 -
Unicode入门与剖析——从一个越南文的案例说起
Unicode入门与剖析——从一个越南文的案例说起 写在前面 和大多数人一样,我本来对Unicode也是一知半解。由于从微软的VS2003开始(说起来竟然是8年以前了),Unicode已经是一个默认选项,熟悉的C++语言的char*变成了_TCHAR*,相信大多数人不会去深究其原理,只是将常用的几个字符串函数、基本类型做了相应变化而已。微软已经帮我们做了大量基础工作,大部原创 2012-04-03 17:50:55 · 6753 阅读 · 0 评论 -
游戏开发培训的两难与探索
游戏开发培训的两难与探索游戏培训的现状说到游戏培训,其实包含的范围比较广。容易想到的一是游戏美术,包括原画、3D美术等几大类;二是游戏编程培训,几年前Cocos2D比较火,现在清一色的Unity3D。CSDN博客 善良的兽人Goodorc EMail:279866129@qq.com打开百度,搜索“游戏培训”,看前几名。可以点进去看看课程介绍。会发现一个问题,不了解行业的人可能察觉不到。后面细说原创 2017-03-13 23:12:39 · 4857 阅读 · 2 评论