use*_*172 8 jvm asynchronous scala akka
我参加了一个关于Async(https://github.com/scala/async)的一个非常有趣的讲座,一个新的Scala库,我不确定Akka和Async是如何区别的.
我是Scala的新手,如果答案显而易见,请道歉.
谢谢.
小智 19
Async简化了异步和并发编程.Async支持以熟悉的直接样式使用非阻塞API进行编程.直接式代码与阻塞代码一样简单,但它具有高效非阻塞代码的所有优点.
开箱即用,Async使Scala的未来编程变得更加方便.实际上,通过将Async与future结合使用,您易于阅读的直接式代码将转换为高效的非阻塞代码.Async也可以连接到其他API(见下文).
Akka提供了编程模型和运行时,以简化并发,分发和容错.Async不提供运行时 - 它使现有的抽象和它们的运行时更容易使用.但是,Async和Akka可以通过几种重要方式协同工作:
使用Akka的"ask"模式,使用"?"发送消息 回归未来.Async可以轻松处理这些未来.
Async可以连接到Scala的Futures API以外的API.这开辟了有趣的方法来利用Async来简化Akka actor的编程.这是我们将在不久的将来在Typesafe探索的一个领域.
Async是Akka数据流API的替代品,它更简单,更强大.异步更简单,因为它不会引入源自Scala的CPS插件的复杂类型.Async更加健壮,因为它与模式匹配和try-catch等功能很好地配合使用,CPS/Akka的数据流API并不完全支持这些功能.此外,明确指出了Async不能使用的地方(await不能出现在闭包内,嵌套类/特征/对象或按名称参数).
有关更多异步示例和文档,请参阅我最近关于Async的讨论以及Async项目网站上的文档.
Async只是添加了有用的API(和其他一些好的内部事物)来处理Future并且与Actor模型无关,而Akka是一个用Actors创建大规模分布的框架.它们有不同的用例,没有任何共同之处.将Async与Scala/Akka Futures API进行比较更为正确.我对Async没有多少经验,但重点是,你有两个结构async和await.Async标记一个包含一个或多个await调用的异步代码块,它标记计算将暂停的点,直到等待的Future完成.可以将这种API与使用map和的标准方式进行比较flatmap.
使用标准API(用于构造转换为map和的组合flatmap):
def slowCalcFuture: Future[Int] = ...
val future1 = slowCalcFuture
val future2 = slowCalcFuture
def combined: Future[Int] = for {
r1 <- future1
r2 <- future2
} yield r1 + r2
Run Code Online (Sandbox Code Playgroud)
和异步:
def slowCalcFuture: Future[Int] = ...
def combined: Future[Int] = async {
val future1 = slowCalcFuture
val future2 = slowCalcFuture
await(future1) + await(future2)
}
Run Code Online (Sandbox Code Playgroud)