>백엔드 개발 >Golang >Go에서 동시 고루틴 수를 어떻게 제어할 수 있나요?

Go에서 동시 고루틴 수를 어떻게 제어할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-27 21:46:11678검색

How Can I Control the Number of Concurrent Goroutines in Go?

동시 고루틴 수 제어

여러 고루틴을 동시에 실행하면 적절하게 설계된 프로그램의 성능을 향상시킬 수 있습니다. 그러나 특정 시나리오에서는 동시에 실행되는 고루틴 수를 제한해야 합니다. 이 글에서는 특정 시간에 실행되는 고루틴 수를 관리하는 방법을 살펴봅니다.

제한된 병렬성

Go 동시성에 설명된 "제한된 병렬성" 패턴 패턴 기사에서는 동시 고루틴 수를 제한하는 솔루션을 제공합니다. 이 패턴은 제한된 용량의 채널을 활용하여 동시에 실행할 수 있는 고루틴 수를 제어합니다.

구현 예

다음 예를 고려하여 유지 관리해야 합니다. 많은 수의 작업을 처리하기 위한 최대 10개의 동시 고루틴:

package main

import "fmt"

func main() {
    maxGoroutines := 10
    guard := make(chan struct{}, maxGoroutines) // Capacity of the channel limits concurrent goroutines

    for i := 0; i < 30; i++ {
        guard <- struct{}{} // Blocking operation to prevent exceeding the limit
        go func(n int) {
            worker(n)
            <-guard // Release the guard when the worker completes
        }(i)
    }
}

func worker(i int) { fmt.Println("doing work on", i) }

이 구현에서는 가드 채널은 제한 요소로 작용합니다. 동시 고루틴 수가 채널의 최대 용량(10)에 도달하면 가드 채널은 새로운 고루틴이 시작되는 것을 차단합니다. 실행 중인 고루틴이 완료되면 채널에서 수신하여 가드를 해제하여 새 고루틴을 실행할 수 있습니다.

결론

"제한된 병렬성" 패턴을 활용 제한된 용량 채널을 사용하면 동시 고루틴 수를 제어하여 원하는 최대값이 일관되게 유지되도록 할 수 있습니다. 이 접근 방식은 Go 프로그램에서 병렬 처리를 관리하는 체계적이고 효율적인 방법을 제공합니다.

위 내용은 Go에서 동시 고루틴 수를 어떻게 제어할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.