定 價:¥79.00
作 者: | 霍丙乾 |
出版社: | 機(jī)械工業(yè)出版社 |
叢編項: | |
標(biāo) 簽: | 暫缺 |
ISBN: | 9787111655916 | 出版時間: | 2020-07-01 | 包裝: | |
開本: | 16開 | 頁數(shù): | 236 | 字?jǐn)?shù): |
●前言
●第1章 異步程序設(shè)計介紹 1
1.1 異步的概念 1
1.1.1 程序的執(zhí)行 1
1.1.2 異步與回調(diào) 2
1.1.3 回調(diào)地獄 3
1.2 異步程序設(shè)計的關(guān)鍵問題 4
1.2.1 結(jié)果傳遞 4
1.2.2 異常處理 6
1.2.3 取消響應(yīng) 8
1.2.4 復(fù)雜分支 9
1.3 常見異步程序設(shè)計思路 10
1.3.1 Future 11
1.3.2 CompletableFuture 11
1.3.3 Promise與async/await 13
1.3.4 響應(yīng)式編程 15
1.3.5 Kotlin協(xié)程 15
1.4 本章小結(jié) 17
●第2章 協(xié)程的基本概念 18
2.1 協(xié)程究竟是什么 18
2.2 協(xié)程的分類 20
2.2.1 按調(diào)用棧分類 20
2.2.2 按調(diào)度方式分類 22
2.3 協(xié)程的實現(xiàn)舉例 22
2.3.1 Python的Generator 23
2.3.2 Lua標(biāo)準(zhǔn)庫的協(xié)程實現(xiàn) 24
2.3.3 Go的go routine 27
2.4 本章小結(jié) 30
●第3章 Kotlin協(xié)程的基礎(chǔ)設(shè)施 31
3.1 協(xié)程的構(gòu)造 31
3.1.1 協(xié)程的創(chuàng)建 32
3.1.2 協(xié)程的啟動 32
3.1.3 協(xié)程體的Receiver 34
3.1.4 可掛起的main函數(shù) 36
3.2 函數(shù)的掛起 37
3.2.1 掛起函數(shù) 37
3.2.2 掛起點 38
3.2.3 CPS變換 39
3.3 協(xié)程的上下文 41
3.3.1 協(xié)程上下文的集合特征 41
3.3.2 協(xié)程上下文元素的實現(xiàn) 42
3.3.3 協(xié)程上下文的使用 43
3.4 協(xié)程的攔截器 45
3.4.1 攔截的位置 45
3.4.2 攔截器的使用 46
3.4.3 攔截器的執(zhí)行細(xì)節(jié) 47
3.5 Kotlin協(xié)程所屬的類別 48
3.5.1 調(diào)用棧的廣義和狹義 48
3.5.2 調(diào)度關(guān)系的對立與統(tǒng)一 49
3.6 本章小結(jié) 50
●第4章 Kotlin協(xié)程的拓展實踐 51
4.1 序列生成器 51
4.1.1 仿Python的Generator實現(xiàn) 52
4.1.2 標(biāo)準(zhǔn)庫的序列生成器介紹 56
4.2 Promise模型 57
4.2.1 async/await與suspend的設(shè)計對比 58
4.2.2 仿JavaScript的async/await實現(xiàn) 59
4.3 Lua風(fēng)格的協(xié)程API 61
4.3.1 非對稱API實現(xiàn) 61
4.3.2 對稱API實現(xiàn) 67
4.4 再談協(xié)程的概念 72
4.4.1 簡單協(xié)程與復(fù)合協(xié)程 73
4.4.2 復(fù)合協(xié)程的實現(xiàn)模式 73
4.5 本章小結(jié) 74
●第5章 Kotlin協(xié)程框架開發(fā)初探 75
5.1 開胃菜:實現(xiàn)一個delay函數(shù) 75
5.2 協(xié)程的描述 77
5.2.1 協(xié)程的描述類 78
5.2.2 協(xié)程的狀態(tài) 79
5.2.3 支持回調(diào)的狀態(tài) 80
5.2.4 協(xié)程的初步實現(xiàn) 83
5.3 協(xié)程的創(chuàng)建 84
5.3.1 無返回值的launch 84
5.3.2 實現(xiàn)invokeOnCompletion 85
5.3.3 實現(xiàn)join 89
5.3.4 有返回值的async 90
5.4 協(xié)程的調(diào)度 92
5.4.1 協(xié)程的執(zhí)行調(diào)度 92
5.4.2 協(xié)程的調(diào)度位置 93
5.4.3 協(xié)程的調(diào)度器設(shè)計 93
5.4.4 基于線程池的調(diào)度器 94
5.4.5 基于UI事件循環(huán)的調(diào)度器 96
5.4.6 為協(xié)程添加默認(rèn)調(diào)度器 97
5.5 協(xié)程的取消 98
5.5.1 完善協(xié)程的取消邏輯 98
5.5.2 支持取消的掛起函數(shù) 100
5.5.3 CancellableContinuation的實現(xiàn) 103
5.5.4 改造掛起函數(shù) 106
5.6 協(xié)程的異常處理 109
5.6.1 定義異常處理器 110
5.6.2 處理協(xié)程的未捕獲異常 111
5.6.3 區(qū)別對待取消異常 111
5.6.4 異常處理器的運(yùn)用 113
5.7 協(xié)程的作用域 113
5.7.1 作用域的概念 113
5.7.2 作用域的聲明 114
5.7.3 建立父子關(guān)系 116
5.7.4 頂級作用域 116
5.7.5 協(xié)同作用域 117
5.7.6 suspend fun main的作用域 119
5.7.7 實現(xiàn)異常的傳播 120
5.7.8 主從作用域 121
5.7.9 完整的異常處理流程 122
5.7.10 父協(xié)程等待子協(xié)程完成 122
5.8 本章小結(jié) 123
●第6章 Kotlin協(xié)程的官方框架 124
6.1 協(xié)程框架概述 124
6.1.1 框架的構(gòu)成 124
6.1.2 協(xié)程的啟動模式 126
6.1.3 協(xié)程的調(diào)度器 127
6.1.4 協(xié)程的全局異常處理器 129
6.1.5 協(xié)程的取消檢查 130
6.1.6 協(xié)程的超時取消 132
6.1.7 禁止取消 133
6.2 熱數(shù)據(jù)通道Channel 134
6.2.1 認(rèn)識Channel 134
6.2.2 Channel的容量 136
6.2.3 迭代Channel 138
6.2.4 produce和actor 138
6.2.5 Channel的關(guān)閉 140
6.2.6 BroadcastChannel 142
6.2.7 Channel版本的序列生成器 144
6.2.8 Channel的內(nèi)部結(jié)構(gòu) 146
6.3 冷數(shù)據(jù)流Flow 148
6.3.1 認(rèn)識Flow 149
6.3.2 對比RxJava的線程切換 150
6.3.3 冷數(shù)據(jù)流 151
6.3.4 異常處理 151
6.3.5 末端操作符 153
6.3.6 分離Flow的消費(fèi)和觸發(fā) 153
6.3.7 Flow的取消 154
6.3.8 其他Flow的創(chuàng)建方式 155
6.3.9 Flow的背壓 155
6.3.10 Flow的變換 157
6.4 多路復(fù)用select 158
6.4.1 復(fù)用多個await 158
6.4.2 復(fù)用多個Channel 160
6.4.3 SelectClause 161
6.4.4 使用Flow實現(xiàn)多路復(fù)用 161
6.5 并發(fā)安全 163
6.5.1 不安全的并發(fā)訪問 163
6.5.2 協(xié)程的并發(fā)工具 164
6.5.3 避免訪問外部可變狀態(tài) 165
6.6 本章小結(jié) 166
●第7章 Kotlin協(xié)程在Android上的應(yīng)用 167
7.1 Android上的異步問題 167
7.2 協(xié)程對UI的支持 173
7.3 常見框架的協(xié)程擴(kuò)展 177
7.4 本章小結(jié) 184
●第8章 Kotlin協(xié)程在Web服務(wù)中的應(yīng)用 185
8.1 多任務(wù)并發(fā)模型 185
8.2 協(xié)程在多任務(wù)模型中的運(yùn)用 190
8.3 常見Web應(yīng)用框架的協(xié)程擴(kuò)展 193
8.4 本章小結(jié) 203
●第9章 Kotlin協(xié)程在其他平臺上的應(yīng)用 204
9.1 Kotlin-Js 204
9.2 Kotlin-Native 212
9.3 本章小結(jié) 221