游戏服务器中多线程之间如何通信

游戏服务器中多线程之间如何通信,第1张

游戏服务器中多线程之间如何通信

在服务器中,线程管理方法是重中之重。因为线程总数不能太多,为了提高服务器的高并发性,需要在线程中快速解决业务流程,不允许长时间阻塞线程。比如不能有互联网io、硬盘IO等实际 *** 作。因此,人们会按需分配有限数量的线程。线程的主要调度方法如下:

1,带有客户端的IO线程

接受客户端信息并向客户端推送信息。

2、求解游戏玩家业务流程的逻辑线程

承担业务逻辑的求解和计算。

3。解决rpc或数据库的互联网线程。

承担不同服务项目之间的沟通。

4、硬盘IO线程解决系统日志

相反的线程做自己的时间。但此刻问题来了,就是这个线程如果按照它的主要用途来分配的话,如果不是完全自由的话,不同线程之间会有数据信息交互。例如,如果一个区域有一台物理机,那么将有一个IO线程来解决客户端的问题,16个业务逻辑线程和3个数据库请求线程。不值得先忽略其他人。在这种情况下,当web服务器收到客户端的登录请求,业务流程线程收到这个请求时,第一件事就是检查数据库中客户的信息内容。因为业务逻辑线程被几个客户端使用,所以不能在这里等数据库请求返回,否则其他业务逻辑会解决。可以,最好的办法就是把这个请求封装成一个恶性事件,发送给数据库中的同一个线程,来解决这个问题。等待数据库线程完成求解,然后将结果通知业务逻辑线程,再求解业务流程。这种情况下,求解出来的数据信息会在内存中运行,所以速度很快,求解后再返回给客户端。

有的人,那不是卡登录吗?是的,解决数据库只有三个线程。mysql的搜索功能测试如下:

如果人们统计1500个线程,只会在高并发超过1500的情况下(具体情况会更低)觉得服务项目更慢。如果高并发超过那个高,说明手游很火,可以等一等钱。再好的人,也可以用排长队的功能。您可以找出数据库线程中等待执行的每日任务的总数。如果超过某个值,可以在业务流程服务项目中将长队列返回给客户端,以便客户端以后索取。

回到文章的主题,那么如何在服务器线程间传输数据呢?俱乐部里的每个人都会有不同的方式。这只是一个例子。希望能给你一些参考,所以你要学会沟通。如果给你更强的方式,我也期待你评价分享。

在Java中,多线程在中间交互数据信息,即线程A给线程B一个恶性请求事件,线程A也需要获取线程B的执行结果,比如登录,所以请数据库线程检查数据库,检查后通知逻辑线程。Java展示了一个未来/可调用的系统,在这个系统中,每个人都可以完全自动地搜索自己的使用方法。但是,它们有一个缺陷,就是说线程A在得到结果的时候是一样的(future.get()被启用)。如果线程B没有实现,线程A还是会被卡住。这说明信息不是人们想要的。鉴于此,人们出色的多线程架构,netty的创造者们想出了一个解决方案,那就是Future/promise方法。在这里,我还没有对它的源代码做详细的分析。如果有时间,请再发表一篇文章展示一下。对此感兴趣的同学可以自行查询。下面就说说怎么用吧。

这个编码只是一个模拟,真正应用还需要自己设计方案,首先是数据库搜索的管理专业:

其次是业务流程管理类:

根据这个例子,维护了多线程交互相关的其他数据信息的作用,大家可以得出结论。

极客网络为网游运营商呈现了高性能、高可用、可扩展、高性价比的IDC大数据中心解决方案!详情请咨询在线客服!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/745296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-29
下一篇 2022-04-29

发表评论

登录后才能评论

评论列表(0条)

保存