新書推薦:
《
汗青堂丛书146·布鲁克王朝:一个英国家族在东南亚的百年统治
》
售價:HK$
91.8
《
人生是旷野啊
》
售價:HK$
72.8
《
甲骨文丛书· “安国之道”:英国的殖民情报系统及其在亚洲的扩张
》
售價:HK$
88.5
《
台北人(2024版)
》
售價:HK$
87.4
《
万千心理·成人情绪障碍跨诊断治疗的统一方案:应用实例
》
售價:HK$
132.2
《
让孩子更有力量:赋权型家庭教育指南
》
售價:HK$
67.0
《
白夜追凶(上下)
》
售價:HK$
109.8
《
财富、战争与智慧——二战股市风云录
》
售價:HK$
132.2
|
編輯推薦: |
(1)作者是腾讯的高级工程师,是Kotlin领域的先驱者、知名布道师、Kotlin领域的网红级专家
(2)本书从工作机制、实现原理、应用场景、使用方法、实践技巧、标准库、框架、应用案例等8个维度对Kotlin协程进行了全面讲解
|
內容簡介: |
内容简介
这是一部从工作机制、实现原理、应用场景、使用方法、实践技巧、标准库、框架、应用案例等多个维度全面讲解Kotlin协程的专著,它同时提供了多语言视角,亦可通过本书了解其他语言的协程。
本书作者是腾讯的的高级工程师,是国内Kotlin领域的先驱者和布道者,不仅在工程实践领域积累了丰富的经验,而且在Kotlin开发者社群里有广泛的影响力和号召力。
全书共9章:
第1章从协程的核心应用场景——异步程序设计的思路和关键问题切入,引出Kotlin协程的概念;
第2章首先介绍了协程的概念、分类,然后讲解了Python、Lua、Go等不同语言的协程实现和对比;
第3~4章以 Kotlin 标准库的协程 API 为核心,讲解了简单协程的使用方法和运行机制,以及通过简单协程设计和实现复合协程的思路和方法;
第5~6章以Kotlin的官方协程框架为模板,通过逐步实现其中的核心功能,分析了其中的实现细节和复合协程的运行机制,并对框架的使用做了深入探讨;内容简介
这是一部从工作机制、实现原理、应用场景、使用方法、实践技巧、标准库、框架、应用案例等多个维度全面讲解Kotlin协程的专著,它同时提供了多语言视角,亦可通过本书了解其他语言的协程。
本书作者是腾讯的的高级工程师,是国内Kotlin领域的先驱者和布道者,不仅在工程实践领域积累了丰富的经验,而且在Kotlin开发者社群里有广泛的影响力和号召力。
全书共9章:
第1章从协程的核心应用场景——异步程序设计的思路和关键问题切入,引出Kotlin协程的概念;
第2章首先介绍了协程的概念、分类,然后讲解了Python、Lua、Go等不同语言的协程实现和对比;
第3~4章以 Kotlin 标准库的协程 API 为核心,讲解了简单协程的使用方法和运行机制,以及通过简单协程设计和实现复合协程的思路和方法;
第5~6章以Kotlin的官方协程框架为模板,通过逐步实现其中的核心功能,分析了其中的实现细节和复合协程的运行机制,并对框架的使用做了深入探讨;
第7~8章讲解了协程在Android应用开发和Web服务开发中的应用场景、面临的挑战,以及解决各种常见问题的方法和思路;
第9章探讨了JavaScript 和 Native等非JVM平台对协程的支持情况,以及协程在这些平台上的应用。
|
關於作者: |
英文书名:Understanding Kotlin Coroutine
(1)腾讯高级工程师、Kotlin布道师、Kotlin中文社区负责人撰写
(2)从工作机制、实现原理、应用场景、使用方法、实践技巧、标准库、框架等维度全面剖析协程,提供多种语言视角和丰富案例
|
目錄:
|
前言
第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.1 Future11
1.3.2 CompletableFuture11
1.3.3 Promise与asyncawait13
1.3.4 响应式编程15
1.3.5 Kotlin协程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.1 Python的Generator23
2.3.2 Lua标准库的协程实现24
2.3.3 Go的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.3 CPS变换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.5 Kotlin协程所属的类别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.2 Promise模型57
4.2.1 asyncawait与suspend的设计对比58
4.2.2 仿JavaScript的asyncawait实现59
4.3 Lua风格的协程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.3 CancellableContinuation的实现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.6 suspend 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.2 Channel的容量136
6.2.3 迭代Channel138
6.2.4 produce和actor138
6.2.5 Channel的关闭140
6.2.6 BroadcastChannel142
6.2.7 Channel版本的序列生成器144
6.2.8 Channel的内部结构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.7 Flow的取消154
6.3.8 其他Flow的创建方式155
6.3.9 Flow的背压155
6.3.10 Flow的变换157
6.4 多路复用select158
6.4.1 复用多个await158
6.4.2 复用多个Channel160
6.4.3 SelectClause161
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.1 Android上的异步问题167
7.1.1 基于UI的异步问题分析167
7.1.2 “鸡肋”的AsyncTask169
7.1.3 “烫手”的回调169
7.1.4 “救世”的RxJava170
7.2 协程对UI的支持173
7.2.1 UI调度器173
7.2.2 协程版AutoDispose174
7.2.3 Lifecycle的协程支持176
7.3 常见框架的协程扩展177
7.3.1 RxJava的扩展177
7.3.2 异步组件ListenableFuture179
7.3.3 ORM框架Room180
7.3.4 图片加载框架coil181
7.3.5 网络框架Retrofit182
7.3.6 协程风格的对话框183
7.4 本章小结184
|
內容試閱:
|
为什么要写这本书
我应该算是国内比较早接触和使用Kotlin的开发者了。
知道这门语言完全是个偶然。当时我还在阿里巴巴实习,周末没事去公司蹭吃蹭喝蹭电脑,编译了Hotspot源码觉得还不过瘾,又开始编译
IntelliJ IDEA的社区版。
某天下午我遇到件烦心事,编译并不是很顺利。我发现有一种没见过的后缀为kt的文件,顿时感到压力倍增,Groovy和Scala我还没学会呢,
怎么又来一个!不过,当时我只是按照说明把Kotlin的环境搭建好,并没有继续理会这门还处在v0.8的语言。
毕业之后我就职于腾讯地图,得益于团队良好的技术氛围以及对新人的鼓励和信任,入职第一年就能有机会负责重构地图SDK,后来为团队贡
献了不少公共组件。整个过程中我既充分感受到了Java的魅力,也发现了它在开发效率上的不足。于是我试着用Groovy、Scala甚至Python来
开发Android,但都不太理想,最后想起JetBrains家的“小儿子”Kotlin,结果就一发不可收拾。
Lambda,我所欲也;扩展函数,亦我所欲也。二者居然可兼得。后来我的业余时间也从研究“茴香豆的‘茴’有几种写法”变成了研究“这段
Java代码用Kotlin能怎么简化”。可是,当时身边的同事和同行似乎并没有对Java感到疲惫,于是我又开始试着录视频、写文章,最终走上了
Kotlin的布道之路。
幸运的是,Kotlin在2017年的Google IO大会上被提为Android开发的一级语言,这着实让它火了一把。那时候绝大多数Android工程师可能都
没有听说过这门语言,它有何德何能竟会受到Google的青睐?
当时,我和几个天天因Kotlin的特性而相互“口诛笔伐”的群友们聚到一起,考虑是否要写本书—大家也许需要这样一本书来了解Kotlin。不
过,这本书因写作时间很长,耗尽了大家的热情,我们尚未定稿,国内其他Kotlin入门书已陆续面世。至于我负责的协程部分,从协程还是个
“宝宝”开始,先后重写了三次,现在的Kotlin协程俨然是一位“大叔”了。
2019年,机械工业出版社的杨福川老师找到我,问我要不要写点什么。我想,Kotlin协程现在仍然是一个很大的麻烦,国内外都没有很好的资
料,官方文档又过于精练,不太适合大家入门和进阶。于是就有了这本书。
Kotlin协程不像Python、JavaScript的asyncawait那样容易上手,后者似乎根本不需要明白什么是协程就能轻松使用。
我曾试着从Kotlin协程的标准库API开始讲—这样的好处是大家能够打好基础,结果大多数读者反馈这样不易学习。于是在“破解Kotlin协程
”系列文章中,我从一开始就基于Kotlin项目组提供的协程框架开始介绍,并对比RxJava从实际问题切入,读者反映这可能是最通俗易懂的协
程文章了。不过很快,在介绍到调度器和挂起原理等内容的时候,读者就开始叫苦了,反馈说读起来如同天书一般。
当然,这其中也不乏感觉良好的读者,他们期望我能系统地对比一下Kotlin与其他语言的协程实现的异同,这说明这部分内容本身不是问题,
问题可能是铺垫做得不足。于是我仔细分析了读者反馈的问题,发现多数问题源自大家对于协程概念理解的偏差。因此在本书中,我从一开始
就紧紧抓住概念问题,从各个角度去阐释什么是协程,以及Kotlin协程与其他常见语言的协程在实现上有何区别。在探讨概念的时候,我尽可
能用实际问题引入,逐步给出解决思路,由简入繁,将协程的设计思路和实现细节尽可能地呈现出来。
还有朋友建议我在文章中多提供一些图表以方便理解,为此我在本书中为所有关键节点提供了相应的状态图、时序图等,希望能够帮助读者轻
松理解探讨的内容。
读者对象
本书适用于有一定基础的Kotlin开发者,包括但不限于正在使用和希望使用Kotlin开发Android、Web服务、iOS、前端等应用的开发者。
本书不会讲解Kotlin的基础语法,因此建议Kotlin初学者先阅读基础书,《Kotlin核心编程》就是一个不错的选择。你也可以访问
https:coding.imooc.comclass398.html参考我在慕课网发布的“Kotlin入门到精通”视频课程,视频中详细讲解了Kotlin的基础与进阶
知识,其中的协程部分可以与本书配套学习。
本书特色
Kotlin协程背后的知识点非常多,本书从异步程序的设计入手,探讨异步程序设计中要面对的关键问题,并在之后围绕这几个关键问题对
Kotlin协程的设计实现展开探讨。
在剖析Kotlin协程的过程中,本书除介绍API的基本用法以外,还提供了使用Kotlin协程设计实现各类复合协程API的思路和方法,并抽象出一
套系统的设计思路,通过CoroutineLite这个项目的设计实现,帮助大家深入了解官方协程框架的内部运行机制。
在帮助读者掌握Kotlin协程内部原理的同时,本书还从Android、Web应用和多平台等角度提供了实践思路,帮助读者做到在原理上深入浅出,
在实战中融会贯通。
为了方便内容的展开,在探讨的过程中本书也对一些概念明确进行了定义和归纳,例如简单协程、复合协程、协程体等。
本书包含了丰富的示例,以便于读者阅读参考。
为提升读者的阅读体验,本书所有代码均采用JetBrains Mono字体,该字体由Kotlin项目团队所属公司JetBrains为开发者专门打造,更适合
|
|