> 백엔드 개발 > Golang > Golang 동시성 모델의 고루틴에 대한 자세한 설명과 예

Golang 동시성 모델의 고루틴에 대한 자세한 설명과 예

王林
풀어 주다: 2023-07-18 11:03:18
원래의
778명이 탐색했습니다.

Golang 동시성 모델의 고루틴에 대한 자세한 설명과 예

오늘날 소프트웨어 개발 분야에서 동시 프로그래밍은 점점 더 필수적인 기술이 되었습니다. 기존 스레드 모델은 높은 스레드 전환 오버헤드, 공유 데이터 스레드 안전성 등과 같은 일련의 문제에 직면하는 경우가 많습니다. 이러한 문제를 해결하기 위해 Golang은 Goroutine이라는 동시성 모델을 도입합니다. 이 글에서는 Golang의 고루틴 동시성 모델을 자세히 소개하고 몇 가지 실용적인 예제 코드를 제공합니다.

고루틴이란 무엇인가요?
고루틴은 Golang의 동시 실행의 기본 단위입니다. 경량 스레드로 간주할 수 있습니다. 각 고루틴은 독립적으로 실행될 수 있고 자체 스택과 명령 시퀀스가 ​​있으며 Go 키워드를 사용하여 생성됩니다. 기존 스레드에 비해 고루틴을 생성하고 파괴하는 오버헤드가 훨씬 적으며 고루틴 간 전환도 더 효율적입니다.

예제 1: 간단한 고루틴 예
다음은 고루틴을 사용하여 작업을 동시에 수행하는 방법을 보여주는 간단한 고루틴 예입니다:

package main

import (
    "fmt"
    "time"
)

func printNumbers() {
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }
}

func printLetters() {
    for i := 'a'; i < 'e'; i++ {
        fmt.Printf("%c
", i)
    }
}

func main() {
    go printNumbers()
    go printLetters()

    // 主Goroutine等待一定时间,以便其他Goroutine有机会执行
    time.Sleep(2 * time.Second)
}
로그인 후 복사

위 예에서 우리는 printNumbers 두 함수를 정의했습니다. printLetters는 숫자와 문자를 각각 인쇄하는 데 사용됩니다. main 함수에서는 go 키워드를 사용하여 두 개의 독립적인 고루틴을 시작하여 이 두 함수를 동시에 실행합니다. 동시에 다른 고루틴이 실행될 충분한 시간을 확보하기 위해 기본 고루틴에서 time.Sleep을 호출합니다. printNumbersprintLetters,它们分别用于打印数字和字母。在main函数中,我们通过go关键字来启动两个独立的Goroutines并发地执行这两个函数。同时,为了确保其他Goroutines有足够的时间执行,我们在主Goroutine中调用了time.Sleep

示例2:使用通道实现Goroutine间的通信
除了并发执行任务,Goroutines还可以通过通道进行安全地传递数据,从而实现多个Goroutines之间的通信。下面是一个使用通道的示例代码:

package main

import "fmt"

func produce(c chan<- int) {
    for i := 0; i < 5; i++ {
        c <- i
    }
    close(c)
}

func consume(c <-chan int) {
    for num := range c {
        fmt.Println(num)
    }
}

func main() {
    ch := make(chan int)

    go produce(ch)
    consume(ch)
}
로그인 후 복사

在上述示例中,我们定义了两个函数produceconsume,分别用于生产和消费数据。在main函数中,我们创建了一个通道ch,并通过go关键字并发地执行produce函数和consume函数。produce函数通过c <- i将数据发送到通道中,而consume函数通过num := range c从通道中接收数据。在produce函数的末尾,我们调用了close(c)来关闭通道,以便consume

예 2: 채널을 사용하여 고루틴 간의 통신 구현

동시에 작업을 실행하는 것 외에도 고루틴은 채널을 통해 안전하게 데이터를 전송하여 여러 고루틴 간의 통신을 달성할 수 있습니다. 다음은 채널을 사용하는 샘플 코드입니다.
rrreee

위의 예에서는 각각 데이터를 생성하고 소비하는 두 가지 함수 produceconsume를 정의했습니다. main 함수에서는 ch 채널을 만들고 go 키워드와 go를 통해 produce 함수를 동시에 실행합니다. 소비 기능. produce 함수는 c 를 통해 채널에 데이터를 보내는 반면, <code>consume 함수는 num := range c code>채널로부터 데이터를 받습니다. <code>produce 함수 끝에서 close(c)를 호출하여 모든 데이터를 읽은 후 consume 함수가 종료되도록 채널을 닫습니다. . 🎜🎜요약🎜이 글에서는 Golang의 고루틴 동시성 모델을 소개하고 실용적인 예제 코드를 제공합니다. 고루틴은 Go 키워드를 통해 생성된 경량 스레드이며 독립적인 스택과 명령 시퀀스를 갖습니다. 샘플 코드를 통해 고루틴을 사용하여 작업을 동시에 실행하고 채널을 통해 고루틴 간의 보안 통신을 구현하는 방법을 보여줍니다. 고루틴을 적절하게 사용하면 동시 프로그래밍은 다양한 작업을 보다 효율적으로 수행할 수 있습니다. 고루틴의 강력한 기능을 더 깊이 이해하려면 위의 샘플 코드를 실행해 보세요! 🎜

위 내용은 Golang 동시성 모델의 고루틴에 대한 자세한 설명과 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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