Go 언어란?

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

병행성

Go 언어는 언어 차원에서 병행성(Concurrency, 동시성)을 제공합니다. 먼저 병행성과 병렬성(Parallelism)의 차이를 알아보겠습니다.

  • 병행성: 동시 처리의 논리적인 개념입니다. 단일 코어에서 스레드를 여러 개 생성하면 겉으로 보기에는 동시에 실행되는 것처럼 보이지만 실제로는 스레드 여러 개가 시간을 쪼개어 순차적(시분할)으로 실행됩니다. 물론 논리적인 개념이기 때문에 단일 코어에서 처리되든 멀티코어에서 처리되든 병행성은 만족합니다.
  • 병렬성: 동시 처리의 물리적인 개념입니다. 작업을 여러 CPU 코어에 나눠서 동시에 처리하는 상태를 뜻합니다.

Go 언어는 go 키워드를 통해 함수 여러 개를 동시에 실행할 수 있습니다. 이렇게 실행된 함수를 고루틴(Goroutine)이라고 하는데 스레드와는 차이점이 있습니다. 스레드는 운영체제의 커널에서 제공하는 리소스이기 때문에 많이 생성할수록 부담이 커집니다. 그림 1-5와 같이 Go 언어는 적정량의 스레드를 생성해서 고루틴을 처리합니다. 또한, 최대 프로세서(코어) 개수 설정에 따라 멀티코어도 지원됩니다(현재 프로세서의 개수를 구할 수 있으며, 일부 프로세서만 사용할 수도 있습니다).


그림 1-5 고루틴과 스레드

그림 1-6와 같이 Go 언어에서는 채널을 이용하여 고루틴끼리 통신을 할 수 있습니다. 즉 간단하게 채널을 통해 데이터를 공유하고 실행 순서를 제어합니다. 지금까지 해오던 멀티스레드 프로그래밍의 동기화 객체와 비슷합니다.

Go 언어의 개발자인 롭 파이크는 1980년 대부터 병행성을 지원하는 프로그래밍 언어를 연구해 왔으며 CSP를 따르는 Newsqueak 언어를 개발했고, Go 언어에 채널 개념을 도입했습니다.


그림 1-6 고루틴과 채널

CSP CSP(Communicating Sequential Processes)는 1978년 엔터니 호어가 고안했으며 동시에 실행되는 여러 프로세스간의 통신 패턴이며 수학적인 개념입니다. 채널을 이용한 메시지 전달을 기반으로 하고 있으며 대표적인 프로그래밍 언어는 occam입니다.


저작권 안내

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

Published

01 June 2015