Ich habe oft gelesen, dass Parallelität und Parallelität verschiedene Dinge sind. Sehr oft gehen die Antwortenden / Kommentatoren so weit zu schreiben, dass es zwei völlig verschiedene Dinge sind. Meiner Meinung nach sind sie miteinander verwandt, aber ich hätte gerne eine Klarstellung.
Wenn ich zum Beispiel auf einer Multi-Core-CPU bin und es schaffe, die Berechnung in x kleinere Berechnungen aufzuteilen (z. B. mit Fork / Join), die jeweils in einem eigenen Thread ausgeführt werden, habe ich ein Programm, das beide parallele Berechnungen ausführt (weil angeblich an einem beliebigen Punkt in der Zeit mehrere Threads werden auf mehrere Kerne laufen) und gleichzeitig richtig sein?
Wenn ich einfach Java verwende und mich mit UI-Ereignissen und Aktualisierungen auf dem Event Dispatch-Thread beschäftige und den einzigen Thread ausführe, den ich selbst erstellt habe, habe ich ein Programm, das gleichzeitig ausgeführt wird (EDT + GC-Thread + mein Hauptthread etc.) aber nicht parallel.
Ich würde gerne wissen, ob ich das richtig hinbekomme und ob Parallelität (auf einem "Single-but-Multi-Cores" -System) immer Parallelität impliziert oder nicht.
Werden Multithread-Programme auch auf einer Mehrkern-CPU ausgeführt, bei denen die verschiedenen Threads jedoch völlig unterschiedliche Berechnungen ausführen, wird dies als "Parallelität" angesehen?
quelle
Antworten:
Laut Wikipedia :
Das heißt, Parallelität impliziert immer Parallelität.
Nein. Das Wesen der Parallelität besteht darin, dass ein großes Problem in kleinere unterteilt wird, damit die kleineren Teile gleichzeitig gelöst werden können. Die Stücke sind voneinander unabhängig (zumindest bis zu einem gewissen Grad), aber sie sind immer noch Teil des größeren Problems, das jetzt parallel gelöst wird.
Die Essenz der Parallelität besteht darin, dass eine Reihe von Threads (oder Prozessen oder Computern) gleichzeitig etwas tun , möglicherweise (aber nicht unbedingt) in irgendeiner Weise interagieren. Nochmal Wikipedia :
quelle
Code kann gleichzeitig aber nicht parallel sein.
Stellen Sie sich mehrere Threads vor, die auf einem Single-Core-Rechner ausgeführt werden. Diese Single-Core-Maschine verarbeitet jeweils nur einen Thread, sodass keine Parallelität der Vorgänge auftritt. Da das Betriebssystem jedoch mehrere Threads verarbeitet, muss jeder Thread davon ausgehen, dass alle anderen Threads gleichzeitig ausgeführt werden.
quelle
Parallelität bedeutet einfach, viele Aufgaben gleichzeitig zu erledigen. Auf der anderen Seite ist Nebenläufigkeit die Fähigkeit des Kernels, viele Aufgaben auszuführen, indem er ständig zwischen vielen Prozessen wechselt.
Um Parallelität zu erreichen, ist es wichtig, dass das System viele Kerne hat, nur dann kann Parallelität effizient erreicht werden. Die Leistung wird stark beeinträchtigt, und es entsteht viel Overhead, wenn die Parallelität auf einem Single-Core-Rechner versucht wird.
Zum Beispiel hatte ein früheres System nur einen Kern, und CPU-Scheduler gaben eine Illusion von Parallelität, indem sie ständig zwischen Prozessen wechselten und jedem Prozess erlaubten, Fortschritte zu erzielen.
quelle