Contention de thread Ruby : ce n’est pas une bataille rangée
Pendant longtemps, j’ai mal compris la « contention de thread » en Ruby. Ce n’est pas une lutte chaotique ; au contraire, les threads Ruby font la queue poliment pour le Global VM Lock (GVL). Chaque thread obtient le GVL, exécute le code, puis le libère ou est préempté après un certain temps (le quantum du thread, par défaut 100 ms). Cela se produit lorsqu’un thread effectue une E/S ou s’exécute plus longtemps que son quantum. Comprendre cela est crucial pour optimiser les applications multithreadées, notamment pour éviter que les threads liés au processeur ne bloquent les threads liés à l’E/S, ce qui entraîne une augmentation de la latence de queue. Réduire la priorité des threads liés au processeur ou réduire le quantum du thread peut aider, mais l’intervalle minimum est de 10 ms.