高性能Scala

高性能Scala

《高性能Scala》 一書原作者Vincent Theron(文森特·西倫) 、Michael Diamant(麥可·迪亞芒),中文版由楊雲、廖光明譯,電子工業出版社2017年5月出版

內容提要

Scala 是一種表達能力非常強的語言,能夠用非常簡潔的代碼表達豐富的業務含義。為了在生產上充分發揮Scala 的能力,除了掌握其簡潔的語法外,理解Scala 在性能上的特點和最佳化點也是非常重要的事。

《高性能Scala》通過解析一個金融領域高頻交易的實際例子,引領讀者掌握如何對Scala 程式(以及一般JVM 程式)進行基準測試和性能分析,從而找出瓶頸。隨後作者介紹了Scala 語言、Scala 標準庫(尤其是集合庫)以及Scalaz 庫里解決相應瓶頸的各種技巧。並行計算和分散式架構作為性能調優的重要手段,更是《高性能Scala》的重中之重,作者對Scala 的並行計算和分散式架構中存在的問題都進行了充分的討論和講解,非常值得學習。

《高性能Scala》適合已經具有Scala 編程基礎、能夠較好地使用Scala 風格代碼實現業務功能的程式設計師,作為在性能最佳化方面的深造閱讀資料。

目錄

前言iX

1 高性能之路 1

-性能的定義2

- - 高性能軟體2

- - 硬體資源 3

- - 時延和吞吐率 4

- - 瓶頸5

-性能總結 5

- - 平均數的問題 6

- - 百分位數來救場 8

-指標蒐集 9

- - 用基準數據(benchmark)來衡量性能. 9

- - 通過Profiling 來定位瓶頸 10

- - 結合基準測試和profiling 10

-案例分析 11

-工具鏈11

-小結 12

2 在JVM 上度量性能13

-金融領域一瞥13

-意外的市場波動毀掉了利潤16

-重現故障 17

- - 吞吐量基準測試 17

- - 時延基準測試20

- - 定位瓶頸 25

- - 微基準取得大進步 42

-小結 49

3 釋放Scala 的性能 51

-值類 52

- - 位元組碼錶示 52

- - 性能考慮 54

- - 標記類型——值類的一種替代品 55

-專門化57

位元組碼錶示 58

性能考慮 60

-元組 65

- - 位元組碼錶示 65

- - 性能考慮 66

-模式匹配 68

- - 位元組碼錶示 68

- - 性能考慮 70

-尾遞歸75

- - 位元組碼錶示 78

- - 性能考慮 79

-Option 數據類型 83

- - 位元組碼錶示 83

- - 性能考慮 84

-案例研究——性能更高的Option 85

-小結 89

4 探索集合API 91

-高吞吐量系統 - 改進指令簿 91

- - 理解過去實現上的折中 - list 實現 92

- - 當前的指令簿 - queue 實現 101

- - 通過惰性計算來提升取消操作的性能104

-歷史數據分析 114

- - 滯後時序收益率(lagged time series returns) 114

- - 處理多個收益率序列 122

-小結 127

5 惰性集合及事件溯源 129

-提升用戶報表生成速度129

- - 深入報表生成代碼 130

- - 使用視圖提速報表生成133

- - 視圖的注意事項141

- - 打包報表生成結果 145

-重新思考報表架構 146

- - Stream 概覽 149

- - 事件變換152

- - 構建事件源管道158

- - 馬爾可夫流式鏈162

- - 流的注意事項 166

-小結 169

6 Scala 的並發 171

-並行回測(backtesting)策略 171

- - 探索Future 173

- - Future 和crazy ideas 177

- - Future 使用時的考量 179

- - 提交執行妨礙性能 185

-處理阻塞調用和回調 188

- - ExecutionContext 和阻塞調用 189

- - 用Promise 轉化回調 193

-受命進一步提升回測性能 196

- - 介紹Scalaz Task 197

- - 用Task 為交易日模擬建模 204

- - 總結回測209

-小結 210

7 高性能架構 211

-分散式自動化交易員(Distributed automated traders) 211

- - 分散式架構概述212

- - 第一次嘗試分散式自動化交易系統 212

- - 引入CRDT 214

- - CRDT 和自動化交易系統219

- - 當餘額不足時 220

-免費交易策略性能提升222

- - 為交易策略做基準測試222

- - 無界佇列(unbounded queue)的危險225

- - 套用背壓(back pressure)226

- - 套用負載控制策略 227

- - Free monad 233

-小結 240

相關詞條

相關搜尋

熱門詞條

聯絡我們