[返回] [最新] [最热门] [最高评价]

秋天

今天武汉起了大风,温度骤降。秋天说到就到了。

前段时间一直住在杭州高强家,我们隔一天去一次可笑岩壁,蚂蚁啃大树一般一点点的清理岩壁,打洞装挂片。夏天和灰风两条线路都完成了,难度都不高,大约一条在 5.10a 另一条在 5.10b 左右。

我发现我的攀岩技术有很大进步。原本我的身体素质不太适合玩这个,一直以来进步也非常缓慢。许多同学苦练两个月就能爬 5.12 的难度,但是我做不到。不过经过这两个
...

云风 2011-09-17 21:03 | 查看: 13487

读了一点 go 的源码

首先是 runtime 里的 hashmap ,想看看 go 的 hashmap 和 lua 的有什么区别。

结论就是 go 的比 lua 的实现复杂的多 (lua 的 ltable.c 不到 600 行代码,go 的 hashmap.c 有超过 1500 行)。go 的 hashmap 更注重于空间效率。go 的 map 是有类型的,key value 类型都固定,存在类型描述结构里
...

云风 2013-08-15 18:17 | 查看: 9925

Buddy memory allocation (伙伴内存分配器)

今天吃晚饭的时候想到,我需要一个定制的内存分配器。主要是为了解决 共享内存 中的字符串池的管理。

这个内存分配器需要是非入侵式的,即不在要分配的内存块中写 cookie 。

而我的需求中,需要被管理的内存块都是很规则的,成 2 的整数次幂的长度。buddy memory allocation 刚好适用。

算法很简单,就是每次把一个正内存块对半切分,一直切到需要的大小分配出去。回收的时候,如
...

云风 2011-12-20 21:38 | 查看: 6145

Hive , Lua 的 actor 模型

上个周末我一直在想,经过一年多在 skynet 上的开发,我已经有许多相关经验了。如果没有早期 erlang 版本的历史包袱以及刚开始设计 skynet 时的经验不足,去掉那些不必要的特性后的 skynet 应该是怎样的。

一个精简过代码的 skynet 不需要支持 Lua 之外的语言和通讯协议。如果某个服务的性能很关键,那么可以用 C 编写一个 Lua 库,只让 Lua 做消息分发。如果需
...

云风 2013-06-26 19:10 | 查看: 6083

ZeroMQ 的模式

在需要并行化处理数据的时候,采用消息队列通讯的方式来协作,比采用共享状态的方式要好的多。Erlang ,Go 都使用这一手段来让并行任务之间协同工作。

最近读完了 ZeroMQ 的 Guide。写的很不错。前几年一直有做类似的工作,但是自己总结的不好。而 ZeroMQ 把消息通讯方面的模式总结的很不错。

ZeroMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议。它有自己的
...

云风 2011-02-25 14:27 | 查看: 5446

如果从头开发新的 3d engine

最近闲了下来。断断续续的再想,如果业余时间弄一个开源项目玩儿,什么是比较好的题材,适合自己来做。想来想去,3d engine 是一个比较好的选择。以我来看,对外开源如果要吸引到足够的有经验的同学参加,必须项目有一定价值。要可以迅速的搭建工作环境并直接看到结果,这样才能有兴趣迭代做下去。起步必须自己一个人来做,东西得有个雏形。所以必须是自己比较熟悉的领域。

若论熟悉,其实游戏服务器的架构和实现,我
...

云风 2011-04-11 15:57 | 查看: 5225

Lua GC 的源码剖析 (2)

早期的 Lua GC 采用的是 stop the world 的实现。一旦发生 gc 就需要等待整个 gc 流程走完。如果你用 lua 处理较少量数据,或是数据增删不频繁,这样做不是问题。但当处理的数据量变大时,对于实时性要求较高的应用,比如网络游戏服务器,这个代价则是不可忽略的。lua 本身是个很精简的系统,但不代表处理的数据量也一定很小。

从 Lua 5.1 开始,GC 的实现改为分步的。虽
...

云风 2011-03-28 14:45 | 查看: 5150

Lua GC 的源码剖析 (4)

今天来看一下 mark 过程是怎样实现的。

所有的 GC 流程,都从 singlestep 函数开始。singlestep 就是一个最简单的状态机。GC 状态简单的从一个状态切换到下一个状态,循环不止。状态标识放在 global state 的 gcstate 域中。这一点前面谈过。

开始的两个状态和 mark 过程有关。

初始的 GCSpause 状态下,执行 markroot 函数。我们
...

云风 2011-03-31 01:02 | 查看: 5064

设计了一个数据格式

最近一段时间在忙着设计和实现我们游戏引擎用到的数据格式。

在此之前,我们一直在直接使用 lua 描述数据;但最近随着数据类型系统的完善,同事建议设计一种专有数据格式会更好。希望专用格式手写和阅读起来能比 lua 方便,对 diff 更友好,还能更贴近我们的类型系统,同时解析也能更高效一些。lua 的解析器虽然已经效率很高,但是在描述复杂数据结构时,它其实是先生成的构造数据结构的字节码,然后再通常
...

云风 2019-01-31 14:06 | 查看: 4358

libuv 初窥

过年了,人都走光了,结果一个人活也干不了。所以我便想找点东西玩玩。

今天想试一下 libev 写点代码。原本在我那台 ubuntu 机器上一点问题都没有,可在 windows 机上用 mingw 编译出来的库一个 backend 都没有,基本不可用。然后网上就有同学推荐我试一下 libuv 。

libuv 是 node.js 作者做的一个封装库,在 unix 环境整合的 libev ,而在 w
...

云风 2012-01-20 23:18 | 查看: 4077

我们的新游戏《心动庄园》上线啦

《心动庄园》已经开发超过了一年半,其实去年这个时候我们已经在内测了,折腾了很久,改来改去的。

之所以项目折腾超过了预期时间这么久都没有被公司砍掉,纯粹是因为开发者对这款游戏是真爱。所有开发人员,甚至包括程序,都花了大量时间玩它,并喜欢它。你可以想想,反复改了一年多还留有爱,那不是真爱是什么?所以即使开发预算超标,公司的管理层也不舍得砍掉它。

这是款农场经营游戏,一开始立项是因为我们公司有很多人
...

云风 2015-08-25 22:49 | 查看: 3948

Protocol Buffers for C

我一直不太满意 google protocol buffers 的默认设计。为每个 message type 生成一大坨 C++ 代码让我很难受。而且官方没有提供 C 版本,第三方的 C 版本 也不让我满意。

这种设计很难让人做动态语言的 binding ,而大多数动态语言往往又没有强类型检查,采用生成代码的方式并没有特别的好处,反而有很大的性能损失(和通常做一个 bingding 库的方式比较
...

云风 2011-12-01 00:40 | 查看: 3664

...更多...