>백엔드 개발 >Golang >golang 함수의 비동기 프로그래밍 실습

golang 함수의 비동기 프로그래밍 실습

王林
王林원래의
2024-04-28 21:27:02685검색

비동기 프로그래밍을 사용하면 메인 스레드를 차단하지 않고도 작업을 수행할 수 있습니다. Go 언어는 경량 스레드 고루틴과 통신 파이프 채널을 사용하여 비동기 프로그래밍을 구현합니다. 고루틴은 go 키워드로 생성되며, 고루틴 간에 데이터를 주고받는 데 채널이 사용됩니다. 실제 사례: 동시 웹 요청은 채널을 사용하여 요청 응답을 수신하고 고루틴을 통해 동시에 HTTP GET 요청을 보냅니다. 메인 스레드는 채널로부터 응답을 수신하고 결과를 인쇄하여 프로그램 성능과 응답성을 향상시킵니다.

golang 함수의 비동기 프로그래밍 실습

Go 언어 함수에 대한 비동기 프로그래밍 연습

비동기 프로그래밍은 프로그래머가 메인 스레드를 차단하지 않고 여러 작업을 수행할 수 있게 해주는 병렬 프로그래밍 기술입니다. Go 언어에서는 goroutinechannel을 사용하여 비동기 프로그래밍을 쉽게 구현할 수 있습니다. goroutinechannel 可以轻松地实现异步编程。

Goroutine

Goroutine 是 Go 语言中的轻量级线程。与传统线程不同,goroutine 非常轻量,并且由 Go 运行时管理。使用 go

Goroutine

Goroutine은 Go 언어의 경량 스레드입니다. 기존 스레드와 달리 고루틴은 매우 가볍고 Go 런타임에 의해 관리됩니다. 고루틴은 go 키워드를 사용하여 생성할 수 있습니다.

go func() {
  // 异步任务
}

channel

channel은 Go 언어가 고루틴 간 통신을 위해 사용하는 파이프라인입니다. 채널을 사용하여 데이터를 보내고 받을 수 있습니다.

ch := make(chan int)  // 创建一个无缓冲 channel

// 向 channel 发送数据
ch <- 42

// 从 channel 接收数据
x := <-ch

실용 사례: 동시 웹 요청

다음은 비동기식 동시 웹 요청의 실제 사례입니다. 🎜
package main

import (
  "fmt"
  "net/http"
  "time"
)

func main() {
  // 创建一个 channel 来接收请求响应
  results := make(chan string)

  // 发送并发请求
  for i := 0; i < 10; i++ {
    go func(i int) {
      // 发送 HTTP GET 请求
      resp, err := http.Get(fmt.Sprintf("https://example.com/%d", i))
      if err != nil {
        results <- fmt.Sprintf("Error: %v", err)
        return
      }

      // 接收响应并发送结果
      body, err := ioutil.ReadAll(resp.Body)
      if err != nil {
        results <- fmt.Sprintf("Error: %v", err)
        return
      }

      results <- fmt.Sprintf("Response: %s", string(body))
    }(i)
  }

  // 接收并发请求的响应
  for j := 0; j < 10; j++ {
    fmt.Println(<-results)
  }
}
🎜이 프로그램은 요청 응답을 수신하는 채널을 생성한 다음 10개의 고루틴을 시작하여 동시에 HTTP GET 요청을 보냅니다. 각 고루틴은 응답을 받은 후 결과를 채널로 보냅니다. 메인 스레드는 채널로부터 결과를 수신하고 이를 콘솔에 인쇄합니다. 🎜🎜비동기 프로그래밍을 사용하면 이 프로그램은 메인 스레드를 차단하지 않고 요청을 동시에 처리할 수 있으므로 애플리케이션의 성능과 응답성이 향상됩니다. 🎜

위 내용은 golang 함수의 비동기 프로그래밍 실습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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