찾다
백엔드 개발Golang동시 프로그래밍 기술: Go WaitGroup의 고급 사용

동시 프로그래밍 기술: Go WaitGroup의 고급 사용

Sep 28, 2023 pm 09:52 PM
go동시 프로그래밍waitgroup

并发编程技巧:Go WaitGroup的高级用法

동시 프로그래밍 팁: Go WaitGroup의 고급 사용법

동시 프로그래밍에서는 여러 동시 작업의 실행을 조정하고 관리하는 것이 중요한 작업입니다. Go 언어는 동시성 제어를 우아하게 구현하는 데 도움이 되는 매우 실용적인 동시성 기본 요소인 WaitGroup을 제공합니다. 이 기사에서는 독자가 이를 더 잘 이해하고 적용할 수 있도록 특정 코드 예제를 사용하여 WaitGroup의 기본 사용법을 소개하고 고급 사용법에 중점을 둘 것입니다.

WaitGroup은 Go 언어에 내장된 동시성 기본 요소로, 동시 작업이 완료될 때까지 기다리는 데 도움이 됩니다. Add, Done, Wait의 세 가지 방법을 제공합니다. Add 메서드는 대기 작업 수를 설정하는 데 사용되고, Done 메서드는 대기 작업 수를 줄이는 데 사용되며, Wait 메서드는 모든 대기 작업이 완료될 때까지 현재 코루틴을 차단하는 데 사용됩니다.

다음은 WaitGroup의 기본 사용법을 보여주는 간단한 예입니다.

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(num int) {
            defer wg.Done()

            time.Sleep(time.Second)
            fmt.Println("Task", num, "done")
        }(i)
    }

    wg.Wait()
    fmt.Println("All tasks done")
}

위 코드에서는 WaitGroup 개체 wg를 만들고 루프를 통해 5개의 동시 작업을 만듭니다. 각 작업을 실행하는 동안에는 Add 메서드를 사용하여 대기 중인 작업 수를 늘리고, 작업이 끝나면 Done 메서드를 사용하여 대기 중인 작업 수를 줄입니다. 마지막으로 대기 중인 모든 작업이 완료될 때까지 기본 코루틴을 차단하기 위해 Wait 메서드를 호출합니다.

기본 사용법 외에도 WaitGroup은 동시 작업 실행을 보다 유연하게 제어할 수 있는 몇 가지 고급 사용법도 제공합니다. 아래에서는 일반적으로 사용되는 몇 가지 고급 사용법을 자세히 소개합니다.

  1. 일련의 작업을 실행하고 최대 동시성 수 설정

일련의 작업을 동시에 실행해야 하지만 최대 동시성 수를 제한하고 싶다면 버퍼링된 채널을 다음과 결합하여 사용할 수 있습니다. 이를 달성하려면 WaitGroup을 사용하세요. 아래 코드는 일련의 작업을 동시에 실행하는 방법을 보여 주지만 최대 3개의 작업만 동시에 실행할 수 있도록 허용합니다.

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup
    maxConcurrency := 3
    tasks := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    sem := make(chan struct{}, maxConcurrency)

    for _, task := range tasks {
        wg.Add(1)
        sem <- struct{}{} // 获取令牌,控制最大并发数

        go func(num int) {
            defer wg.Done()

            time.Sleep(time.Second)
            fmt.Println("Task", num, "done")

            <-sem // 释放令牌,允许新的任务执行
        }(task)
    }

    wg.Wait()
    fmt.Println("All tasks done")
}

위 코드에서는 버퍼링된 채널 sem을 생성하고 크기를 최대 개수로 설정합니다. 동시성의 . 각 작업이 시작되기 전에 sem

  1. Timeout은 동시 작업의 실행을 제어합니다.

때로는 동시 작업의 실행 시간을 제어하고 시간 초과 시 작업 실행을 종료하고 싶을 때가 있습니다. 버퍼링된 채널과 타이머를 사용하면 이 기능을 쉽게 구현할 수 있습니다. 다음 코드는 동시 작업의 시간 초과를 3초로 설정하는 방법을 보여줍니다.

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup
    tasks := []int{1, 2, 3, 4, 5, 6, 7}

    timeout := 3 * time.Second
    done := make(chan struct{})

    for _, task := range tasks {
        wg.Add(1)

        go func(num int) {
            defer wg.Done()

            // 模拟任务执行时间不定
            time.Sleep(time.Duration(num) * time.Second)
            fmt.Println("Task", num, "done")

            // 判断任务是否超时
            select {
            case <-done:
                // 任务在超时前完成,正常退出
                return
            default:
                // 任务超时,向通道发送信号
                close(done)
            }
        }(task)
    }



    wg.Wait()
    fmt.Println("All tasks done")
}

위 코드에서는 done 채널을 생성하고 작업 실행 중에 채널이 닫혔는지 확인하여 작업 시간 초과 여부를 확인합니다. 작업이 완료되면 close(done) 문을 사용하여 완료 채널에 신호를 보내 작업 시간이 초과되었음을 나타냅니다. 다양한 상황을 처리하려면 select 문을 통해 다양한 분기를 선택하세요.

