Que se passe-t-il s’il y a trop de processus en cours dans un ordinateur ?


Le système se met à ramper. Il pourrait ne pas vraiment le bloquer, parce que je ne vois pas chaque cœur être absolument étouffé par les threads au point qu'un noyau ne peut pas gérer une préemption, et faire un changement de contexte. Mais je peux voir les choses ralentir immensément.

Mais il faudrait un nombre énorme de processus pour arriver à ce point, même sur un ordinateur bas de gamme à budget de 300 $. Les cœurs de processeur peuvent gérer une immense quantité de processus se commutant en eux et hors d'eux. Et puis vous avez le SMT (comme l'Hyperthreading dans les CPU Intel et l'implémentation SMT dans Ryzen) qui permet au pipeline d'un cœur de gérer deux threads simultanément. De nos jours, il est assez rare de voir un processeur avec moins de deux cœurs, et le plus souvent avec quatre cœurs. Avec SMT, cela représente 8 threads.


Bien sûr, le véritable facteur de l'efficacité avec laquelle un processeur gère les processus est en fait l'ordonnanceur du noyau du système d'exploitation. Les systèmes d'exploitation modernes utilisent des ordonnanceurs de processus préemptifs, ce qui signifie que chaque processus doit abandonner le cœur/thread sur lequel il se trouve lorsqu'une NMI (Non-Maskable Interrupt.) spécifique se déclenche. Le noyau utilise un certain nombre d'algorithmes pour déterminer le temps alloué à chaque processus avant la préemption. Pour être honnête, il est TRÈS rare qu'un processus utilise la totalité de sa tranche de temps, car une grande partie de ce que fait un programme est d'effectuer des appels système pour que le système d'exploitation fasse quelque chose pour le programme. La seule fois où un processus utilisera le temps qui lui est alloué et sera préempté, c'est s'il fait quelque chose d'intensif en termes de calcul ou s'il se bloque. Ces deux choses, pour mémoire, sont remarquablement similaires.


Alors, qu'en est-il de la mémoire ? C'est probablement le goulot d'étranglement le plus probable pour " trop de processus ", mais c'est difficile à prévoir car chaque programme utilise des quantités très différentes de RAM. Mais si la RAM du système est utilisée, le système d'exploitation fera appel au swapping, ce qui peut ralentir les choses. Et lorsque l'espace d'échange se remplit, même dans ce cas, le noyau d'un système d'exploitation est plus susceptible de déclencher une attaque OOM (Out of Memory) sur le processus le plus gourmand en mémoire. Cela peut entraîner un comportement très imprévisible si ce processus fait quelque chose en arrière-plan, cependant. Cela dépend presque entièrement de l'utilisation de l'ordinateur. Je recommande au moins 8 Go de RAM, idéalement 16 Go. Si vous faites quelque chose de VRAIMENT intensif comme une station de travail ou un serveur, 32 à 64 Go serait PLENANT.

Il y a un nombre maximum théorique de processus qu'un KERNEL peut gérer, mais c'est généralement un nombre immense et il faudrait généralement outrepasser un certain nombre de protections et quelque chose comme une bombe fork pour jamais l'atteindre.

Mais bon, si vous êtes un jour curieux de voir ce qui se passe quand un ordinateur est chargé de "trop de processus", vous pouvez toujours prendre le risque d'essayer une bombe fork. Cherchez sur Google. Je ne pense pas que vous pouvez les faire dans Windows, mais vous pouvez dans la plupart des Unix ou Unix-like en raison de la façon dont les shells Unix fonctionnent.

.