gpt4 book ai didi

scala - Twitter Future 与 Scala Future 相比有哪些优势?

转载 作者:行者123 更新时间:2023-12-03 20:22:50 25 4
gpt4 key购买 nike

我知道 Scala Future 变得更好的很多原因。是否有任何理由改用 Twitter Future?除了事实 Finagle 使用它。

最佳答案

免责声明:我在 Twitter 上工作过 Future 实现。一点上下文,我们在 Scala 有一个“好的”实现 Future 之前就开始了我们自己的实现。 .

这是 Twitter Future 的功能:

  • 有些方法名称和 Twitter 的 Future 不同在同伴中有一些新的辅助方法。

  • 例如举个例子: Future.join(f1, f2)可以在异构 Future 类型上工作。
    Future.join(
    Future.value(new Object), Future.value(1)
    ).map {
    case (o: Object, i: Int) => println(o, i)
    }
    oi保留它们的类型,它们不会被转换为最不常见的父类(super class)型 Any .
  • 保证按顺序执行一个 onSuccess 链:
    例如。:
    f.onSuccess { 
    println(1) // #1
    } onSuccess {
    println(2) // #2
    }

  • #1 保证在 #2 之前执行
  • 线程模型有点不同。没有 ExecutionContext 的概念,在 Promise( future 的可变实现)中设置值的线程是执行 future 图中所有计算的线程。
    例如。:
    val f1 = new Promise[Int]
    f1.map(_ * 2).map(_ + 1)
    f1.setValue(2) // <- this thread also executes *2 and +1
  • 有一个中断/取消的概念。使用 Scala 的 Futures,信息只向一个方向流动,使用 Twitter 的 Futures,您可以通知生产者一些信息(不一定是取消)。实际上,它在 Finagle 中用于传播 RPC 的取消。因为 Finagle 还通过网络传播取消,并且因为 Twitter 拥有大量的请求粉丝,这实际上节省了大量工作。
    class MyMessage extends Exception

    val p = new Promise[Int]
    p.setInterruptHandler {
    case ex: MyMessage => println("Receive MyMessage")
    }

    val f = p.map(_ + 1).map(_ * 2)
    f.raise(new MyMessage) // print "Receive MyMessage"
  • 直到最近,Twitter 的 Future 还是唯一一个实现高效尾递归的方法(即,您可以拥有一个调用自身的递归函数,而不会炸毁您的调用堆栈)。它已在 Scala 2.11+ 中实现(我相信)。
  • 关于scala - Twitter Future 与 Scala Future 相比有哪些优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32987855/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com