Kotlin进阶必读:深入理解Kotlin协程

 

新书速递

 Kotlin协程现在是一个很大的麻烦,国内外都没有很好的资料,官方文档又过于精练,不太适合大家入门和进阶。今天为大家推荐一本新书《深入理解Kotlin协程》,作者是Kotlin先驱和布道师霍丙乾。

本书基于Kotlin v1.3.61来讲解Kotlin协程的基本概念、实现原理和实践技巧。从异步程序的设计入手,探讨异步程序设计中要面对的关键问题,并在之后围绕这几个关键问题对Kotlin协程的设计实现展开探讨。

在剖析Kotlin协程的过程中,这本书除介绍API的基本用法以外,还提供了使用Kotlin协程设计实现各类复合协程API的思路和方法,并抽象出一套系统的设计思路,通过CoroutineLite这个项目的设计实现,帮助大家深入了解官方协程框架的内部运行机制。

在帮助读者掌握Kotlin协程内部原理的同时,本书还从Android、Web应用和多平台等角度提供了实践思路,帮助读者做到在原理上深入浅出,在实战中融会贯通。

为了方便内容的展开,在探讨的过程中本书也对一些概念明确进行了定义和归纳,例如简单协程、复合协程、协程体等。

 

这本书适用于有一定基础的Kotlin开发者,包括但不限于正在使用和希望使用Kotlin开发Android、Web服务、iOS、前端等应用的开发者。

 

内容简介

这是一部从工作机制、实现原理、应用场景、使用方法、实践技巧、标准库、框架、应用案例等多个维度全面讲解Kotlin协程的专著,它同时提供了多语言视角,亦可通过本书了解其他语言的协程。

全书共9章:

  • 第1章从协程的核心应用场景——异步程序设计的思路和关键问题切入,引出Kotlin协程的概念;

  • 第2章首先介绍了协程的概念、分类,然后讲解了Python、Lua、Go等不同语言的协程实现和对比;

  • 第3~4章以 Kotlin 标准库的协程 API 为核心,讲解了简单协程的使用方法和运行机制,以及通过简单协程设计和实现复合协程的思路和方法;

  • 第5~6章以Kotlin的官方协程框架为模板,通过逐步实现其中的核心功能,分析了其中的实现细节和复合协程的运行机制,并对框架的使用做了深入探讨;

  • 第7~8章讲解了协程在Android应用开发和Web服务开发中的应用场景、面临的挑战,以及解决各种常见问题的方法和思路;

  • 第9章探讨了JavaScript 和 Native等非JVM平台对协程的支持情况,以及协程在这些平台上的应用。

 

作者简介

霍丙乾(Bennyhuo)毕业于北京邮电大学,现任腾讯地图数据采集研发中心团队移动客户端技术负责人。

资深Kotlin技术专家,国内知名的Kotlin开发者和布道师。

2016年10月创建微信公众号Kotlin,持续发布Kotlin相关的文章和教学视频,颇受欢迎。

2017年初开始参与Kotlin中文相关网站的翻译和维护至今。

 

专家推荐

Kotlin包含很多现代高级语言的特性,Kotlin协程针对并发编程的痛点给出了解决方案。感谢丙乾能撰写一本关于协程的专著。这本书的内容不简单,但值得各位读者深入学习。

——邓凡平 资深Android技术专家 /“深入理解Android”系列丛书作者

 

在国内Kotlin的布道者中,“Bennyhuo”这个ID如雷贯耳。本书介绍了Kotlin协程在各个领域的实际应用,提供了很多工程应用上的思路。同时,本书更进一步讲解了协程背后的实现机制,以及不同语言协程之间的异同,是Kotlin编程进阶的必读书。

——Jilen 《Kotlin核心编程》作者 / 水滴技术团队

 

霍老师是国内 Kotlin 编程的先驱,是首屈一指的 Kotlin 专家。本书内容由简入繁,搭配精练的图表,不仅介绍了理论,而且通过大量示例讲解了各种实战场景,一定能帮助读者深入理解Kotlin协程。不论你是Kotlin的初学者,还是已经有一定的Kotlin基础,如果想系统学习协程,这本大作绝对是必读经典。

