Rumah pembangunan bahagian belakang Golang Bagaimana untuk menyegerakkan Goroutine menggunakan WaitGroup dalam Go?

Bagaimana untuk menyegerakkan Goroutine menggunakan WaitGroup dalam Go?

Jun 01, 2024 pm 09:18 PM
go

如何在 Go 中使用WaitGroup同步 Goroutine?

Bagaimana untuk menggunakan WaitGroup untuk menyegerakkan Goroutine dalam Go?

Apakah itu WaitGroup? WaitGroup

WaitGroup 是 Go 中的一个内置类型,用于协调并发操作,它可以用来确保一组 goroutine 在执行完毕之前不会继续执行。

如何使用 WaitGroup

使用 WaitGroup 的步骤如下:

  1. 创建 WaitGroup
var wg sync.WaitGroup
Salin selepas log masuk
  1. 在 goroutine 中使用 Add()

当一个新的 goroutine 开始执行时,使用 WaitGroup.Add(1) 来增加计数器。

wg.Add(1)
go func() {
  // goroutine 代码
  wg.Done()
}()
Salin selepas log masuk
  1. 在 goroutine 中使用 Done()

当 goroutine 执行完毕时,使用 WaitGroup.Done() 来减少计数器。

func() {
  // goroutine 代码
  wg.Done()
}
Salin selepas log masuk
  1. 等待 Goroutine 完成

使用 WaitGroup.Wait() 来阻塞当前 goroutine,直到所有关联的 goroutine 完成执行。

wg.Wait()
Salin selepas log masuk

实战案例

以下是一个示例,演示了如何使用 WaitGroup

🎜WaitGroup ialah jenis terbina dalam Go yang digunakan untuk menyelaraskan operasi serentak Ia boleh digunakan untuk memastikan bahawa sekumpulan goroutine tidak meneruskan pelaksanaan sehingga ia menyelesaikan pelaksanaan. 🎜🎜🎜Cara menggunakan WaitGroup🎜🎜🎜Langkah-langkah untuk menggunakan WaitGroup adalah seperti berikut: 🎜
  1. 🎜Buat WaitGroup 🎜
package main

import (
  "fmt"
  "sync"
)

func main() {
  var wg sync.WaitGroup

  // 创建三个并发 goroutine
  for i := 0; i < 3; i++ {
    wg.Add(1)
    go func(i int) {
      defer wg.Done()
      fmt.Printf("Goroutine %d complete\n", i)
    }(i)
  }

  // 等待所有 goroutine 完成执行
  wg.Wait()

  // 输出:Goroutine 0 complete
  // 输出:Goroutine 1 complete
  // 输出:Goroutine 2 complete

  fmt.Println("All goroutines completed")
}
Salin selepas log masuk
  1. 🎜Gunakan Add() dalam goroutine🎜
🎜Apabila goroutine baharu bermula melaksanakan , gunakan WaitGroup.Add(1) untuk menambah pembilang. 🎜rrreee
  1. 🎜Gunakan Done() dalam goroutine🎜
🎜Apabila goroutine selesai melaksanakan, gunakan WaitGroup () untuk mengurangkan kaunter. 🎜rrreee
  1. 🎜Tunggu sehingga Goroutine selesai🎜
🎜Gunakan WaitGroup.Wait() untuk menyekat goroutine semasa sehingga semua berkaitan goroutines Pelaksanaan lengkap. 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Berikut ialah contoh yang menunjukkan cara menggunakan WaitGroup untuk menyegerakkan tiga goroutin serentak: 🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk menyegerakkan Goroutine menggunakan WaitGroup dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menghantar mesej Go WebSocket? Bagaimana untuk menghantar mesej Go WebSocket? Jun 03, 2024 pm 04:53 PM

Bagaimana untuk menghantar mesej Go WebSocket?

Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang? Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang? Jun 04, 2024 pm 12:27 PM

Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang?

Pemahaman mendalam tentang kitaran hayat fungsi Golang dan skop pembolehubah Pemahaman mendalam tentang kitaran hayat fungsi Golang dan skop pembolehubah Apr 19, 2024 am 11:42 AM

Pemahaman mendalam tentang kitaran hayat fungsi Golang dan skop pembolehubah

Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Jun 02, 2024 am 09:00 AM

Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go?

Perbezaan antara bahasa Golang dan Go Perbezaan antara bahasa Golang dan Go May 31, 2024 pm 08:10 PM

Perbezaan antara bahasa Golang dan Go

Amalan terbaik dokumentasi rangka kerja Golang Amalan terbaik dokumentasi rangka kerja Golang Jun 04, 2024 pm 05:00 PM

Amalan terbaik dokumentasi rangka kerja Golang

Bagaimana untuk melihat dokumentasi fungsi Golang dalam IDE? Bagaimana untuk melihat dokumentasi fungsi Golang dalam IDE? Apr 18, 2024 pm 03:06 PM

Bagaimana untuk melihat dokumentasi fungsi Golang dalam IDE?

Panduan untuk menguji unit fungsi serentak Go Panduan untuk menguji unit fungsi serentak Go May 03, 2024 am 10:54 AM

Panduan untuk menguji unit fungsi serentak Go

See all articles