Heim  >  Artikel  >  Backend-Entwicklung  >  So führen Sie Parallelität in Golang durch

So führen Sie Parallelität in Golang durch

(*-*)浩
(*-*)浩Original
2019-12-30 15:29:202306Durchsuche

So führen Sie Parallelität in Golang durch

Das CSP-Parallelitätsmodell von Go

Go implementiert zwei Formen der Parallelität. Das erste ist allgemein bekannt: Multithreaded Shared Memory. Tatsächlich handelt es sich um eine Multithread-Entwicklung in Sprachen wie Java oder C++.

Ein anderes ist einzigartig für die Go-Sprache und wird von der Go-Sprache empfohlen: CSP-Parallelitätsmodell (Communicating Sequential Processes). (Empfohlenes Lernen: go)

Das CSP-Parallelitätsmodell war ein um 1970 vorgeschlagenes Konzept. Es ist ein relativ neues Konzept und unterscheidet sich von herkömmlichen Multithreads, die über Shared Memory kommunizieren . CSP konzentriert sich auf „Gedächtnis teilen durch Kommunikation“.

Bitte denken Sie an den folgenden Satz:

Do not communicate by sharing memory; instead, share memory by communicating.
“不要以共享内存的方式来通信,相反,要通过通信来共享内存。”

Das gewöhnliche Thread-Parallelitätsmodell ähnelt Java, C++ oder Python. Die Kommunikation zwischen Threads erfolgt über die Methode der gemeinsamen Speichernutzung.

Eine sehr typische Möglichkeit besteht darin, über eine Sperre auf gemeinsam genutzte Daten (z. B. ein Array, eine Karte oder eine Struktur oder ein Objekt) zuzugreifen. Daher wird in vielen Fällen eine praktische Operation abgeleitet. Die Datenstruktur wird als a bezeichnet „Thread-sichere Datenstruktur“.

Zum Beispiel die Datenstruktur im von Java bereitgestellten Paket „java.util.concurrent“. Das traditionelle Thread-Parallelitätsmodell ist auch in Go implementiert.

Das CSP-Parallelitätsmodell von Go wird über Goroutine und Channel implementiert.

goroutine ist die gleichzeitige Ausführungseinheit in der Go-Sprache. Es ist etwas abstrakt, ähnelt aber tatsächlich dem traditionellen Konzept von „Faden“ und kann als „Faden“ verstanden werden.

Kanal ist der Kommunikationsmechanismus vor jeder gleichzeitigen Struktur (Goroutine) in der Go-Sprache. Laienhaft ausgedrückt ist es die „Pipeline“ für die Kommunikation zwischen Goroutinen, die den Pipes in Linux etwas ähnelt.

Der Weg, eine Goroutine zu generieren, ist sehr einfach: Gehen Sie und sie wird generiert.

go f();

Der Kommunikationsmechanismus Kanal ist auch sehr praktisch. Verwenden Sie den Kanal <-Daten zum Übertragen von Daten und <-Kanal zum Abrufen von Daten.

Während des Kommunikationsprozesses treten der Datenübertragungskanal <-Daten und der Datenabruf-<-Kanal zwangsläufig paarweise auf, da die Übertragung hier und der Abruf dort nur zwischen den beiden Goroutinen stattfinden . Kommunikation aktivieren.

Und unabhängig davon, ob es übergeben oder abgerufen wird, wird es blockiert, bis eine andere Goroutine übergeben oder abgerufen wird.

Es gibt zwei Goroutinen, von denen eine einen Wertübertragungsvorgang an den Kanal initiiert. (Goroutine ist ein Rechteck, Kanal ist ein Pfeil)

Das obige ist der detaillierte Inhalt vonSo führen Sie Parallelität in Golang durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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