Heim  >  Artikel  >  Backend-Entwicklung  >  Konzepte und Techniken der gleichzeitigen Programmierung in der Go-Sprache

Konzepte und Techniken der gleichzeitigen Programmierung in der Go-Sprache

WBOY
WBOYOriginal
2023-06-03 08:02:22539Durchsuche

Mit der kontinuierlichen Weiterentwicklung der Computertechnologie sind Multicore-CPUs zum Standard geworden. Gleichzeitige Programmierung ist in der heutigen Softwareentwicklung äußerst wichtig, und die Go-Sprache hat sich aufgrund ihres einzigartigen Parallelitätsmechanismus zu einer der beliebtesten gleichzeitigen Programmiersprachen entwickelt. In diesem Artikel besprechen wir die Konzepte und Techniken der gleichzeitigen Programmierung in der Go-Sprache.

  1. Das Konzept der Parallelität

Parallelität bedeutet, dass zwei oder mehr Ereignisse innerhalb desselben Zeitintervalls auftreten. In der Informatik bedeutet dies, dass innerhalb desselben Zeitintervalls mehrere Aufgaben gleichzeitig ausgeführt werden können. Unter gleichzeitiger Programmierung versteht man die Programmiertechnologie zum Schreiben von Programmen, die mehrere Aufgaben gleichzeitig ausführen können.

Die Konzepte der gleichzeitigen Programmierung und der parallelen Programmierung sind unterschiedlich. Unter gleichzeitiger Programmierung versteht man die gleichzeitige Ausführung mehrerer Aufgaben, während unter paralleler Programmierung die gleichzeitige Ausführung mehrerer Aufgaben auf mehreren Prozessoren oder Verarbeitungskernen verstanden wird. Im Computerbereich werden Parallelität und Parallelität oft synonym verwendet, sie unterscheiden sich jedoch grundlegend.

  1. Parallelität in der Go-Sprache

Die Go-Sprache unterstützt die gleichzeitige Programmierung sowohl in der Syntax als auch zur Laufzeit. Goroutine ist in der Go-Sprache ein extrem leichter Thread. Eine Goroutine muss zum Ausführen nur wenig Stapelplatz beanspruchen. Gleichzeitig kann ein Go-Programm über Tausende von Goroutinen verfügen, was es einem Go-Programm ermöglicht, gleichzeitige Aufgaben effizient auszuführen.

Parallelität in der Go-Sprache übernimmt das CSP-Parallelitätsmodell, das den Speicher durch Kommunikation teilt, anstatt über den gemeinsamen Speicher zu kommunizieren. In der Go-Sprache können wir Kanäle verwenden, um die Kommunikation zwischen Goroutinen zu implementieren.

Sie können einen Kanal auf folgende Weise definieren:

ch := make(chan int)

Verwenden Sie das integrierte Schlüsselwort go der Go-Sprache, um eine Goroutine zu starten: go 关键字来启动一个 Goroutine:

go printHelloWorld()

在这段代码中,printHelloWorld() 是一个函数,通过 go 关键字启动的这个 Goroutine 会在一个新的线程独立运行。

  1. 并发编程的技巧

3.1 使用 channel 来协调 Goroutine

如上所述,在Go语言中,我们可以使用 channel 来实现 Goroutine 之间的通信。channel 可以用于两个或多个 Goroutine 之间的协调,以及对共享资源的控制。

package main

import "fmt"

func hello(done chan bool) {
    fmt.Println("Hello world Goroutine")
    done <- true
}

func main() {
    done := make(chan bool)
    go hello(done)
    <-done
    fmt.Println("main function")
}

在这段代码中,我们在 hello() 函数外部定义了一个 done channel,并将其传递给 hello() 函数。在 hello() 函数中,我们打印了一条消息,并将 true 值写入了 done channel 中,表示 hello() 函数执行完毕。在 main() 函数中,我们通过 <-done 语法从 channel 中读取数据,等待 hello() 函数执行完毕并将 true 值写入 done channel 中。这样,我们就实现了 Goroutine 的协调。

