Heim  >  Artikel  >  Was bedeutet Parallelität auf der Go-Sprachebene?

Was bedeutet Parallelität auf der Go-Sprachebene?

DDD
DDDOriginal
2023-06-12 15:11:49900Durchsuche

Parallelität auf der Go-Sprachebene bedeutet, dass die Go-Sprache zum Ausführen mehrerer Aufgaben innerhalb desselben Zeitraums verwendet wird. Die Goroutine ähnelt einem Thread und gehört zu Tausenden von Goroutinen können nach Bedarf erstellt werden.

Was bedeutet Parallelität auf der Go-Sprachebene?

Die Betriebsumgebung dieses Artikels: Windows 10-System, go1.20-Version, Dell G3-Computer.

Parallelität auf der Ebene der Go-Sprache bedeutet, die Go-Sprache zu verwenden, um mehrere Aufgaben gleichzeitig auszuführen.

Parallelität ist ein sehr wichtiges Konzept in der Programmierung. Die Go-Sprache unterstützt von Natur aus die Parallelität auf Sprachebene.

Parallelität und Parallelität

Parallelität: Führen Sie mehrere Aufgaben innerhalb desselben Zeitraums aus (z. B. Chatten mit zwei Freundinnen über WeChat).

Parallel: Führen Sie mehrere Aufgaben gleichzeitig aus (zum Beispiel: Sie und Ihre Freunde chatten beide mit Ihrer Freundin auf WeChat).

Parallelität in der Go-Sprache wird durch Goroutine realisiert. Goroutine ähnelt Thread (Thread und Prozess sind Konzepte, die vom Betriebssystem abgeleitet sind. Ein Prozess entspricht einer großen Werkstatt und die CPU entspricht einer Fabrik. Es gibt viele Werkstätten In einer Fabrik werden die Threads in verschiedene Prozesse unterteilt. Es gibt mindestens einen Thread in einem Prozess. Goroutinen arbeiten gleichzeitig. Goroutine wird von der Laufzeit der Go-Sprache geplant, und der zweite Thread wird vom Betriebssystem geplant.

Go-Sprache bietet auch Kanäle für die Kommunikation zwischen mehreren Goroutinen. Goroutine und Channel sind eine wichtige Implementierungsbasis für die Go-Sprache, um dem CSP-Parallelitätsmodus (Förderung der Kommunikation über Shared Memory statt Kommunikation über Shared Memory) zu entsprechen auf Sprachebene, auf Sprachebene Läuft auf Betriebssystem-Threads.

Eine Goroutine muss einer Funktion entsprechen, und es können mehrere Goroutinen erstellt werden, um dieselbe Funktion auszuführen. Es ist sehr praktisch, Goroutine in go zu verwenden. Wenn Sie eine Funktion aufrufen, können Sie eine Goroutine für eine Funktion erstellen, indem Sie das Schlüsselwort go davor hinzufügen.

Starten Sie eine einzelne Goroutine:

package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup //WaitGroup等待方法
// goroutine demo
func hello(i int){
fmt.Println("Hello hello",i)
wg.Done() //此方法如果运行 ,通知wg把计数器 -1
}
func main() {  // 开启一个主goroutine去执行mian函数
wg.Add(10000)//(计数器)只有一个小弟为1,等待wg.Done()后-1,为0时停止等待
for i:=0; i<10000;i++{
//wg.Add(1) 可以给定10000个goroutine 也可以,每次循环+1
go hello(i) // 开启了一个独立的 goroutine去执行hello这个函数
}
fmt.Println("Hello main")
// 让我们的主goroutine 等待 goroutine 小弟 执行
// 如果不等待,独立的goroutine小弟,可能小弟这个goroutine还没有运行
//time.Sleep(time.Second) 第二种等待
wg.Wait()//等待所有小弟干完活
}

Der Unterschied zwischen einer Goroutine und einem Thread

OS-Threads (Betriebssystem-Threads) haben jeweils einen festen Stapelspeicher (normalerweise 2 MB), und der Stapel einer Goroutine hat nur einen festen Stapelspeicher Zu Beginn seines Lebenszyklus ist der Stapel der Groutine nicht festgelegt. Er kann je nach Bedarf wachsen und schrumpfen. In seltenen Fällen erreicht er jedoch 1 GB. Daher ist es möglich, in der Go-Sprache etwa 100.000 Groroutinen gleichzeitig zu erstellen.

Das obige ist der detaillierte Inhalt vonWas bedeutet Parallelität auf der Go-Sprachebene?. 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