Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengutamakan Kes dalam Pernyataan `pilih` Go untuk Pelaksanaan Deterministik?

Bagaimana Mengutamakan Kes dalam Pernyataan `pilih` Go untuk Pelaksanaan Deterministik?

Patricia Arquette
Lepaskan: 2024-12-06 09:53:11
asal
662 orang telah melayarinya

How to Prioritize Cases in Go's `select` Statements for Deterministic Execution?

Mengatasi Keutamaan dalam Penyata pilih Go

Apabila menggunakan penyataan pilih dalam Go, susunan penilaian kes biasanya tidak bersifat deterministik. Walau bagaimanapun, dalam sesetengah senario, kami mungkin perlu mengutamakan pelaksanaan kes tertentu.

Keutamaan dengan Pembatalan Konteks

Pertimbangkan kod berikut yang kami mahu tutup dengan anggun pengirim degupan jantung apabila konteks dibatalkan:

func sendRegularHeartbeats(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            return
        case <-time.After(1 * time.Second):
            sendHeartbeat()
        }
    }
}
Salin selepas log masuk

Namun, apabila konteks ditutup serta-merta, kod mungkin masih menghantar degupan jantung sebelum kes "Selesai" dilaksanakan.

Penyelesaian: Keutamaan dengan Saluran Pembantu

Satu pendekatan untuk menyelesaikan masalah ini ialah menggunakan saluran pembantu untuk mengutamakan kes pembatalan konteks:

func sendRegularHeartbeats(ctx context.Context) {
    done := make(chan struct{})
    go func() {
        <-ctx.Done()
        close(done)
    }()

    for {
        select {
        case <-done:
            return
        case <-time.After(1 * time.Second):
            sendHeartbeat()
        }
    }
}
Salin selepas log masuk

Dalam kes ini, saluran selesai memastikan bahawa kes "ctx.Done()" dinilai terlebih dahulu apabila konteksnya dibatalkan.

Pertimbangan Tambahan

Walaupun penyelesaian ini meningkatkan keutamaan, ia tidak sepenuhnya menghapuskan kemungkinan degupan jantung dihantar sebelum kes "Selesai" dilaksanakan. Untuk penutupan yang benar-benar disegerakkan, pertimbangkan untuk menggunakan primitif penyegerakan seperti pembolehubah atom atau mutex untuk memastikan penghantaran degupan jantung ditamatkan serta-merta selepas pembatalan konteks.

Atas ialah kandungan terperinci Bagaimana Mengutamakan Kes dalam Pernyataan `pilih` Go untuk Pelaksanaan Deterministik?. 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