메뉴

문서정보

future

컴퓨터 공학에서 future, promise, delay, deferred는 동시성 프로그램에서 계산이 완료되지 않은 결과에 대한 프록시 역할을 하는 객체를 설명하기 위해서 사용한다. 알 수 없는 미래에 완료될 계산을 기다리고 처리하기 위한 객체다.

Futures 와 promises는 함수형 프로그래밍과 그 관련 패러다임에서(logic programming)에서 사용하며, "값(미래)"과 "계산 방법(약속)"을 분리하여 병렬화된 계산을 유연하게 수행 할 수 있도록 한다. 이러한 구조는 분산 컴퓨팅에서 통신 지연 시간을 줄이는데 사용되었다. 요즘에는 continuation-passing style이 아닌 direct style로 프로그램을 작성하기 위한 목적으로 널리 사용하고 있다.

Go 언어에서의 future

Go 언어에서 future의 사용 패턴은 아래와 같다.
c := make(chan int)       // future
go func() { c <- f() } () // async
value := <-c              // await

==== 통신 채널을 정의한다. ===== Future는 미래에 발생할 사건을 처리하기 위한 코드를 지금 약속(promise) 하는 것이다. 따라서 지금의 약속과 미래에 발생할 사건을 연결하기 위한 통신 장치가 필요하다. Go에서 제공하는 채널(channel)을 이용해서 두 객체를 연결할 수 있다.

 Channel

c := make(chan int)
채널 c를 이용해서 미래로 연결할 수 있다. 채널은 미래의 시점에 준비가되거나 준비되지 않은 결과를 전달하기 위한 프록시가 된다. Go 에서 채널은 값이 준비 될 때까지 대기(block)하게 된다.

값을 비동기적으로 처리한다.

채널을 통해서 전달된 미래의 데이터를 처리할 함수를 만들어야 한다. 이 함수는 고루틴을 이용해서 비동기적으로 작동하도록 할 수 있다. 이제 코드는 채널로 부터 데이터를 기다리는 것과는 별개로 다른 작업을 계속 할 수 있다.

... 계속