Ich habe ein Missverständnis über den Unterschied zwischen Single-Threading und Multi-Threading-Programmierung, also möchte ich eine Antwort auf die folgende Frage, um alles klar zu machen.Missverstehen den Unterschied zwischen Singlethreading und Multi-Threading-Programmierung
Angenommen, es gibt 9 unabhängige Aufgaben, und ich möchte sie mit einem single-threaded-Programm und einem Multi-threaded-Programm erreichen. Grundsätzlich wird es so etwas wie dieses:
eingängig:
- 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:
Thread1:
- 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
Wie ich verstehe, nur ONE Thread zu einem Zeitpunkt ausgeführt werden (erhalten die CPU), und sobald die Quanten beendet ist, der Scheduler-Thread Gib der CPU Zeit für einen anderen Thread.
Also, welches Programm wird früher fertig sein? Ist es das Multi-Thread-Programm (logisch)? oder ist es das Single-Thread-Programm (da das Multithreading eine Menge Kontextwechsel hat, was einige Zeit in Anspruch nimmt)? und warum? Ich brauche eine gute Erklärung bitte :)
'Welches Programm wird früher beendet? ' Antwort: Es kommt darauf an –
Viele Dinge passieren asynchron, sogar auf einer einzelnen CPU: Speicherabruf, Festplatten-E/A, Netzwerk-E/A ... Kontextwechsel passieren oft während dieser "erzwungenen Timeouts". Wie auch immer, wer hat heute wirklich nur eine CPU? –
Die Frage ist in ihrer jetzigen Form nicht zu beantworten. Sind die Aufgaben voneinander unabhängig oder beruhen sie auf Ergebnissen früherer Aufgaben? Wie viele CPUs/Kerne sind verfügbar? Sind die Aufgaben Prozessorgebunden oder E/A gebunden? Unter idealen Umständen für Parallelität (mehrere CPUs/Kerne, prozessorgebundene, unabhängige Tasks) wäre die Multithread-Version * wahrscheinlich * schneller. Aber vielleicht nicht. – dlev