Ho un piccolo esempio che eseguo su un dispositivo reale con 4 + 4 core.
ExecutorService service = Executors.newFixedThreadPool(4);
for(int i =0 ; i<1000; i++){
Runnable task = new Runnable() {
@Override
public void run() {
//Insert customers in Room
app.repocustomers().insertcustomers(em); 10k customers
}
};
service.execute(task);
}
Quando lo eseguo con un solo Executors.newFixedThreadPool (1), il tempo di esecuzione è inferiore a quello di 4 e non riesco a capire perché.
A causa dei multicores, ogni thread è su un core differente e pronto quando il database si sblocca. L'attesa fa sì che l'esecuzione complessiva sia più lenta di un thread? Non ci sono spese generali sul passaggio dei thread perché sono su core diversi.
Nota Misuro i tempi con System.millisecs