Capisco che un processore multi-core può eseguire più thread dello stesso processo contemporaneamente usando i suoi diversi core.
Può anche eseguire più processi contemporaneamente (ogni core esegue un processo diverso)?
Capisco che un processore multi-core può eseguire più thread dello stesso processo contemporaneamente usando i suoi diversi core.
Può anche eseguire più processi contemporaneamente (ogni core esegue un processo diverso)?
Risposte:
Per quanto riguarda il sistema operativo e le applicazioni, ciascun core è un processore separato ed è soggetto alle stesse regole di affinità di avere più processori.
Quale processore (sia esso reale, core o hyperthreaded) su cui gira un processo dipende interamente dal sistema di pianificazione del sistema operativo. È questo sistema di pianificazione (influenzato dalle impostazioni di affinità ) che decide dove eseguire un processo e quando. Processi e thread possono alternare tra processori e core a piacimento secondo la pianificazione.
Dalla mia limitata conoscenza dei sistemi operativi, credo che ogni processo abbia almeno un thread, e sono questi thread che vengono programmati, non i processi stessi. Il processo contiene semplicemente informazioni sul programma e sui thread che ha impostato in esecuzione. In questo modo un'applicazione a thread singolo ottiene lo stesso trattamento di un'applicazione a thread multipli, ma l'applicazione a thread multipli può utilizzare meglio le risorse.
Ad esempio, supponiamo che abbiamo due processi con due thread ciascuno e una singola applicazione thread, tutti lavorando duramente su un processore dual core (o doppia CPU, qui non fa alcuna differenza)
Process A
|_Thread A-1
|_Thread A-2
Process B
|_Thread B-1
|_Thread B-2
Process C
|_Thread C
Ogni thread è programmabile su tutti i core della CPU e il carico è bilanciato dallo scheduler del sistema operativo.
Se poi andiamo a impostare l'affinità del processore per il Processo B per limitarlo a una CPU, anche tutti i thread di quel processo sono associati a quella CPU e non funzioneranno su nessuna altra CPU. Fare lo stesso con il processo C non comporterà alcun cambiamento reale in quanto può funzionare solo su una CPU alla volta.
Risposta breve:
Processi e thread (come nel multi-threading) sono costrutti a livello di sistema operativo. Una volta che hai raggiunto un livello abbastanza basso nella pianificazione, questi scompaiono e hai solo un sacco di thread di esecuzione in coda per ottenere i tempi di esecuzione.