Bagaimana untuk Menamatkan Masa dengan Anggun Goroutine dalam Go?

Patricia Arquette
Lepaskan: 2024-11-19 11:56:02
asal
965 orang telah melayarinya

How to Gracefully Timeout Goroutines in Go?

Cara Menghentikan Masa Goroutine dalam Go to Control Execution Time

Goroutines, sebahagian penting daripada Go concurrency, membenarkan pelaksanaan tugasan tidak segerak. Walau bagaimanapun, kadangkala, adalah perlu untuk mengawal tempoh rutin ini dan menghalangnya daripada melaksanakan selama-lamanya.

Latar Belakang dan Masalah

Dalam alat ujian beban anda, anda ingin menamatkan goroutine selepas masa tertentu untuk mengehadkan tempoh proses panggilan HTTP. Pendekatan semasa menggunakan masa.Sleep() dalam goroutine mencipta saluran untuk komunikasi, tetapi ia mengakibatkan penamatan pramatang goroutine.

Penyelesaian menggunakan Konteks

Lagi pendekatan yang disyorkan melibatkan penggunaan pakej golang.org/x/net/context (tersedia dalam perpustakaan standard dalam Go 1.7 ), khususnya konteks.Antara muka konteks. Konteks menyediakan mekanisme untuk membatalkan atau meluangkan masa goroutines.

Coretan kod berikut menunjukkan penyelesaian ini:

package main

import (
    "context"
    "fmt"
    "time"
)

func test(ctx context.Context) {
    t := time.Now()

    select {
    case <-time.After(1 * time.Second):
        fmt.Println("overslept")
    case <-ctx.Done():
    }
    fmt.Println("used:", time.Since(t))
}

func main() {
    ctx, _ := context.WithTimeout(context.Background(), 50*time.Millisecond)
    test(ctx)
}
Salin selepas log masuk

Dalam kod ini:

  • Konteks. Konteks dicipta dengan tamat masa 50 milisaat menggunakan konteks.WithTimeout().
  • The test() goroutine berjalan dalam konteks ini dan menunggu arahan melalui pilih.
  • Selepas tamat masa berlalu, pilih menerima isyarat ctx.Done() dan keluar dari goroutine dengan anggun, mengelakkan tidur berlebihan.

Atas ialah kandungan terperinci Bagaimana untuk Menamatkan Masa dengan Anggun Goroutine dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan