Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

Future(미래)와 Promise(약속)은 비동기처리에 있어서 중요한 개념입니다.

미래에는 블록킹이 없기때문에 어느시점 사용가능한 함수의 결과(성공또는 실패등을)

를 담을수 있는 용기라고 보면 됩니다.

Scala에서 지원하는 키워드이지만 일반적으로 결과에대한

비동기적인 핸들이라고 보면 되겠으며 C#/JAVA에서도 유사한 모델을 가지고 있습니다.


이것은 AKKA의 요소가아닌 기존 개발 플랫폼의 비동기처리 요소로

나중에 Actor, Akka Stream등과 연동되는 중요한 요소로 사용이 될수 있습니다.


관련 참고 원문: 이러한 컨셉은 Java(8)/.net(4.5)에서도 지원을 합니다.


Warning

자바7의 java.util.concurrent.Future에 익숙하다면 scala.concurrent.Future가 자바 클래스를 감싼것으로 생각할수도 있지만

실제로는 그렇지 않다. java.util.concurrent.Future 클래스는 폴링을 필요로하며 결과를 얻기위해 블로킹 get 메서드를 사용해야만

한다. 하지만 스칼라의 퓨쳐는 블로킹이나 풀링을 사용하지 않고 함수결과를 조합할수 있으며

JAVA8의 CompletetableFuture<T>가 오히려 여기서 설명하는 퓨쳐와 유사하다.

Note

akka.net을 활용할 경우 asyn/await를 활용할수 있습니다. 

java9에도 async/await 가 결국 적용안되었다는 풍문...

비동기처리 언어 스펙을 사용해야하는 akka에서도 ask패턴의 사용방법이 나뉘게 됩니다.

c#java
Code Block
languagec#
themeEmacs
var result = await actor1.Ask("hello");



Code Block
languagejava
themeEmacs
final FiniteDuration duration = Duration.create(20, TimeUnit.SECONDS); 
Future<Object> future = Patterns .ask(asyncWorker,
  RequestWorkerMsgType.CHECK_FUTURE_STATE, new Timeout(duration)); 
ResponseOnSingeRequest response = (ResponseOnSingeRequest) Await .result(future, duration);


async/await에 비헤 future는 뭔가 불합리하게 많은 코드를 작성하는것으로 보인다.

...