——范圣佑 JetBrains技术布道师

 

本书作者是国内深入研究Kotlin的开发者之一,也是国内有影响力的Kotlin布道师,他的视频教程和原创文章都颇受欢迎。本书像作者之前的作品一样干货满满,更全面、更系统化,也更有深度,会引领读者深入理解协程乃至异步程序设计的用法、原理与编程思想。

——贾彦伟 Kotlin中文站负责人

目录

●前言

●第1章 异步程序设计介绍1

1.1 异步的概念1

1.1.1 程序的执行1

1.1.2 异步与回调2

1.1.3 回调地狱3

1.2 异步程序设计的关键问题4

1.2.1 结果传递4

1.2.2 异常处理6

1.2.3 取消响应8

1.2.4 复杂分支9

1.3 常见异步程序设计思路10

1.3.1Future11

1.3.2CompletableFuture11

1.3.3Promise与async/await13

1.3.4 响应式编程15

1.3.5Kotlin协程15

1.4 本章小结17

 

●第2章 协程的基本概念18

2.1 协程究竟是什么18

2.2 协程的分类20

2.2.1 按调用栈分类20

2.2.2 按调度方式分类22

2.3 协程的实现举例22

2.3.1Python的Generator23

2.3.2Lua标准库的协程实现24

2.3.3Go的go routine27

2.4 本章小结30

 

●第3章 Kotlin协程的基础设施31

3.1 协程的构造31

3.1.1 协程的创建32

3.1.2 协程的启动32

3.1.3 协程体的Receiver34

3.1.4 可挂起的main函数36

3.2 函数的挂起37

3.2.1 挂起函数37

3.2.2 挂起点38

3.2.3CPS变换39

3.3 协程的上下文41

3.3.1 协程上下文的集合特征41

3.3.2 协程上下文元素的实现42

3.3.3 协程上下文的使用43

3.4 协程的拦截器45

3.4.1 拦截的位置45

3.4.2 拦截器的使用46

3.4.3 拦截器的执行细节47

3.5Kotlin协程所属的类别48

3.5.1 调用栈的广义和狭义48

3.5.2 调度关系的对立与统一49

3.6 本章小结50

 

●第4章 Kotlin协程的拓展实践51

4.1 序列生成器51

4.1.1 仿Python的Generator实现52

4.1.2 标准库的序列生成器介绍56

4.2Promise模型57

4.2.1async/await与suspend的设计对比58

4.2.2 仿JavaScript的async/await实现59

4.3Lua风格的协程API61

4.3.1 非对称API实现61

4.3.2 对称API实现67

4.4 再谈协程的概念72

4.4.1 简单协程与复合协程73

4.4.2 复合协程的实现模式73

4.5 本章小结74

 

●第5章 Kotlin协程框架开发初探75

5.1 开胃菜:实现一个delay函数75

5.2 协程的描述77

5.2.1 协程的描述类78

5.2.2 协程的状态79

5.2.3 支持回调的状态80

5.2.4 协程的初步实现83

5.3 协程的创建84

5.3.1 无返回值的launch84

5.3.2 实现invokeOnCompletion85

5.3.3 实现join89

5.3.4 有返回值的async90

5.4 协程的调度92

5.4.1 协程的执行调度92

5.4.2 协程的调度位置93

5.4.3 协程的调度器设计93

5.4.4 基于线程池的调度器94

5.4.5 基于UI事件循环的调度器96

5.4.6 为协程添加默认调度器97

5.5 协程的取消98

5.5.1 完善协程的取消逻辑98

5.5.2 支持取消的挂起函数100

5.5.3CancellableContinuation的实现103

5.5.4 改造挂起函数106

5.6 协程的异常处理109

5.6.1 定义异常处理器110

5.6.2 处理协程的未捕获异常111

5.6.3 区别对待取消异常111

5.6.4 异常处理器的运用113

5.7 协程的作用域113

5.7.1 作用域的概念113

