>  기사  >  백엔드 개발  >  비동기식 golang이란 무엇입니까?

비동기식 golang이란 무엇입니까?

青灯夜游
青灯夜游원래의
2022-12-28 10:54:454360검색

golang에서 비동기는 비동기 프로세스의 실행이 코드의 순서를 따르지 않는다는 것을 의미합니다. 비동기 프로세스 호출이 있을 때 비동기 프로세스의 실행은 더 이상 원래 시퀀스와 순차적 관계를 갖지 않습니다. 발행된 경우 호출자는 결과를 얻지 못합니다. 그 전에는 후속 작업을 계속 수행할 수 있습니다. Golang 비동기는 주로 코루틴(goroutine)에 의해 구현됩니다. goroutine은 함수를 호출하는 데 사용됩니다. go 키워드로 함수를 호출하면 go는 함수를 실행하기 위해 코루틴과 유사한 것을 생성하므로 동시성을 쉽게 구현할 수 있습니다.

비동기식 golang이란 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

비동기란 무엇인가요?

비동기(async)는 동기(Synchronous, sync)와 반대되는 개념입니다. 우리가 연구한 전통적인 단일 스레드 프로그래밍에서 프로그램 실행은 동기식입니다(동기식은 모든 단계가 동시에 실행된다는 의미가 아니라 단계가 제어 흐름 순서에 따라 순차적으로 실행된다는 의미). 비동기 개념은 동기화를 보장하지 않는 개념입니다. 즉, 비동기 프로세스의 실행은 더 이상 원래 시퀀스와 순차적 관계를 갖지 않습니다.

간단히 이해하면 동기화는 코드 순서대로 실행되고 비동기 실행은 코드 순서가 아니며 비동기 실행이 더 효율적입니다.

또 다른 설명은 다음과 같습니다.

두 개의 컨테이너를 제공합니다. 하나는 동기식이고 다른 하나는 비동기식으로 실행될 코드를 각각 동기식으로 나누고 비동기식으로 컴파일될 때까지 기다립니다. 동기 실행을 기다립니다. 완료 후 내부에서 코드를 비동기적으로 실행합니다.

golang에서 비동기식 구현 방법

Go의 비동기식은 주로 코루틴(goroutine)으로 구현됩니다. 스레드에 비해 코루틴은 메모리를 덜 차지하고 더 가볍습니다. 이는 Go의 성능 이점이기도 합니다.

Go 언어는 동시 프로그래밍 언어입니다. Go에는 일반적으로 일부 비동기 및 동시 작업을 수행하는 데 사용할 수 있는 매우 중요한 키워드 go(goroutine)가 있습니다.
goroutine은 함수를 호출하는 데 사용됩니다. go 키워드로 함수를 호출하면 go는 코루틴과 유사한 함수를 생성하여 동시성을 쉽게 달성할 수 있습니다.

예:

package main
import (
	"fmt"
)
func main() {
	go work1()
	go work2()
	fmt.Println("[全部完成]")
}
func work1(){
	fmt.Println("work1")
}
func work2(){
	fmt.Println("work2")
}

Result:

[全部完成]

물론 이는 부적절한 예이지만 work1과 work2를 호출한 후 출력 결과를 기다리지 않고 실행이 계속된다는 것도 증명합니다.
최종 출력을 실행하기 전에 비동기 실행이 완료될 때까지 기다리려면 WaitGroup에 가입해야 합니다

올바른 예:

package main

import (
	"fmt"
	"sync"
)

var waitGroup sync.WaitGroup
func main() {
	waitGroup.Add(2)
	go work1()
	go work2()
	waitGroup.Wait()
	fmt.Println("[全部完成]")
}
func work1(){
	fmt.Println("work1")
	waitGroup.Done()
}
func work2(){
	fmt.Println("work2")
	waitGroup.Done()
}

결과:

work2
work1
[全部完成]

[관련 권장 사항: Go 비디오 튜토리얼, 프로그래밍 교육 ]

위 내용은 비동기식 golang이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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