由于去个新公司,业务开发都是用python,由于之前使用的lua开发,对python如何支持多线程挺好奇的,随着了解python有个GIL这个东西使得业务开发中使得单个python程序并不能充分利用多核的优势。
由于业务是游戏业务,状态同步的游戏,服务器有大量计算以及序列化反序列化的业务(比如战斗功能,以及战斗结束后大量日志的序列化反序列化业务),这个使得架构中变得一个game进程最好同时只有一个战场。虽然这种架构在多核的机器上一定程度可以利用多核,但是这个业务颗粒划分的还是太粗了。比如一个战场的逻辑在某个核上跑超时的时候,其他核还是处于比较空闲的状态,这个就变得‘一核有难,多核围观’的尴尬的状态了,所以就考虑在一个战斗义务的时候进行一定的划分并且尽量多共享一些数据避免使用“网络传输来共享数据”。实现上述的这个我觉得有2个方案
- 是按照业务模块单独开几个C的线程,和python线程之间进行通信。这个划分比如序列化反序列化加密解密线程,网络消息发送接收线程,定时器线程这些都可以解耦。
- 还有就是python层如何利用多核优势,python支持多进程的方案,父子进程的方案,这个就实现了python层的更细颗粒的业务模块的划分。
网友评论