- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Twitter标准库
Twitter标准库 Twitter最重要的标准库是 Util 和 Finagle 。Util 可以理解为Scala和Java的标准库扩展, 提供了标准库中没有的功能或已有功能的更合适的 现。Finagle 是我们的RPC系统, 核⼼分布式系统组件。 Future Futures已经在并发⼀节中简单讨论过。它是调异步处理的中⼼机制,渗透在我们代码 库中,也是Finagle的核⼼。Futures允许组合并发事件,简化了⾼并发操作。也是JVM 上异步并发的⼀种⾼效的 现。 Twitter 的future是异步的,所以基本上任何操作(阻塞操作) ——基本上任何可以suspend 它的线程的执⾏;⽹络I 和磁盘I 是就是例⼦——必须由系统处理,它为结果提供 future 。Finagle为⽹络I 提供了这样⼀种系统。 Futures清晰简单:它们持有⼀个尚未完成运算结果的 promise 。它们是⼀个简单的容 器——⼀个占位符。⼀次计算当然可能会失败,这种状况必须被编码:⼀个Future可 以是三种状态之⼀: pending , failed , completed 。 闲话: 组合(composition) 让我们重新审视我们所说的组合:将简单的组件合成⼀个更复杂的。函数组合的⼀个 权威的例⼦:给定函数 f 和 g ,组合函数 (g∘f)(x) = g(f(x)) ——结果先对 x使⽤f函数, 然后在使⽤g函数——⽤Scala来写: val f = (i: Int) = i.toString val g = (s: String) = s+s+s val h = g compose f // : Int = String scala h(123) res0: ava.lang.String = 123123123 复合函数h ,是个新的函数,由之前定义的f和g函数合成。 Futures是⼀种集合类型——它是个包含0或1个元素的容器——你可以发现他们有标准 的集合⽅法 (eg :map , filter , foreach )。因为Future的值是延迟的,结果应⽤这些⽅法 中的任何⼀种必然也延迟;在 val result: Future[Int] val resultStr: Future[String] = result map { i = i.toString } 函数 { i = i .toString } 不会被调⽤,直到int值可⽤;转换集合的resultStr在可⽤之前也 ⼀直是待定状态。 List可以被扁平化(flattened) : val listOfList: List[List[Int]] = .. val list: List[Int] = listOfList.flatten 这对future也是有意义的: val futureOfFuture: Future[Future[Int]] = .. val future: Future[Int] = futureOfFuture.flatten 因为future是延迟的,flatten的 现——⽴即返回——不得不返回⼀个等待外部future (**Future[**Future[Int]**]**) 完成的future (Future[**Future[Int]**]) .如果外部future失败,内部flattened future也将失败。 Future (类似List) 也定义了flatMap ;Future[A] 定义⽅法flatMap 的签名 flatMap[B](f: A = Future[B]): Future[B] 如同组合 map 和 flatten ,我们可以这样 现: def flatMap[B](f: A = Future[B]): Future[B] = { val mapped: Future[Future[B]] = this map f val flattened: Future[B] = mapped.flatten flattened } 这是⼀种有威⼒的组合 !使⽤flatMap我们可以定义⼀个 Future 作为两个Future序列的 结果。第⼆个future 的计算基于第⼀个的结果。想象我们需要2次RPC调⽤来验证⼀个 ⽤户⾝份,我们可以⽤下⾯的⽅式组合操作: def getUser(id: Int): Future[User] def authenticate(use
文档评论(0)