游戏服务器业务线程模型是指在游戏服务器中,如何组织和管理线程来处理游戏业务逻辑,尽可能减少不必要的锁竞争。以下介绍几种常见的游戏服务器线程模型。
使用线程组为每个玩家分配线程
这里使用线程组,而不是线程池,主要是为了强调线程池在处理任务自主权比较弱。我们通过将若干条线程组成一个线程组,每条线程有自己的序号,通过某种请求映射策略将玩家强求封装成一个任务,投入到对应线程的任务队列里。如下代码所示:
private void init() {// 根据机器cpu核心数,初始一定数量的线程,形成线程组for (int i = 0; i < CORE_SIZE; i++) {ThreadFactory threadFactory = new NamedThreadFactory("message-business");// 每条线程设置编码,接受对应的任务workerPool[i] = Executors.newSingleThreadExecutor(threadFactory);}}/*** 线程组统一接受任务,根据映射规则转发给对应线程* @param task*/public void acceptTask(BaseGameTask task) {if (task == null) {throw new NullPointerException("task is null");}int distributeKey = (int) (