作者简介 Vincent Theron是一个拥有 9年工作经验的专业软件工程师。他在 6年前发现了 Scala并将之应用于构建高伸缩性、高可靠的应用。他在多个行业设计软件来解决商业上的问题,包括在线博彩、金融交易,以及昀近的广告行业。在巴黎东部 Marne-la-Vallée,Vincent获得了计算机科学及软件工程硕士学位。他和妻子、孩子以及两只毛茸茸的猫一起在波士顿区域生活。 感谢在 Packt出版社的每一个人,是你们的努力工作才能让这本书面世。感谢柴塔尼亚-耐尔,带着这个出书项目找到我。感谢 Nikhil Borkar,一路上给我提供指引。感谢 Michael Diamant,我的合作作者,我的同事,同时也是朋友,感谢你给这本书带来的知识以及充满灵感的每。感谢我的父母,感谢你们的爱和支持,以及你们给我买的靠前台电脑。昀后,感谢我的妻子,Julie,感谢你一直的鼓励,感谢你给了我一个这么绝妙的儿子。 Michael Diamant是一个专业的软件工程师,热衷于函数式编程。他在 2009年开始自己的事业,专注于 Java和面向对象的编程范式。在 2011年学习 Scala之后,他专注于使用 Scala和函数式编程范式来构建金融交易和广告领域的软件系统。迈尔毕业于伍斯特理工学院,居住在波士顿区域。 我能在这本书里面分享的知识来源于他人在我一生中给予的支持和教导。我想要特别感谢我的同事文森特,感谢你推动我付出这些努力,感谢所有在一起的时间,让我们可以发展这些书中的想法。我所有的现在和之前的同事都帮助我提高了工程技术,没有你们慷慨地分享你们的所学,我将不可能编写这本书。除了Vincent,我还想特别提及一些我觉得尤其想感谢的同事:Dave Stevens、Gary Malouf、Eugene Kolnick和 Johnny Everson。感谢我的父母和兄弟,你们支持我,将我培养成现在的我。我尤其想深深地感谢我的女友 Anna在整个写书过程中给予我的支持。昀后,同样的感谢送给 Packt出版社,在你们的帮助下我们写了我们的靠前本书。 目录 前言\tiX 1 高性能之路\t1 性能的定义\t2 高性能软件\t2 硬件资源\t3 时延和吞吐率\t4 瓶颈\t5 性能总结\t5 平均数的问题\t6 百分位数来救场\t8 指标搜集\t9 用基准数据(benchmark)来衡量性能\t9 通过Profiling来定位瓶颈\t10 结合基准测试和profiling\t10 案例分析\t11 工具链\t11 小结\t12 2 在JVM上度量性能\t13 金融领域一瞥\t13 意外的市场波动毁掉了利润\t16 重现故障\t17 吞吐量基准测试\t17 时延基准测试\t20 定位瓶颈\t25 微基准取得大进步\t42 小结\t49 3 释放Scala的性能\t51 值类\t52 字节码表示\t52 性能考虑\t54 标记类型――值类的一种替代品\t55 专门化\t57 字节码表示\t58 性能考虑\t60 元组\t65 字节码表示\t65 性能考虑\t66 模式匹配\t68 字节码表示\t68 性能考虑\t70 尾递归\t75 字节码表示\t78 性能考虑\t79 Option数据类型\t83 字节码表示\t83 性能考虑\t84 案例研究――性能更高的Option\t85 小结\t89 4 探索集合API\t91 高吞吐量系统 - 改进指令簿\t91 理解过去实现上的折中 - list实现\t92 当前的指令簿 - queue实现\t101 通过惰性计算来提升取消操作的性能\t104 历史数据分析\t114 滞后时序收益率(lagged time series returns)\t114 处理多个收益率序列\t122 小结\t127 5 惰性集合及事件溯源\t129 提升用户报表生成速度\t129 深入报表生成代码\t130 使用视图提速报表生成\t133 视图的注意事项\t141 打包报表生成结果\t145 重新思考报表架构\t146 Stream概览\t149 事件变换\t152 构建事件源管道\t158 马尔可夫流式链\t162 流的注意事项\t166 小结\t169 6 Scala的并发\t171 并行回测(backtesting)策略\t171 探索Future\t173 Future和crazy ideas\t177 Future使用时的考量\t179 提交执行妨碍性能\t185 处理阻塞调用和回调\t188 ExecutionContext和阻塞调用\t189 用Promise转化回调\t193 受命进一步提升回测性能\t196 介绍Scalaz Task\t197 用Task为交易日模拟建模\t204 总结回测\t209 小结\t210 7 高性能架构\t211 分布式自动化交易员(Distributed automated traders)\t211 分布式架构概述\t212 次尝试分布式自动化交易系统\t212 引入CRDT\t214 CRDT和自动化交易系统\t219 当余额不足时\t220 免费交易策略性能提升\t222 为交易策略做基准测试\t222 无界队列(unbounded queue)的危险\t225 应用背压(back pressure)\t226 应用负载控制策略\t227 Free monad\t233 小结\t240 内容推荐 Scala是一种表达能力非常强的语言,能够用非常简洁的代码表达丰富的业务含义。为了在生产上充分发挥Scala的能力,除了掌握其简洁的语法外,理解Scala在性能上的特点和优化点也是非常重要的事。本书通过解析一个金融领域高频交易的实际例子,引领读者掌握如何对Scala程序(以 |