Golang 채널 동시성

Beginner

This tutorial is from open-source community. Access the source code

소개

Channels 랩은 Golang 에서 채널에 대한 이해도를 테스트하도록 설계되었습니다. 채널은 동시성 고루틴 (goroutine) 을 연결하는 데 사용되며, 이를 통해 값들을 서로 주고받을 수 있습니다.

채널 (Channels)

이 랩에서는 새로운 채널을 생성하고, 새로운 고루틴 (goroutine) 에서 채널로 값을 전송해야 합니다. 그런 다음 채널에서 값을 수신하여 출력합니다.

  • make(chan val-type) 구문을 사용하여 새로운 채널을 생성해야 합니다.
  • 채널은 전달하는 값의 타입으로 지정되어야 합니다.
  • channel <- 구문을 사용하여 채널로 값을 전송해야 합니다.
  • <-channel 구문을 사용하여 채널에서 값을 수신해야 합니다.
  • 새로운 고루틴 (goroutine) 을 사용하여 채널로 값을 전송해야 합니다.
## 프로그램을 실행하면 "ping" 메시지가
## 채널을 통해 한 고루틴에서 다른 고루틴으로
## 성공적으로 전달됩니다.
$ go run channels.go
ping

## 기본적으로 송신과 수신은 송신자와 수신자가 모두 준비될 때까지 블록됩니다. 이 속성을 통해
## 다른 동기화 없이 프로그램 끝에서 "ping"
## 메시지를 기다릴 수 있었습니다.

전체 코드는 다음과 같습니다.

// _Channels_는 동시성
// 고루틴 (goroutine) 을 연결하는 파이프입니다. 한
// 고루틴에서 채널로 값을 보내고
// 다른 고루틴에서 해당 값을 수신할 수 있습니다.

package main

import "fmt"

func main() {

	// `make(chan val-type)`을 사용하여 새로운 채널을 생성합니다.
	// 채널은 전달하는 값의 타입으로 지정됩니다.
	messages := make(chan string)

	// `channel <-` 구문을 사용하여 채널로 값을 _전송_합니다.
	// 여기서는 새로운 고루틴에서 위에서 만든 `messages`
	// 채널로 `"ping"` 을 보냅니다.
	go func() { messages <- "ping" }()

	// `<-channel` 구문은 채널에서 값을 _수신_합니다.
	// 여기서는 위에서 보낸 `"ping"` 메시지를 수신하여 출력합니다.
	msg := <-messages
	fmt.Println(msg)
}

요약

Channels 랩은 Golang 에서 채널을 사용하여 동시성 고루틴 (goroutine) 간에 값을 송수신하는 능력을 테스트합니다. 이 랩을 완료함으로써 채널의 작동 방식과 Golang 프로그램의 성능을 향상시키는 데 어떻게 사용할 수 있는지 더 잘 이해하게 될 것입니다.