游戏思考10:游戏服务器的进程和线程简单谈谈(未完待续6/30)

本文探讨了游戏服务器架构的三种常见模式:多进程单线程、单进程多线程和单进程单线程,分析了各自的优缺点。多进程单线程提供故障隔离和扩展性,但存在内存冗余和数据同步问题;单进程多线程利用多核但增加了开发复杂性;单进程单线程则在初期开发和维护上更为简便,但后期可能存在性能瓶颈。文章还举例了采用不同架构的游戏,并讨论了为何要进行进程拆分,强调了系统拆分在协同开发、性能优化和全球化部署中的重要性。
摘要由CSDN通过智能技术生成

一、总的看法

之前游戏开多线程是因为机器原因,榨干CPU的全部性能,现在机器性能好了,所以基本都是多进程

二、各种搭配

1)多进程单线程(每个单进程一个单线程)

  • 优点
    ①故障隔离,一个逻辑服务器宕机不会影响全服玩家;
    ②扩展性强,多个分布式部署,可以达到几万人同时在线

  • 缺点
    ①为了充分利用多核,会一台物理机会部署多个逻辑服务器,但是由于这个服务器是开了共享内存的进程,会有很多内存冗余占用;
    ②由于有多个逻辑服务器,得有个中控服务器异步的同步各个逻辑服务器的数据,数据同步和异步调用让写逻辑非常难受

  • 代表作
    天涯明月刀、轩辕传奇、御龙在天
    在这里插入图片描述

  • 理由
    1)首先,不拆进程不利于协同开发,因为系统耦合度太高。现在一款游戏大作,开发团队动辄几十人,多则上百人,其中负责后台开发的团队也有大几十人,这么一个系统,大家都在同一个进程里面写,责任不明晰,出了问题很难判断问题在哪。
    2)其次,后台很多系统、子系统之间性能有差异。比如登录模块在10万PCU下所需的进程数、机器数,可能跟负责对局的模块不一样,聊天模块、活动子系统之间也存在性能差异。如果不拆分进程,就不能做到按需部署只能很暴力地把进程按某种倍数扩容,这必然会浪费机器资源,甚至有可能增加机器、部署更多进程,都解决不了性能瓶颈。
    3)现在很多游戏都会寻求出海,出海必然会存在地域差异,如果想要提供好的游戏体验,就必须考虑就近部署的问题,如果进程不拆开的话,就近部署其实比较难做。
    4)在容灾上会受到一定限制。因为我们没有把关键子系统拆分出来,而人力成本、机器资源、项目资源都有限,只有将这些有限的资源投放到关键子系统上,才能让我们获得更大的收益。

举例:
那么要怎么拆分进程呢?在腾讯内部,有个原则叫「大系统小做」。一个大系统具体要怎么拆分?标准有很多,我们通常会从功能需求、处理流程和通用组件这几块来拆分,比如功能可以拆分成好友、公会、邮件、聊天这几个部分。
在这里插入图片描述

2)单进程多线程

  • 优点
    有冗余内存,充分发挥多核优势,不需要中控server同步数据

  • 缺点
    ①为了操作简单和数据一致性,很多玩法要求玩家必须在同一场景下,给策划加了很多限制;
    ②为了避免加锁,又能保证数据安全,有些夸线程调用做了很好的包装,通过Service的方法提供服务,异步写法太多很复杂;
    ③后期需求过多,迭代很多次后,耦合度越来越高,多线程会增加出错的概率,总体来说开发效率是很大的弊端

  • 举例
    天龙八部、完美世界两款手游、云凤skynet

在这里插入图片描述

3)单进程单线程

  • 优点:
    前提开发和调试成本低,易于维护,适用于编制紧张的团队
  • 缺点:
    优化到后期,服务器性能会有瓶颈,较大的突破需要付出很高的成本去提升
  • 举例
    剑侠情缘、盛大 热血传奇、仙剑奇侠传online、

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值