我写了一本书,《深刻理解 Kotlin 协程》

关键词:Kotlin 协程 书
web

没想到 Kotlin 的协程竟然会成为一个有争议的话题,谁让官方材料太少呢。docker

Kotlin 从 1.1 开始推出协程特性,当时仍是实验性质的特性。微信

我研究 Kotlin 协程的过程其实主要分了三个阶段。app

第一个阶段,深刻理解 Kotlin 协程的三篇文章。翻了翻过去的文章记录,我在 2017 年 1 月当时 Kotlin 1.1-beta 刚刚发布之时就发布了第一篇介绍协程的文章深刻理解 Kotlin Coroutine (一),主要介绍了协程的标准库的 API,以及简单的协程封装思路。随后在那年的春节发了第二篇深刻理解 Kotlin Coroutine (二),介绍协程的框架 kotlinx.coroutines 的一些功能,当时这个框架还很是的小,源码很容易就可以通读完,与如今简直不可同日而语了。期间也搞了一些线下的活动来分享协程的用法和做用,在 1.1 正式发布不久以后又写了一篇介绍协程的使用场景的文章深刻理解 Kotlin Coroutine(三)框架

第二个阶段,CoroutineLite 。这是我仿照官方协程框架 kotlinx.coroutines 的 API 本身实现的一套协程框架,目的主要是为了教学和研究,所以代码编写时主要考虑的目标是可读性,与官方框架追求性能的实现有着本质的不一样。固然,这个框架的实现只包括了最基本的内容,像 Channel、Flow 这样更上层的组件便没有提供了。这个框架最初是在我在制做基于GitHub App业务 深度讲解 Kotlin高级特性与框架设计这门视频课程时开发的,因为当时 Kotlin 的版本是 1.2,所以视频当中说起的 CoroutineLite 仍是一个雏形,直到我去年重制Kotlin从入门到精通和编写 《深刻理解 Kotlin 协程》 时,才为它添加了做用域、取消支持等功能,并进一步的完善不少细节上的设计。这个框架目前已经开源,但愿它可以帮助各位读者更好的了解 Kotlin 协程的内部运行机制,这是必要的,也是必须的。编辑器

第三个阶段,破解 Kotlin 协程系列文章。这几年在帮助你们学习 Kotlin 的过程当中,我发现你们对于协程逐渐产生不解、惧怕甚至是不屑等各类各样的情绪,一方面是由于 Kotlin 的大部分受众源自于 Android 开发者群体,Android 开发者群体若是从一开始就在这个小圈子内成长的话,确实没有什么机会接触到协程。我本身也是 Android 开发,可以深入的体会到 Android 技术圈子的局限性,只不过我有幸有机会多接触了几门语言和应用领域。这一系列文章就是想直接基于 Kotlin 1.3 以来已经成熟的生态和框架来介绍 Kotlin 协程,一写就是十几篇,关注微信公众号 Kotlin,回复协程得到文章合集。工具

视频课程“Kotlin从入门到精通”中对协程的剖析


如今,我把前面的这些积累以及在于你们交流过程当中发现的问题进行了分析和整理,参考了各家语言对于协程的实现,系统地剖析了 Kotlin 协程的方方面面,编撰成了这样一本《深刻理解 Kotlin 协程》的书籍。性能

这本书主要回答了如下几个常见的问题:学习

  1. 协程是什么?Kotlin 协程又是什么?
  2. Kotlin 协程的工做机制是怎样的?
  3. 如何将 Kotlin 协程投入生产实践当中?

不只如此,本书还致力于让你们可以本身尝试动手实现本身的协程框架,成为深谙 Kotlin 协程之道的高手,这样才配得上“深刻理解”这个标题。字体

还有一个小细节。本书印刷版中全部的代码都采用了 JetBrains Mono 这个字体,插图的文字也是如此。另外,本书代码缩进采用了 2 个空格的样式,目的也是为了减小折行,提升版面的空间利用率,进而提高阅读体验。

使用 JetBrains Mono 排版以后的代码效果

书的编写过程也比较有意思。我是用 VSCode + Pandoc + graphviz + mermaid.js + plantUML + rx-marbles 等工具来编写的。其中,使用 VSCode 处理文字内容;使用 Pandoc 将 md 文件编译成 docx 文件;使用后面的四个工具来绘制插图 —— 它们其实是将源码编译成图片的处理工具。

《深刻理解 Kotlin 协程》的插图制做

环境的配置以及对这些工具的定制花去了我将近两个月的业余时间。除了使用 Haskell 编写的 Pandoc 的插件 cross-ref 我实在没法快速上手之外,我学习到了如何使用 Python 和 Lua 编写用来在编译过程当中处理图片生成逻辑和文字预处理的 Pandoc 过滤器,以及如何经过修改源码解决 plantUML、mermaid.js、rx-marbles 的样式定制和字体的支持的问题,最后还借机学会了如何制做 docker 镜像。

固然,我在本书写做过半之时,突发奇想开始学习双拼输入法,刚开始的那一段时间曾一度由于不知道如何打字而憋得着急上火,不过那时的感受像极了十几年前在大学里刚买电脑以后连 QQ 都聊不明白的光景,本身彷佛又年轻了一回。

能够说,这一本书的编写过程,除了促使我对 Kotlin 协程有了一个更加宏观的概念把控以外,我还学到了很是多有意思的东西。

固然,除了有意思以外,在写做的过程当中我也确实无数次感受到了对文字细节的疲惫,但一次次的修改和校对以后又以为很是值得。

感谢这样的一个机会,在这不平凡的 2020 年里,我写了一本书 :)




本文分享自微信公众号 - Kotlin(KotlinX)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索