Cosa succede se ci sono troppi processi in esecuzione in un computer?

Praticamente il sistema rallenta fino a strisciare. Potrebbe non bloccarlo veramente, perché non vedo ogni core assolutamente soffocato da thread al punto che il kernel non possa gestire un preempt e fare un context switch. Ma posso vedere le cose rallentare immensamente.

Ma ci vorrebbe un numero enorme di processi per arrivare a questo punto anche su un computer di fascia bassa da 300 dollari. I core della CPU possono gestire una quantità immensa di processi che entrano ed escono da essi. E poi hai SMT (come l'Hyperthreading nelle CPU Intel e l'implementazione SMT in Ryzen.) che permette alla pipeline di un core di gestire due thread contemporaneamente. E vedrete abbastanza raramente una CPU in questi giorni con meno di due core, e più comunemente li vedrete con quattro core. Con SMT sono 8 threads.

Naturalmente, il vero fattore di efficienza nella gestione dei processi da parte di una CPU è in realtà lo scheduler del kernel del sistema operativo. I sistemi operativi moderni usano scheduler di processi preemptive, il che significa che ogni processo deve abbandonare il core/thread su cui si trova quando scatta un NMI (Non-Maskable Interrupt.) specifico. Il kernel usa una serie di algoritmi per determinare quanto tempo viene assegnato ad ogni processo prima della prelazione. Ad essere onesti, è MOLTO raro che un processo usi tutta la sua fetta di tempo, dato che molto di ciò che fa un programma è fare chiamate di sistema per far sì che il sistema operativo faccia qualcosa per il programma. L'unica volta in cui un processo usa il suo tempo assegnato e viene prevaricato è se sta facendo qualcosa di computazionalmente intenso o se si blocca. Entrambe queste cose, per la cronaca, sono notevolmente simili.

E la memoria? Questo è probabilmente il collo di bottiglia più probabile per "troppi processi, ma questo è difficile da prevedere poiché ogni programma usa quantità molto diverse di RAM. Ma se la RAM di sistema è esaurita, il sistema operativo farà uso dello swapping, che può rallentare le cose. E quando lo spazio di swap si riempie, anche allora di solito il kernel di un sistema operativo più probabilmente sparerà un OOM (Out of Memory.) killer sul processo più intensivo di memoria. Questo può risultare in un comportamento molto imprevedibile se quel processo stava facendo qualcosa in background, però. Questo dipende quasi interamente dall'uso che si fa del computer. Raccomando almeno 8 GB di RAM, idealmente 16 GB. Se state facendo qualcosa di DAVVERO intenso come una workstation o un server, da 32 a 64 GB sarebbero PIU' che sufficienti.

C'è un numero massimo teorico di processi che un KERNEL può gestire, ma di solito è un numero immenso e generalmente richiederebbe l'annullamento di una serie di protezioni e qualcosa come una bomba a forcella da raggiungere.

Ma ehi, se siete mai curiosi di vedere cosa succede quando un computer viene caricato con "troppi processi" potete sempre rischiare di provare una bomba a forcella. Cercatelo su Google. Non credo che si possa fare in Windows, ma si può fare in quasi tutti gli Unix o Unix-like a causa di come funzionano le shell Unix.