3.2 使用 select 语句

select 语句可以用于同时处理多个 channel 操作。在 select 语句中,我们可以定义多个 channel,然后通过一组 case 语句来处理它们。

package main

import (
    "fmt"
    "time"
)

func main() {
    ch1 := make(chan int)
    ch2 := make(chan string)

    go func() {
        ch1 <- 1
    }()

    go func() {
        ch2 <- "hello"
    }()

    for i := 0; i < 2; i++ {
        select {
        case num := <-ch1:
            fmt.Println("ch1:", num)
        case str := <-ch2:
            fmt.Println("ch2:", str)
        case <-time.After(time.Millisecond * 100):
            fmt.Println("timeout")
        }
    }
}

在这段代码中,我们定义了 ch1ch2 两个 channel,并启动了两个 Goroutine,分别向这两个 channel 中写入数据。在 main() 函数中,我们通过一个 for 循环来处理这两个 channel 的输入,使用 select 语句来选择其中一个可用的 channel 并处理其输入。如果在一个固定时间内没有 channel 可以使用,我们可以使用 time.After()rrreee

In diesem Code ist printHelloWorld( ) code> ist eine Funktion, die über das Schlüsselwort <code>go gestartet wird und unabhängig in einem neuen Thread ausgeführt wird.
    1. Tipps zur gleichzeitigen Programmierung

    3.1 Verwenden Sie Kanäle, um Goroutinen zu koordinieren

    🎜Wie oben erwähnt, können wir in der Go-Sprache Kanäle verwenden, um die Kommunikation zwischen Goroutinen zu implementieren. Kanäle können zur Koordination zwischen zwei oder mehr Goroutinen und zur Steuerung gemeinsam genutzter Ressourcen verwendet werden. 🎜rrreee🎜In diesem Code definieren wir einen done-Kanal außerhalb der Funktion hello() und übergeben ihn an die Funktion hello(). In der Funktion hello() drucken wir eine Nachricht und schreiben den Wert true in den Kanal done, der hello() Die Funktionsausführung ist abgeschlossen. In der Funktion <code>main() lesen wir Daten aus dem Kanal über die Syntax <-done und warten auf die Funktion hello() Complete und schreibt den true-Wert in den done-Kanal. Auf diese Weise erreichen wir eine Goroutine-Koordination. 🎜🎜3.2 Verwenden Sie die Select-Anweisung🎜🎜Mit der Select-Anweisung können mehrere Kanaloperationen gleichzeitig verarbeitet werden. In der Select-Anweisung können wir mehrere Kanäle definieren und diese dann über eine Reihe von Case-Anweisungen verarbeiten. 🎜rrreee🎜In diesem Code haben wir zwei Kanäle definiert, ch1 und ch2, und zwei Goroutinen gestartet, um jeweils Daten in diese beiden Kanäle zu schreiben. In der Funktion main() verarbeiten wir die Eingabe dieser beiden Kanäle über eine for-Schleife und verwenden die select-Anweisung, um einen der verfügbaren Kanäle auszuwählen und seine Eingabe zu verarbeiten. Wenn innerhalb eines festgelegten Zeitraums kein Kanal verfügbar ist, können wir die Funktion time.After() verwenden, um die Timeout-Verarbeitung zu implementieren. 🎜🎜🎜Fazit🎜🎜🎜In diesem Artikel haben wir die Konzepte und Techniken der gleichzeitigen Programmierung in der Go-Sprache besprochen. Durch Goroutine und Channel können wir gleichzeitige Programmierung effizient implementieren. Beim Schreiben gleichzeitiger Programme sollten wir einige grundlegende Techniken befolgen, z. B. die Verwendung von Kanälen zur Koordinierung von Goroutinen und die Verwendung von Select-Anweisungen zur Synchronisierung der Ausführung mehrerer Goroutinen. Diese Techniken können uns helfen, effiziente und stabile gleichzeitige Programme zu schreiben. 🎜

Das obige ist der detaillierte Inhalt vonKonzepte und Techniken der gleichzeitigen Programmierung in der Go-Sprache. 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