Comments
:x :twisted: 神云网络2015版最新免费建站方案 http://www.uzsz.cn
使用共享变量的方式做多线程会是恶梦
以角色为单位锁定其所有的附属属性,不光是属性模块吧?其他属于角色的数据呢(比如战斗时buff定时扣除l背包中的物品)?甚至会影响到角色之外的数据?譬如有个buff叫移形换位,不光增加角色的敏捷属性或速度,甚至定时改变你的位置,同时影响角色所在地图视野格子的数据;又比如有个buff定时増加角色属性的同时在角色周围定时刷宠物辅助角色战斗,这些是不是也要保证原子性?更大粒度的锁?如果这些无需保证原子性的话,似乎保证同时更新两个属性原子更新也无必要,除非两个属性必须同时改变否则引起状态不一致可能导致游戏逻辑异常的,换言之,两个属性不是正交的,那么是否可以两个属性合并一个对象,对象內加更小的锁?
Posted by:
Cingolee | (17)
June 3, 2012 12:58 PM
建议少用锁和共享内存结构,后面开发中往往遇到痛苦的事情,编码也要十分谨慎。就像osd一样(你懂的)。建议多使用queue或者socket通讯,扩展性,安全性都更好。
Posted by:
richard | (16)
May 30, 2012 06:57 PM
不懂lua。我在做的项目中,也在用多核多线程。在mac os xcode开发中,GCD是个绝妙的东西,我用它解决了读写锁和线程安全问题,非常简单实现了。
Posted by:
huotianjun | (15)
May 26, 2012 06:47 PM
Thank you for your sharing
牛叉呀~~~~~~~
Posted by:
john | (13)
May 14, 2012 06:40 PM
你期望的单服承载人数是多少?
Posted by:
肥鸟 | (12)
May 13, 2012 04:07 PM
锁模型不适合在这么多个核里面跑,我觉得还是得用Actor模型,Erlang、Go、Scala那种
@16L
x86也不是原子的
Posted by:
芊芊水 | (10)
May 7, 2012 10:25 AM
直接在 CPU 一级阻塞,这个阻塞怎么实现的?和系统提供的互斥量一样的挂起还是死等?
@raio x86也不是无锁的,然后双缓冲 多个写入的时候 还是需要锁
Posted by:
芊芊水 | (9)
May 7, 2012 10:23 AM
最近在学Lua,有个问题始终没找到答案:Lua里面有没有可以做编码转换的库啊?这应该是个很常见的问题吧,例如fetch一个网页是gb的,像保存为utf-8或者像统计字数。
Posted by:
yaya | (8)
May 6, 2012 11:44 PM
能不能从业务逻辑上就把数据分开。每一份数据都只有一个线程或者进程读写。
比如说角色身上的buff可以由角色所在的地块服务器处理。每个地块服务器对应一个操作系统线程以及一个lua_State,下面有若干coroutine。
这样不就规避了线程同步的问题了吗?
使用共享变量的方式做多线程会是恶梦,bug非常难找,性能也不一定高。
推荐使用消息机制,吞吐量会很高,缺点是会牺牲一定的实时性。
Posted by:
zcpro | (6)
May 5, 2012 08:02 PM
双缓冲机制呢?应该也可以吧,只有一个写入者,其余的都是读取,那么写入的时候只往一个副本上写,写完之后更新配置表的入口指针就OK了,x86机器上更一个指针这种操作应该本身就是原子的吧
Posted by:
raio | (5)
May 5, 2012 10:11 AM
写的非常专业,感谢分享
虽然看不懂,但是感觉有种 oracle DB 里面latch/mutex/spin/burn CPU的那种感觉;觉得如果不经过load testing的话,负载高的时候可能会碰到很多BUG/Performance问题。
Posted by:
sync | (2)
May 4, 2012 04:13 PM
没做过游戏,看不懂。不过非常期待你们的新游戏早日上线,从05年不玩大话后就再没碰过网游了,但你的新游戏一定会去玩!
Posted by:
谈老弹 | (1)
May 4, 2012 03:25 PM