> 백엔드 개발 > Golang > Golang 함수 통신 파이프라인 시간 초과 처리 전략

Golang 함수 통신 파이프라인 시간 초과 처리 전략

PHPz
풀어 주다: 2024-05-04 12:00:02
원래의
1082명이 탐색했습니다.

통신을 위해 파이프라인을 사용할 때 파이프라인 수신기가 항상 차단되는 것을 방지하기 위해 Golang은 두 가지 시간 초과 처리 전략을 제공합니다. 즉, 파이프라인 수신기가 수신하지 않을 때 Context를 사용하여 시간 제한을 설정하거나 선택을 사용하여 수신합니다. 데이터에 따르면 이 두 가지 전략은 모두 시간 초과됩니다.

Golang 함수 통신 파이프라인 시간 초과 처리 전략

Golang 함수 통신 파이프라인 시간 초과 처리 전략

Pipeline은 Golang에서 프로세스 간 통신을 위한 일반적인 방법입니다. 그러나 파이프라인의 수신 측이 데이터를 수신할 수 없으면 계속 차단됩니다. 이러한 차단을 방지하기 위해 시간 제한이 있는 파이프된 수신 작업을 사용할 수 있습니다.

타임아웃 처리 전략

두 가지 주요 타임아웃 처리 전략이 있습니다:

  • 컨텍스트 사용: context.Context 유형을 사용하면 데이터가 수신되지 않는 시간 제한을 설정할 수 있으며 작업 시간은 다음과 같습니다. 밖으로.
  • select 사용: select 문을 사용하면 여러 파이프를 동시에 들을 수 있습니다. 파이프라인 수신기가 데이터를 수신하지 않으면 선택 시간이 초과됩니다.

실용 사례

다음은 Context Timeout 처리 전략을 사용한 파이프라인 수신 작업의 예입니다.

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)
}
로그인 후 복사

Select Timeout 처리 전략을 사용한 파이프라인 수신 작업의 예:

package main

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

func main() {
    // 创建一个管道
    ch := make(chan int)

    // 创建一个 select 语句来监听管道和超时
    var total uint64
    go func() {
        for {
            select {
            case value := <-ch:
                total += uint64(value)
            case <-time.After(5 * time.Second):
                fmt.Println("Timeout reached!")
                return
            }
        }
    }()

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

    log.Printf("Total: %d", total)
}
로그인 후 복사

위 내용은 Golang 함수 통신 파이프라인 시간 초과 처리 전략의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