Vorrei sperimentare i thread su un processore multi-core, ad es. 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 dei 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 differenti su core diversi.
- L'allocazione dei thread è gestita dall'implementazione del linguaggio di programmazione. L'allocazione di thread a core diversi richiede chiamate di sistema speciali, ma le librerie di thread standard del linguaggio di programmazione gestiscono automaticamente questo quando utilizzo l'implementazione di thread standard per quella lingua.
- L'allocazione del thread deve essere programmata esplicitamente. Nel mio programma devo scrivere codice esplicito per rilevare quanti core sono disponibili e allocare diversi thread a core differenti 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 thread standard), oppure devo modificare il mio codice per essere a conoscenza dei più core ?