2009-09-04 3 views

답변

13

사용 scala.actors.Future :

import actors._ 

def asyncify[A, B](f: A => B): A => Future[B] = (a => Futures.future(f(a))) 

// normally blocks when called 
def sleepFor(seconds: Int) = { 
    Thread.sleep(seconds * 1000) 
    seconds 
} 

val asyncSleepFor = asyncify(sleepFor) 
val future = asyncSleepFor(5) // now it does NOT block 
println("waiting...")   // prints "waiting..." rightaway 
println("future returns %d".format(future())) // prints "future returns 5" after 5 seconds 

하나 개 이상의 매개 변수가 연습 문제로 남겨과 기능을한다 "asyncify"오버로드되었습니다.

그러나 하나의 경고는 예외 처리입니다. "asyncified"되고있는 함수는 모든 예외를 잡아서 처리해야합니다. 함수에서 throw 된 예외에 대한 동작은 정의되지 않습니다.

2

"차단 중"의 정의에 따라 다릅니다. 엄밀히 말하자면 잠금 장치를 획득해야하는 모든 항목이 차단됩니다. 액터의 내부 상태에 의존하는 모든 연산은 액터의 잠금을 얻습니다. 여기에는 메시지 전송이 포함됩니다. 많은 스레드가 한 번에 한 액터에 메시지를 보내려고하면 그들은 줄을서야합니다.

그래서 비 차단이 필요한 경우 java.util.concurrent에 다양한 옵션이 있습니다.

실용적인 관점에서 볼 때 액터는 동기화 된 작업으로 상당한 양의 작업을 수행하지 않으므로 넌 블로킹에 충분히 근접한 무언가를 제공하므로 액터가 사용자의 필요를 충족시킬 가능성이 있습니다.

1

나는 미래에 관한 나의 블로그에 대해 아주 철저한 설명을하고있다. 실제로 선물을 직접 구현할 수있는 방법을 보여주기 때문에 주제에 대해 매우 잘 이해할 수 있습니다. 나는 당신이 그것을 읽을 제안 :

http://vigtig.it/blog/?p=73

커피를 가져와!

관련 문제