위의 샘플 코드를 통해 WaitGroup의 고급 사용법이 실제 동시 프로그래밍에서 매우 실용적이라는 것을 알 수 있습니다. 이러한 기술을 익히면 동시 작업의 실행을 더 잘 제어하고 코드의 성능과 유지 관리성을 향상시킬 수 있습니다. 독자들이 본 글의 소개와 샘플 코드를 통해 WaitGroup의 사용법을 심도 있게 이해하고 실제 프로젝트에 적용할 수 있기를 바랍니다.

위 내용은 동시 프로그래밍 기술: Go WaitGroup의 고급 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Golang과 Python 사이의 선택 : 프로젝트에 적합한 올바른Golang과 Python 사이의 선택 : 프로젝트에 적합한 올바른Apr 19, 2025 am 12:21 AM

golangisidealferperperferferferferformance-criticalapplications 및 concurrentprogramming, whilepythonexcelsindatascience, 빠른 프로토 타입, 및 범위

골랑 : 동시성과 행동의 성능골랑 : 동시성과 행동의 성능Apr 19, 2025 am 12:20 AM

Golang은 Goroutine 및 Channel을 통해 효율적인 동시성을 달성합니다. 1. Goroutine은 가벼운 스레드이며 GO 키워드로 시작합니다. 2. 채널은 경주 조건을 피하기 위해 고루틴 간의 안전한 통신에 사용됩니다. 3. 사용 예제는 기본 및 고급 사용법을 보여줍니다. 4. 일반적인 오류에는 교착 상태와 데이터 경쟁이 포함되며 Gorun-Race가 감지 할 수 있습니다. 5. 성능 최적화는 채널 사용을 줄이고, 고 루틴 수를 합리적으로 설정하고, sync.pool을 사용하여 메모리를 관리하는 것을 제안합니다.

Golang vs. Python : 어떤 언어를 배워야합니까?Golang vs. Python : 어떤 언어를 배워야합니까?Apr 19, 2025 am 12:20 AM

Golang은 시스템 프로그래밍 및 높은 동시성 응용 프로그램에 더 적합한 반면 Python은 데이터 과학 및 빠른 개발에 더 적합합니다. 1) Golang은 Google에 의해 개발되어 정적으로 입력하여 단순성과 효율성을 강조하며 동시성 시나리오에 적합합니다. 2) Python은 Guidovan Rossum, 동적으로 입력, 간결한 구문, 광범위한 응용 프로그램, 초보자 및 데이터 처리에 적합합니다.

Golang vs. Python : 성능 및 확장 성Golang vs. Python : 성능 및 확장 성Apr 19, 2025 am 12:18 AM

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

Golang 대 기타 언어 : 비교Golang 대 기타 언어 : 비교Apr 19, 2025 am 12:11 AM

Go Language는 동시 프로그래밍, 성능, 학습 곡선 등의 고유 한 장점을 가지고 있습니다. 1. 동시 프로그래밍은 가볍고 효율적인 Goroutine 및 채널을 통해 실현됩니다. 2. 컴파일 속도는 빠르며 작동 속도는 작동 성능이 C 언어의 성능에 가깝습니다. 3. 문법은 간결하고 학습 곡선은 매끄럽고 생태계는 풍부합니다.

Golang과 Python : 차이점을 이해합니다Golang과 Python : 차이점을 이해합니다Apr 18, 2025 am 12:21 AM

Golang과 Python의 주요 차이점은 동시성 모델, 유형 시스템, 성능 및 실행 속도입니다. 1. Golang은 동시 작업에 적합한 CSP 모델을 사용합니다. Python은 I/O 집약적 인 작업에 적합한 멀티 스레딩 및 Gil에 의존합니다. 2. Golang은 정적 유형이며 Python은 동적 유형입니다. 3. Golang 컴파일 된 언어 실행 속도는 빠르며 파이썬 해석 언어 개발은 ​​빠릅니다.

Golang vs. C : 속도 차이 평가Golang vs. C : 속도 차이 평가Apr 18, 2025 am 12:20 AM

Golang은 일반적으로 C보다 느리지 만 Golang은 동시 프로그래밍 및 개발 효율에 더 많은 장점이 있습니다. 1) Golang의 쓰레기 수집 및 동시성 모델은 높은 동시 시나리오에서 잘 수행합니다. 2) C는 수동 메모리 관리 및 하드웨어 최적화를 통해 더 높은 성능을 얻지 만 개발 복잡성이 높습니다.

Golang : 클라우드 컴퓨팅 및 DevOps의 핵심 언어Golang : 클라우드 컴퓨팅 및 DevOps의 핵심 언어Apr 18, 2025 am 12:18 AM

Golang은 클라우드 컴퓨팅 및 DevOps에서 널리 사용되며 장점은 단순성, 효율성 및 동시 프로그래밍 기능에 있습니다. 1) 클라우드 컴퓨팅에서 Golang은 Goroutine 및 채널 메커니즘을 통해 동시 요청을 효율적으로 처리합니다. 2) DevOps에서 Golang의 빠른 편집 및 크로스 플랫폼 기능이 자동화 도구의 첫 번째 선택입니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구