Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menamatkan Pelbagai Rutin Pergi Dengan Anggun Menggunakan Konteks?

Bagaimana untuk Menamatkan Pelbagai Rutin Pergi Dengan Anggun Menggunakan Konteks?

Susan Sarandon
Susan Sarandonasal
2024-12-10 05:48:14130semak imbas

How to Gracefully Terminate Multiple Go Routines Using Context?

Cara Menyegerakkan Berbilang Rutin Pergi dengan Konteks

Untuk menyegerakkan berbilang goroutin, membenarkannya ditamatkan apabila salah satu daripadanya kembali, konteks menyediakan berkesan penyelesaian.

Penjelasan:

Kod sampel mencipta dua goroutine. Untuk menyegerakkannya, konteks.Konteks dimulakan dan diberikan kepada kedua-dua gorout. Setiap goroutine memasuki gelung {} terpilih, mendengar mesej daripada konteks.

Apabila ralat berlaku atau syarat tertentu dipenuhi:

  1. Yang utama goroutine memanggil fungsi batal yang dikaitkan dengan konteks.
  2. Ini menghantar mesej "selesai" kepada konteks.
  3. Semua goroutine yang mendengar konteks menerima mesej ini dan ditamatkan.

Contoh Kod:

package main

import (
    "context"
    "sync"
)

func main() {

    ctx, cancel := context.WithCancel(context.Background())
    wg := sync.WaitGroup{}
    wg.Add(3)
    go func() {
        defer wg.Done()
        for {
            select {
            // msg from other goroutine finish
            case <-ctx.Done():
                // end
            }
        }
    }()

    go func() {
        defer wg.Done()
        for {
            select {
            // msg from other goroutine finish
            case <-ctx.Done():
                // end
            }
        }
    }()

    go func() {
        defer wg.Done()
        // your operation
        // call cancel when this goroutine ends
        cancel()
    }()
    wg.Wait()
}

Kelebihan Menggunakan Konteks:

  • Kawalan Berpusat: Mengelakkan keperluan untuk mekanisme penyegerakan yang jelas, memastikan kod bersih.
  • Pengendalian Ralat: Jika ralat berlaku dalam satu goroutine, ia boleh memberitahu goroutine lain melalui konteks.
  • Penamatan Anggun: Goroutine menerima isyarat untuk ditamatkan secepat mungkin, menghalang kemungkinan kebocoran memori.

Atas ialah kandungan terperinci Bagaimana untuk Menamatkan Pelbagai Rutin Pergi Dengan Anggun Menggunakan Konteks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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