对于每个游戏会话有100,000个用户和4个用户的用户群,我们是否应该为每个请求(例如create_session,move_player,use_attack等)创建新线程?
我想知道什么是处理大型连接的最佳方法,因为如果我们创建大量线程,上下文切换将占用大部分周期,并且如果没有创建线程,则每个请求都必须等待上一个请求完成。
答案 0 :(得分:0)
如果您的目标是可扩展性,那么我将避免每个连接线程。最好有一个事件队列和一个线程池。
游戏公司可能会使用基于非连接的Internet协议,例如UDP。理论上,所有请求都可以在同一套接字上传入,因此您只需要一个线程即可处理该请求。该线程可以将工作分配给其他线程。
您可以拥有更大的线程池,可以在其中为任何线程分配任何作业。或者,您可以将工作进一步组织为特定的作业,每个作业都有一个线程池来处理任务队列。但是我不会为每个请求启动一个新线程。
如何设计线程池和任务分配系统取决于所用语言的库以及应用程序要求。