Devo fare una domanda che mi ha infastidito da un po 'di tempo:
Se ho un singolo core e un thread del sistema operativo, questo thread otterrà il 100% del tempo della CPU e tutto andrà bene.
Se ho un singolo core e due o più thread del sistema operativo, condivideranno il tempo della CPU utilizzando intervalli di tempo.
Quindi, le fasce temporali sono sempre lo stesso tempo, non importa quanti thread?
Quello che sto cercando di ottenere, è la quantità di lavoro che la CPU può fare lo stesso quando ho due thread o 10000 thread? Sono consapevole del fatto che ogni singolo thread procederà più lentamente poiché condividono una risorsa, ma la quantità effettiva di lavoro che la CPU può svolgere sarà la stessa?
per es.
[T1 ] [T2 ] [T1 ] [T2 ] [T1 ] [T2 ] [T1 ] [T2 ] [T1 ] [T2 ]
[T1 ] [T2 ] [T3 ] [T4 ] [T5 ] [T6 ] [T1 ] [T2 ] [T3 ] [T4 ]
----time-------------------------------------------------->
img. 1
Nell'illustrazione sopra, ci sono 2 vs 6 discussioni, ma la quantità totale di lavoro sarebbe la stessa. È vero? Oppure c'è qualcos'altro che influisce su questo quando ci sono più thread, che fanno sì che ogni slice sia più piccola o che il context switch tra i thread sia più lungo?
per es.
[T1 ] [T2 ] [T1 ] [T2 ] [T1 ] [T2 ] [T1 ] [T2 ] [T1 ] [T2 ]
[T1 ] [T2 ] [T3 ] [T4 ] [T5 ] [T6 ] [T1 ]
----time-------------------------------------------------->
img. 2
Non sto chiedendo se è una buona idea usare 1000 thread ...
[Edit]
Sto cercando di chiarire quello che sto cercando di capire:
Data la quantità di tempo x, ad es. 1 minuto . E visto che il codice non usa lock o altri thread che interrompono il codice.
Se ho due thread, ci sarà y%
di tempo speso per il cambio di contesto.
Se ho 1000 thread, y
sarà un numero maggiore ?, o sarà lo stesso del caso precedente?