가장 빨리 만나는 Go 언어 핵심 정리

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

핵심 정리

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

파이프라인

파이프라인은 대표적인 병렬처리 방법이며 동시에 실행되는 작업의 개수를 제한하여 주어진 작업을 처리하는 방식입니다. 보통 작업 큐(Work Queue), 작업 풀(Work Pool) 등으로 불립니다.

마치 여러 개의 파이프(관)에 물을 흘려보내는 것과 비슷하다고 하여 파이프라인이라고 합니다. 파이프가 하나라면 흘려보내는 물의 양이 적을 것이고, 파이프가 없다면 흘려보내는 물의 양을 조절할 수 없을 것입니다. 마찬가지로 프로그램에서도 일정한 개수의 고루틴(스레드)으로 동시에 작업을 실행하여 효율적으로 데이터를 처리합니다.

Go 언어에서는 고루틴을 무한정 생성하면 런타임 에러가 발생합니다. 따라서 파이프라인 패턴을 이용하여 고루틴 개수를 일정하게 유지하면서 작업을 처리하는 것이 좋습니다.

인터페이스

웹 크롤러처럼 웹 페이지를 처리하는 루틴은 제각각이지만 모두 HTML을 가져오고, 웹 페이지를 처리한다는 공통점이 있습니다. 이처럼 작업의 세부 내용은 다르지만 수행 형태는 같을 때 인터페이스를 활용하면 코드의 양을 줄일 수 있습니다.

채널에 채널 보내기

Go 언어의 채널은 구조체나 값뿐만 아니라 채널 자체도 보낼 수 있습니다. 즉, 데이터가 흐르는 통로를 주고받을 수 있으므로 채팅 서버를 작성할 때 유용합니다.

package main

import "fmt"

func f(x chan chan int) int {
	c := make(chan int) // int형 채널을 생성
	x <- c              // 생성된 채널을 채널 x에 보냄
	return <-c          // 채널 c에 들어온 값을 꺼내서 리턴
}

func main() {
	x := make(chan chan int) // int형 채널을 보내는 채널

	go func() {
		c := <-x // x에서 채널을 꺼냄
		c <- 1   // 채널 c에 값을 보냄
	}()

	fmt.Println(f(x)) // 1: 고루틴에서 보낸 값을 출력
}

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2015-06-01