首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

游戏服务器 多线程 处置

2013-09-06 
游戏服务器 多线程 处理大家好,我们现在在开发一个棋牌游戏服务器,服务器有120个房间,原来的服务器程序员

游戏服务器 多线程 处理
大家好,我们现在在开发一个棋牌游戏服务器,服务器有120个房间,原来的服务器程序员在设计服务器架构的时候,在服务器上创建了120个线程,每一个线程处理一个房间内的牌局逻辑(一个房间一局完成估计要花10分钟左右)。这样的设计虽然使得处理房间逻辑变得非常简单而且思路清晰,但是120的线程让CPU在线程之间切换时花费了太多时间,而且如果以后房间数量增加线程数也会增加,所以,这一块需要重构,我的想法是只创建4个线程来处理120个房间的牌桌逻辑,这样的话每一个线程要处理30个房间的牌桌逻辑,请问:如何让每一个线程下的30房间的逻辑处理就像被CPU分配了时间片段一样轮询处理,而不是一个房间的逻辑处理完了再去处理另外一个房间的逻辑,因为120个房间的逻辑处理一直都是出于活动状态。请给出详细的思路,小生在这里谢过大家了。 服务器
[解决办法]
你为什么要阻塞处理呢?
其实房间中的每个逻辑并不需要服务端阻塞吧,假设每个玩家请求都是携带了房间信息的,在队列中依次到达,服务端按照心跳依次处理即可
[解决办法]
一个房间的逻辑处理完,在处理另外的房间,并没有什么问题
应该根据一个房间的一次处理逻辑的时间,和最大能容忍的延迟时间, 算出一个线程能处理的最大房间数量, 比如一个房间,处理一次逻辑10ms, 最大允许 1s延迟, 那么一个线程能处理 100个房间
例如:

std::list<House> house_list;

//线程处理主函数
void threadmain()
{
   std::for_each(house_list.begin(); houselist.end(); [&](House house){
        house.tick(); //处理一个房间的逻辑
    });
   Sleep(1);
}

热点排行