Se o seu jogo for intensivo em hardware remotamente, você precisará de threads para lidar com todo o hardware moderno; as futuras CPUs lançadas no próximo ano ou dois estão começando a tornar o mínimo de 4 núcleos e até 16 núcleos comuns para os mercados de entusiastas / desempenho. Se você estiver fazendo algum multiencadeamento, faça definitivamente uma arquitetura orientada a tarefas, pois qualquer outro modelo de encadeamento é inerentemente quebrado para mecanismos de jogos prospectivos.
Agora, lembre-se de que com "tarefas" quero dizer "trabalhos" e não "segmentos separados para diferentes subsistemas de mecanismo". Você absolutamente não quer fazer algo como ter um tópico gráfico, um tópico físico, um tópico AI, etc. Isso não ultrapassa um punhado de núcleos e, na verdade, não gera nenhum paralelismo real. A física não deve executar mais de uma atualização por atualização de IA (você deseja que sua AI possa reagir a eventos de física), e os gráficos não têm quase nada de novo para renderizar se a física não for executada, portanto, cada subsistema é executado naturalmente em uma sequência ordem. Você não
O que você quer é fazer é isso. Crie um carretel de linha. Execute o loop do jogo com a sequência clássica de atualizações do subsistema. No entanto, para cada subsistema, separe a carga de trabalho em lotes separáveis distintos e distribua-os ao conjunto de encadeamentos. Aguarde a conclusão de todos os trabalhos antes de executar o próximo estado do loop de atualização do jogo. Alguns subsistemas podem ter várias subestações; por exemplo, os gráficos podem emitir uma série de trabalhos para seleção e, em seguida, uma segunda série de trabalhos para criar a criação de fila. Essa abordagem evita o problema de sincronização da primeira, aumenta para um número muito maior de núcleos e, francamente, é apenas mais fácil de codificar, depurar e manter.