5.7.2 作用域的声明114

5.7.3 建立父子关系116

5.7.4 顶级作用域116

5.7.5 协同作用域117

5.7.6suspend fun main的作用域119

5.7.7 实现异常的传播120

5.7.8 主从作用域121

5.7.9 完整的异常处理流程122

5.7.10 父协程等待子协程完成122

5.8 本章小结123

 

●第6章 Kotlin协程的官方框架124

6.1 协程框架概述124

6.1.1 框架的构成124

6.1.2 协程的启动模式126

6.1.3 协程的调度器127

6.1.4 协程的全局异常处理器129

6.1.5 协程的取消检查130

6.1.6 协程的超时取消132

6.1.7 禁止取消133

6.2 热数据通道Channel134

6.2.1 认识Channel134

6.2.2Channel的容量136

6.2.3 迭代Channel138

6.2.4produce和actor138

6.2.5Channel的关闭140

6.2.6BroadcastChannel142

6.2.7Channel版本的序列生成器144

6.2.8Channel的内部结构146

6.3 冷数据流Flow148

6.3.1 认识Flow149

6.3.2 对比RxJava的线程切换150

6.3.3 冷数据流151

6.3.4 异常处理151

6.3.5 末端操作符153

6.3.6 分离Flow的消费和触发153

6.3.7Flow的取消154

6.3.8 其他Flow的创建方式155

6.3.9Flow的背压155

6.3.10Flow的变换157

6.4 多路复用select158

6.4.1 复用多个await158

6.4.2 复用多个Channel160

6.4.3SelectClause161

6.4.4 使用Flow实现多路复用161

6.5 并发安全163

6.5.1 不安全的并发访问163

6.5.2 协程的并发工具164

6.5.3 避免访问外部可变状态165

6.6 本章小结166

 

●第7章 Kotlin协程在Android上的应用167

7.1Android上的异步问题167

7.1.1 基于UI的异步问题分析167

7.1.2 “鸡肋”的AsyncTask169

7.1.3 “烫手”的回调169

7.1.4 “救世”的RxJava170

7.2 协程对UI的支持173

7.2.1UI调度器173

7.2.2 协程版AutoDispose174

7.2.3Lifecycle的协程支持176

7.3 常见框架的协程扩展177

7.3.1RxJava的扩展177

7.3.2 异步组件ListenableFuture179

7.3.3ORM框架Room180

7.3.4 图片加载框架coil181

7.3.5 网络框架Retrofit182

7.3.6 协程风格的对话框183

7.4 本章小结184

 

●第8章 Kotlin协程在Web服务中的应用185

8.1 多任务并发模型185

8.1.1 多进程的服务模型185

8.1.2 多线程的服务模型186

8.1.3 事件驱动与异步I/O186

8.2 协程在多任务模型中的运用190

8.2.1 协程与异步I/O191

8.2.2 协程与“轻量级线程”192

8.3 常见Web应用框架的协程扩展193

8.3.1Spring的响应式支持193

8.3.2Vert.x196

8.3.3Ktor199

8.4 本章小结203

 

●第9章 Kotlin协程在其他平台上的应用204

9.1Kotlin-Js204

9.1.1Kotlin-Js概述205

9.1.2Kotlin-Js上的协程209

9.2Kotlin-Native212

9.2.1Kotlin-Native概述212

9.2.2Kotlin-Native的协程支持218

9.3 本章小结221 

 

上下滑动查看

点击链接了解详情并购买




更多精彩回顾



书讯 | 7月书讯(下)| 宝藏新书助你“乘风破浪”书讯 | 7月书讯 (上)| 宝藏新书助你“乘风破浪”上新 | 周志华领衔撰写,历时4年,宝箱书问世!
书单 | 怎样成为一名真正的数据分析师?这份书单就是答案干货 | 【直播回放&PPT】复旦大学邱锡鹏教授:如何学习深度学习收藏 | 你以为在埋头生产口罩的霍尼韦尔,刚刚造出了全球最强量子计算机,性能超越谷歌


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值