Scusate l'ignoranza ma io sapevo fosse il processore stesso a gestire tutti i core presenti in esso e la suddivisione delle istruzioni, ma ora sono un po confuso. Stiamo studiando i thread all'università e ho fatto una piccola classe per testare il funzionamento dei core del mio computer (ho 4 core, 8 thread).
codice:
package others;
public class MulticoreTest{
public MulticoreTest(){
}
private class Test implements Runnable{
private int num = 0;
private boolean run = true;
private int code = 0;
private Thread t;
public Test(int code){
this.code = code;
}
@Override
public void run(){
while(true){
System.out.println(this.getClass().getSimpleName()+ code + " " + num++);
}
}
public void start(){
t = new Thread(this);
t.start();
}
}
public static void main(String args[]){
int n = 10;
MulticoreTest x = new MulticoreTest();
Runnable threads[] = new Runnable[n];
for(int i = 0; i < n; i++){
threads[i] = x.new Test(i);
((Test) threads[i]).start();
}
}
}
Da come ha detto il professore, se avessimo provato a fare qualcosa del genere su un multicore, avremo visto i messaggi dai vari thread sovrapporsi di continuo... invece quello che ho notato io è che sul mio computer funziona con il normale time slicing: cioè un thread ha la possibilità di incrementare la sua variabile interna e stamparla a video circa 50 volte prima che sia tolto dalla cpu... ho capito male io oppure c'è qualcosa che non va?