Vorrei sperimentare i thread su un processore multi-core, ad esempio per creare un programma che utilizza due thread diversi che vengono eseguiti da due diversi core del processore.
Tuttavia, non mi è chiaro a quale livello i thread vengono assegnati ai diversi core. Posso immaginare i seguenti scenari (a seconda del sistema operativo e dell'implementazione del linguaggio di programmazione):
- L'allocazione del thread è gestita dal sistema operativo. I thread vengono creati utilizzando le chiamate di sistema del sistema operativo e, se il processo viene eseguito su un processore multi-core, il sistema operativo tenta automaticamente di allocare / pianificare thread diversi su core diversi.
- L'allocazione del thread è gestita dall'implementazione del linguaggio di programmazione. L'assegnazione di thread a core diversi richiede chiamate di sistema speciali, ma le librerie di thread standard del linguaggio di programmazione lo gestiscono automaticamente quando utilizzo l'implementazione di thread standard per quel linguaggio.
- L'allocazione del thread deve essere programmata esplicitamente. Nel mio programma devo scrivere un codice esplicito per rilevare quanti core sono disponibili e allocare thread diversi su core diversi usando, ad esempio, le funzioni di libreria.
Per rendere la domanda più specifica, immagina di aver scritto la mia applicazione multi-thread in Java o C ++ su Windows o Linux. La mia applicazione vedrà e utilizzerà magicamente più core quando viene eseguita su un processore multi-core (perché tutto è gestito dal sistema operativo o dalla libreria di thread standard) o devo modificare il mio codice per essere consapevole dei più core ?