Golang – Parallelität, Parallelität, Sequenz

王林
Freigeben: 2024-02-09 22:00:10
nach vorne
1081 Leute haben es durchsucht

Golang - 并发、并行、顺序

php-Editor Xigua führt Sie in die drei wichtigen Konzepte Parallelität, Parallelität und Sequenz in Golang ein. Bei der gleichzeitigen Programmierung bietet Golang eine Fülle von Tools und Syntax zur Implementierung gleichzeitiger Vorgänge, sodass das Programm mehrere Aufgaben gleichzeitig ausführen kann. Bei der parallelen Programmierung geht es darum, mehrere Aufgaben gleichzeitig auszuführen und die Effizienz der Programmausführung durch den Einsatz von Mehrkernprozessoren zu verbessern. Sequentielle Programmierung wird in der Reihenfolge des Codes ausgeführt, was für Szenarien geeignet ist, in denen sichergestellt werden muss, dass Aufgaben in einer bestimmten Reihenfolge ausgeführt werden. Durch den flexiblen Einsatz dieser drei Konzepte können Entwickler die Vorteile von Golang in Szenarien mit hoher Parallelität voll ausschöpfen und die Programmleistung und -effizienz verbessern.

Frageninhalt

Ich lerne gerade Go und bin wirklich frustriert über die Unterschiede zwischen Parallelität, Parallelität und Sequentialität.

Angenommen, wir haben einen Prozess, der Fragmente von 5 URLs abfängt und den Inhalt in eine Textdatei einfügt. Dieser Vorgang dauert 2 Sekunden pro URL.

  • Sequentiell –> dauert 10 Sekunden, da es nacheinander ausgeführt wird
  • Parallel -> Dauert weniger als 10 Sekunden, da diese Vorgänge gleichzeitig ausgeführt werden, jedoch mehrere Threads oder Prozessoren verwendet werden.
  • Parallelität –> Dauert weniger als 10 Sekunden, erfordert aber keine mehreren Threads oder Prozessoren.

Bis zu diesem Zeitpunkt war ich mir nicht sicher, ob ich Recht hatte. Meine Frage ist:

Ich habe gelesen, dass Parallelität darin besteht, Dinge gleichzeitig zu erledigen (z. B. Laufen und Musik hören), während Parallelität darin besteht, Dinge gleichzeitig zu erledigen (z. B. das Frühstück zu beenden und gleichzeitig das Hemd zu bügeln).

Aber wenn das der Fall ist, warum dauert es dann nicht 10 Sekunden, bis die Parallelität abgeschlossen ist, denn am Ende des Tages erledigt man nicht alles gleichzeitig, sondern nur eine Teilmenge von allem, bis alles erledigt ist?

Lösung

Hier ist eine Analogie zur Erklärung.

Sie müssen 5 Eier mit der Sonnenseite nach oben braten. Um Eier zu kochen, schlagen Sie sie in der Pfanne auf, warten ein paar Minuten und nehmen sie dann heraus.

  • Die sequentielle Methode besteht darin, zuerst das erste Ei, dann das zweite Ei usw. zu braten, bis Sie 5 Eier haben.

  • Die parallele Methode besteht darin, 5 Köche einzustellen, sie jeweils ein Ei braten zu lassen und dann zu warten, bis alle fertig sind.

  • Die parallele Methode besteht darin, dass Sie dem eigentlichen Rezept folgen alle 5 Eier selbst kochen. Das heißt, Sie schlagen jedes Ei schnell in die Pfanne und nehmen es dann heraus, wenn es fertig ist.

Der Grund, warum Sie Zeit sparen, wenn Sie nicht 5 Köche einstellen, liegt darin, dass die Anzahl der Köche Ihre Geschwindigkeit nicht einschränkt. Das Pochieren eines Eies dauert ein paar Minuten, beansprucht aber am Anfang und am Ende nur ein paar Sekunden lang Ihre Aufmerksamkeit und Ihre Hände.

Die Go-Runtime ist genauso intelligent wie moderne Betriebssystem-Runtimes. Sie wissen, dass der Prozessor andere Dinge finden kann, die seine Aufmerksamkeit erregen, während Ihr Thread auf den Empfang einer Netzwerkantwort wartet.

Beim Gesamtbild der Parallelität geht es nicht in erster Linie um die Anzahl der Prozessoren, sondern um den gesamten Ressourcenkonflikt. Die Ausführung von Aufgaben erfordert Ressourcen und wir können nicht mehr Ressourcen verwenden, als verfügbar sind. Der Prozessor ist eine Ressource, aber es gibt auch Speicher, Speicherbandbreite, Netzwerkbandbreite, Dateihandles usw.

Das obige ist der detaillierte Inhalt vonGolang – Parallelität, Parallelität, Sequenz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage