Rumah >pembangunan bahagian belakang >Golang >Strategi pemprosesan saluran paip komunikasi fungsi Golang

Strategi pemprosesan saluran paip komunikasi fungsi Golang

PHPz
PHPzasal
2024-05-04 12:00:021102semak imbas

Apabila menggunakan saluran paip untuk komunikasi, untuk mengelakkan penerima saluran paip daripada disekat sepanjang masa, Golang menyediakan dua strategi pemprosesan tamat masa: gunakan Konteks untuk menetapkan had masa atau gunakan pilih untuk mendengar berbilang saluran paip Apabila penerima saluran paip tidak menerima data, kedua-dua strategi ini akan habis masa.

Strategi pemprosesan saluran paip komunikasi fungsi Golang

Strategi pemprosesan tamat masa talian paip komunikasi fungsi Golang

Saluran paip ialah cara biasa komunikasi antara proses di Golang. Walau bagaimanapun, apabila hujung penerimaan saluran paip tidak dapat menerima data, ia akan menyekat selama-lamanya. Untuk mengelakkan penyekatan ini, kita boleh menggunakan operasi penerimaan paip dengan tamat masa.

Strategi pemprosesan tamat masa

Terdapat dua strategi pemprosesan tamat masa utama:

  • Menggunakan Konteks: Menggunakan konteks.Jenis konteks, kami boleh menetapkan had masa di mana tiada data diterima dan operasi akan mengambil masa keluar.
  • Gunakan pilih: Menggunakan pernyataan pilih, kita boleh mendengar berbilang paip pada masa yang sama. Apabila penerima saluran paip tidak menerima data, pilih akan tamat masa.

Kes praktikal

Berikut ialah contoh operasi penerimaan saluran paip menggunakan strategi pemprosesan tamat masa Konteks:

package main

import (
    "context"
    "fmt"
    "log"
    "sync/atomic"
    "time"
)

func main() {
    // 创建一个管道
    ch := make(chan int)
    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()

    // 并发地将数据发送到管道
    go func() {
        for i := 0; i < 10; i++ {
            ch <- i
        }
    }()

    // 使用 Context 超时接收数据
    go func() {
        var total uint64
        for {
            select {
            case <-ctx.Done():
                fmt.Println("Timeout reached!")
                return
            case value := <-ch:
                total += uint64(value)
            }
        }
    }()

    log.Printf("Total: %d", total)
}

Contoh operasi penerimaan saluran paip menggunakan strategi pemprosesan tamat masa pilih:

rreee

Atas ialah kandungan terperinci Strategi pemprosesan saluran paip komunikasi fungsi Golang. 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