Ho una incomprensione della differenza tra programmazione a thread singolo e multi-threading, quindi voglio una risposta alla seguente domanda per chiarire tutto.Malinteso sulla differenza tra programmazione a thread singolo e multi-threading
Supponiamo che ci siano 9 attività indipendenti e voglio realizzarle con un programma a thread singolo e un programma a più thread. Fondamentalmente sarà qualcosa di simile:
singolo filo:
- Execute task 1
- Execute task 2
- Execute task 3
- Execute task 4
- Execute task 5
- Execute task 6
- Execute task 7
- Execute task 8
- Execute task 9
Multi-threaded:
Filettatura1:
- Execute task 1
- Execute task 2
- Execute task 3
Thread2:
- Execute task 4
- Execute task 5
- Execute task 6
Thread3:
- Execute task 7
- Execute task 8
- Execute task 9
quanto mi risulta, solo ONE filo viene eseguito in un momento (vedere la CPU), e una volta che il quantum è terminata, lo scheduler thread dare il tempo della CPU a un altro thread.
Quindi, quale programma sarà terminato prima? È il programma multi-threaded (logicamente)? o è il programma a thread singolo (dal momento che il multi-threading ha un sacco di cambio di contesto che richiede un po 'di tempo)? e perché? Ho bisogno di una buona spiegazione per favore :)
'Quale programma terminerà prima? Risposta: dipende da –
Un sacco di cose accadono in modo asincrono, anche su una singola CPU: il recupero della memoria, l'I/O del disco, l'I/O di rete ... gli switch di contesto spesso accadono con preferenza durante quei "timeout forzati". Ad ogni modo, chi ha davvero solo una CPU al giorno d'oggi? –
La domanda non ha risposta nella sua forma attuale. Le attività sono indipendenti l'una dall'altra o si basano sui risultati di attività precedenti? Quante CPU/core sono disponibili? Il processore delle attività è vincolato o I/O vincolato? In circostanze ideali per il parallelismo (più CPU/core, attività legate al processore e indipendenti) la versione multithread sarebbe * probabilmente * più veloce. Ma forse no. – dlev