加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

游戏处事器中多线程之间怎样通讯

发布时间:2018-11-29 12:46:39 所属栏目:业界 来源:游戏技术网
导读:在游戏处事器中,线程的打点是重中之重,由于线程数目不能太多,所觉得了进步游戏处事器并发性,就必要在线程处理赏罚营业的速率要快,不能长时刻卡住线程,好比,不能有收集io,磁盘IO等耗时的操纵。以是我们会把有限的线程数进配按需分派。线程的首要分派方法

在游戏处事器中,线程的打点是重中之重,由于线程数目不能太多,所觉得了进步游戏处事器并发性,就必要在线程处理赏罚营业的速率要快,不能长时刻卡住线程,好比,不能有收集io,磁盘IO等耗时的操纵。以是我们会把有限的线程数进配按需分派。线程的首要分派方法如下:

1,与客户端的IO线程

认真吸取客户端动静,和向客户端发送动静。

2,处理赏罚玩家营业的逻辑线程

认真营业逻辑的处理赏罚与计较。

3,处理赏罚rpc或数据库同步的收集线程。

认真差异处事之间的通讯

4,处理赏罚日记的磁盘IO 线程

游戏处事器中多线程之间怎样通讯

响应的线程别离做本身该做的时刻。可是这时辰题目来了,既然按用途分派了这些线程,那不行免费的就会呈现差异线程之间的数据交互了。举个例子来说,好比玩家登岸和列队,若是说一个区一台物理机,处理赏罚与客户端的IO线程占1个,营业逻辑线程16个,哀求数据库的线程3个。其余的先忽略不算。这个时辰,处事器收到客户端登岸的哀求,营业线程收到这个哀求,,第一件工作是去数据库查用户的信息,由于营业逻辑线程是多个用户之间共用的,以是你不能在这里守候数据库哀求的返回,要否则会卡此外营业逻辑处理赏罚。最好的做法就是,把这个哀求封装成一个变乱,发送到数据库同步线程中行止理赏罚这个事。守候数据库线程处理赏罚完了,再把功效汇报营业逻辑线程,然后再处理赏罚营业,这个时辰处理赏罚的数据都在内存中了,以是速率很是快,处理赏罚完之后再返回客户端。

有人说,那这样还不是卡登岸吗?是的,必卡登岸,由于处理赏罚数据库的线程就那么3个。对付mysql的查询机能测试如下:

游戏处事器中多线程之间怎样通讯

我们3个线程按1500个计较,那么也只有登岸并发到达1500的时辰,才会认为处事慢一些,(现实环境也许会再底一些),假如并发能到达这么高,声名游戏很火了,可以守候数钱了。假如再多的人,我们就可以行使列队的成果的。可以查询到数据库线程中正在守候执利用命的数目,假如到达某个值,就可以在营业处事中给客户端返回正在列队的,让客户端过一会再来哀求即可。

回到正题,那么游戏处事器线程之间该怎样转达数据呢,也许每小我私人的做法纷歧样,这里只罗列中一个,但愿给各人给带来些参考,就当是交换进修了。假如你有更好的要领,也但愿您评述分享。

在Java中,多线程之间交互数据,即A线程给B线程一个哀求变乱,A线程还要获取B线程的执行功效,好比登岸,请数据库线程去查库,查完之后汇报逻辑线程。Java提供了一个Future/Callable的机制,具体各人可以自动百度它们的用法,可是它们有一个弱点,就是A线程在获取功效时(挪用future.get())的时辰是同步的,假如B线程没有执行完,照旧会卡A线程。这表现不是我们想要的。对付这一点,我们巨大的异步框架,netty的作者给出了一个办理要领,那就是Future / promise模式。这里对它的源码暂不做分皙了,偶然刻另写文章声名吧,有乐趣的同窗可以本身查察。这里只说一下它的用法。

此代码只是模仿,真实应用中还必要本身计划,起首是数据库查询的打点类:

游戏处事器中多线程之间怎样通讯

然后是营业打点类:

游戏处事器中多线程之间怎样通讯

通过这个例子,其余关于多线程交互数据的成果实现,各人就可以举一返回三了。

【编辑保举】

  1. 处事器“非常”的几个也许性预警
  2. 中科曙光智能计较技能总监许涛: 借助全新XMachine处事器,敦促AI应用落地
  3. 关于Kamailio,SBC和SIP处事器的误解
  4. 通过处事器信息维护举办“半自动化”运维
  5. 云端无处事器架构:亚马逊收集处事(AWS)、谷歌云和微软云
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读