作者xtxml (赤木巧☠)
看板GameDesign
标题[请益] 请问有关game server多线程处理的问题
时间Tue Jul 10 09:45:23 2012
最近在做一个game server的架构,目前是使用boost::asio做非阻塞TCP/IP连线:
(考虑的是一般稍具规模MMORPG架构)
io_service
-----------------------+------------------------------
| | |
thread1:io_service.run() thread2:io_service.run() thread3: io_service.run()
io_service是boost一个处理io的接口,
并且常驻thread去执行io_service.run()来处理各类事件(accept、read、write等等)。
目前完成到这个部分没有问题。但接下来要怎麽处理接收到的事件?
想法1:直接由接收事件的线程执行後续的处理。
缺点:结构上会比较乱,IO的线程跟server游戏本身调用的线程无法区分开来。
并且有更多同步问题。
想法2:各thread接受资料之後放入堆叠(除了一些可以简单即时处理的指令),
由game server的main loop(或特定线程)在正确的时机去处理(可能再开线程)。
缺点:堆叠部分的设计好坏感觉会大幅影响效率。
其他未知问题(?)
目前倾向想法2,不过这只是我没啥经验的想法,应该还有更好的想法3.4.5.,
想请问一下实际的game server架构上面通常怎麽设计会比较理想?
可以兼顾讯息处理的效能以及线程管理的方便性。
麻烦各位前辈解惑了,感谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.45.115
1F:推 littleshan:想法 1 加 coroutine 07/10 10:22
2F:→ littleshan:把游戏的逻辑写在 coroutine 内 07/10 10:23
3F:→ littleshan:IO thread 接到後就去 resume,这样两边可以隔离开 07/10 10:23
我会去看一下有关这部分的内容,感谢您:)
※ 编辑: xtxml 来自: 220.133.45.115 (07/10 10:50)