미래와 약속의 차이점은 무엇입니까? (Akka와 Gpars에서)
그들은 나에게 블록과 같게 보이고 get이 호출 될 때 미래의 가치를 반환하며 약속은 미래의 결과를 얻는 것입니다.
미래와 약속의 차이점은 무엇입니까? (Akka와 Gpars에서)
그들은 나에게 블록과 같게 보이고 get이 호출 될 때 미래의 가치를 반환하며 약속은 미래의 결과를 얻는 것입니다.
답변:
저는 Gpars 나 Akka / Java에 익숙하지 않기 때문에 Akka / Scala에 대해 이야기하겠습니다.
표준 분포에 Akka의 관련 부분을 포함하는 Scala 2.10에서 a Future
는 기본적으로 아직 계산되지 않은 값에 대한 읽기 전용 참조입니다. A Promise
도 쓸 수 있다는 점을 제외 하면 거의 동일합니다 . 다시 말해, Future
s와 Promise
s 모두에서 읽을 수 있지만 s에만 쓸 수 있습니다 Promise
. 메소드를 호출하여 Future
a와 연관 시킬 수 있지만 다른 방향으로의 변환은 불가능합니다 (무의미한 것이기 때문에).Promise
future
wikipedia에 따르면 , 그것들은 같은 개념입니다 :
컴퓨터 과학에서 미래, 약속 및 지연은 일부 동시 프로그래밍 언어에서 동기화하는 데 사용되는 구조를 말합니다. 그것들은 초기에 알려지지 않은 결과에 대한 프록시 역할을하는 객체를 설명합니다. 보통 그 값의 계산이 아직 불완전하기 때문입니다.
어떤 도서관은 그것들을 한 방향으로 부르기로 선택할 수도 있고 어떤 도서관은 다른 방향으로 부르기를 선택할 수도 있습니다. 그리고 매번 다른 맛으로 구현 될 수 있습니다. 일부 라이브러리는 다른 동의어를 구별하기 위해 이러한 동의어를 사용하도록 선택할 수 있습니다. 나는 이것이 잘못된 선택이라고 주장하지만 (명백히 사람들을 혼란스럽게하기 때문에) 이 링크 는 스칼라 에서이 일반적인 관행을 암시합니다.
@ Ptharien 's Flame이 제안한 것처럼 Scala a Future
는 읽기 전용 작업이며 a Promise
는 작업에 대한 결과 (또는 실패)를 생성하는 기능을 제공합니다.
Promise
따라서 A 는 결과를 전파하기 위해 작업을 수행하는 코드에서 가장 잘 사용되며 a Future
는 결과 를 클라이언트 코드에 노출하는 데 사용되며 결과적으로 결과를 기다립니다. 그러나이 차이는 스칼라에 따라 다르며 외부인을 혼동 할 수 있습니다.
자바에서 미래의 수많은 미래와 함께 일하고 있지만 스칼라 / 아카카 개발에 대한 배경 지식을 가지고 있기 때문에 여기에 조금 추가 할 것입니다. 이 답변은 대부분 말한 내용을 복제하지만 오늘날 JVM에서 널리 사용되는 과다한 구현을 지적합니다.
첫째, 독창적 인 포스터에는 get 및 blocking 사용에 대한 언급이 있습니다. 절대 테스트 외부에서 수행하지 마십시오.
현재 역할에서 FP 및 동시성 개념을 가르 칠 때, 약속 또는 미래 API의 소비자로서 개발자는 의미 적으로 약속과 미래가 동의어라고 학생에게 이야기합니다. 의미 적 차이-IO를 차단하지 않고 처리하는 메커니즘 만 해당합니다.
미래가 완성 될 수없고 약속이 (예를 들어 스칼라 / 아카 / 플레이 API와 같이) 너무 단순하다고 말하기 위해서는 :
어떤 선물을 완료 할 수 Java8 이제 표준 라이브러리에 CompletableFuture을 소개합니다.
일부 약속을 완료 할 수 없습니다 약속이 성취 될 수없는 플레이 약속 API에 유사하지만, 그렇게 재생할 수있는 RedeemablePromise 다른 의미 소개 - 형태 보증 된 우산 아래에있는 동안에도. 또한 Play promise API는 (F.Promise.wrap (future) 또는 promise.wrapped ()) 양방향으로 스칼라 선물로 전환 할 수 있습니다.
Java8에서 Typesafe 기술을 사용하면 하나의 API가 선호되기 때문에 종종 선물 / 약속을 오가는 경우가 많습니다 (Play Promise API는 Java8 람다에서 더 좋아 보입니다). Akka + Play + Java8에서는 Actors에서 선물을 가져 와서 약속으로 묶고 콜백을 작성하고 컨트롤러에서 반환합니다.
따라서 제가 가르 칠 때 사람들에게 말할 때 약속과 미래는 다소 동의어입니다.