首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外部进程与线程和数据处理

外部进程与线程和数据处理
EN

Stack Overflow用户
提问于 2015-02-25 01:09:25
回答 1查看 65关注 0票数 1

我正在开发一个mmorpg游戏服务器,它同时为数百名,有时甚至数千名玩家提供服务。发送到此服务器的某些播放器操作需要数据库访问( sql ),例如:当用户选择其字符之一时,与此字符关联的所有数据(项、级别、位置)都将从sql服务器检索,即使此应用程序与sql服务器没有任何(直接)连接。该软件通过向外部数据服务器发送一个特定的数据包来做到这一点,外部数据服务器的作用就像一个“代理”到sql服务器。(所有这些都是为了避免用缓慢的数据库查询阻塞网络线程池)

为了说明它是如何工作的:

注意:每个客户端都有一个ID,假设客户端已经通过身份验证,并在字符选择屏幕上。

  1. 播放机向包含所选字符名的GameServer发送(数据包)。
  2. GameServer向DataServer发送一个(数据包),其中包含(player id +字符名)
  3. DataServer执行所有必需的查询,并向GameServer发送包含请求者id和所有字符信息的(数据包)。
  4. GameServer用返回的信息答复客户端( DataServer将客户机id发回标识客户端)

按顺序排列:

客户端-> (字符名) -> GameServer -> (播放器id +字符名) -> DataServer -> (播放器id +字符信息) -> GameServer -> (字符信息) -> Client

今天,整个体系结构就是这样运作的。但对我来说,这太复杂了,无法维护,因为我必须维护两个独立的软件,并处理这些服务器之间的网络连接,以及创建新请求、新响应、解析这些内容等所有相关内容。我与一位同事讨论了这一点,他说外部服务器的性能会更好,但我正在考虑使用C++特性(lambdas)来实现这一点,所以我考虑创建一个线程池,每个线程都有自己的数据库连接。这个线程池将等待数据库工作的到来(就像std::function<>调用的那样),这样我就可以更容易地在同一个进程中处理请求,而不必担心阻塞网络队列(iocp)。

那么,在同一进程上使用线程池而不是使用外部进程的利弊是什么?我应该期望它表现得更好,更糟,还是完全一样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-25 01:19:38

“那么,在同一进程上使用线程池而不是使用外部进程的利弊是什么?”

最重要的对点是

  1. 通过复制父进程的整个环境,创建另一个子进程要比仅仅创建另一个子线程(或者仅仅是通过池访问一个子线程)要昂贵得多。
  2. 与子进程通信也需要更多的资源,而且远不如与简单子线程交换数据的选项最优。

“我应该期望它表现得更好,更糟,还是完全一样?”

从上面提到的要点(特别是第二点)来看,在与子进程沟通时,人们应该期望的表现要差得多。

对不起,我实际上看不到任何优点,因为您在描述用例时使用了外部过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28709400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档