La simulation du monde de Minecraft tourne sur un seul fil d'exécution. Vingt fois par seconde, ce fil fait tout : entités, blocs, redstone, joueurs, et chaque extension à l'écoute de tout cela. Quand on dit qu'un serveur est « mono-thread », c'est de cela qu'il s'agit, et presque toute question de performance y revient.
Ce qu'est un tick
Le serveur vise à terminer une passe complète du monde vingt fois par seconde : un tick toutes les 50 millisecondes. Si le travail tient en 50 ms, le TPS est de 20 et tout paraît normal. S'il prend 80 ms, le serveur prend du retard et le TPS tombe vers 12.
Un TPS sous 20 ne signifie pas que le serveur « fait moins ». Il fait le même travail plus lentement, donc le temps du jeu ralentit : les cultures poussent moins vite, les fours fondent moins vite, et tout paraît lourd.
Ce que cela explique
| Question | Réponse |
|---|---|
| « Plus de cœurs, ça aide ? » | Un peu. La génération de chunks et une partie des E/S utilisent d'autres fils ; le tick du monde non. |
| « Plus de RAM, ça aide ? » | Seulement si vous en manquez réellement. La mémoire n'accélère pas un fil. |
| « Pourquoi une extension ruine-t-elle tout ? » | Parce qu'elle tourne dans le tick. Dix millisecondes d'extension, c'est un cinquième du budget. |
| « Pourquoi le CPU n'est-il qu'à 15 % ? » | Un cœur saturé sur huit, c'est environ 12 %. Le graphique paraît calme alors que le serveur est à sa limite. |
Une extension qui travaille hors du fil principal est polie, mais si elle a ensuite besoin du résultat sur le fil principal, le tick attend quand même. Les extensions qui interrogent une base de données de façon synchrone dans un événement sont le cas classique : le tick s'arrête jusqu'à la fin de l'aller-retour réseau.
Si le goulot est un fil, le correctif est de lui donner moins à faire — pas d'acheter une machine avec davantage de ce qui n'a jamais été la contrainte. Un rapport spark montrant où passent ces 50 millisecondes vaut plus que n'importe quelle décision matérielle.
Ce qui utilise réellement d'autres fils
La génération et le chargement de chunks, la sauvegarde du monde, le traitement des paquets réseau, et tout ce qu'une extension bien écrite déporte délibérément. Voilà pourquoi générer une zone neuve provoque un pic mais pas un grand monde, et pourquoi un serveur chargé peut avoir des cœurs au repos.