關鍵詞: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 協程又是什麼? -
Kotlin 協程的工做機制是怎樣的? -
如何將 Kotlin 協程投入生產實踐當中?
不只如此,本書還致力於讓你們可以本身嘗試動手實現本身的協程框架,成爲深諳 Kotlin 協程之道的高手,這樣才配得上「深刻理解」這個標題。字體
還有一個小細節。本書印刷版中全部的代碼都採用了 JetBrains Mono 這個字體,插圖的文字也是如此。另外,本書代碼縮進採用了 2 個空格的樣式,目的也是爲了減小折行,提升版面的空間利用率,進而提高閱讀體驗。
使用 JetBrains Mono 排版以後的代碼效果
書的編寫過程也比較有意思。我是用 VSCode + Pandoc + graphviz + mermaid.js + plantUML + rx-marbles 等工具來編寫的。其中,使用 VSCode 處理文字內容;使用 Pandoc 將 md 文件編譯成 docx 文件;使用後面的四個工具來繪製插圖 —— 它們其實是將源碼編譯成圖片的處理工具。
環境的配置以及對這些工具的定製花去了我將近兩個月的業餘時間。除了使用 Haskell 編寫的 Pandoc 的插件 cross-ref 我實在沒法快速上手之外,我學習到了如何使用 Python 和 Lua 編寫用來在編譯過程當中處理圖片生成邏輯和文字預處理的 Pandoc 過濾器,以及如何經過修改源碼解決 plantUML、mermaid.js、rx-marbles 的樣式定製和字體的支持的問題,最後還藉機學會了如何製做 docker 鏡像。
固然,我在本書寫做過半之時,突發奇想開始學習雙拼輸入法,剛開始的那一段時間曾一度由於不知道如何打字而憋得着急上火,不過那時的感受像極了十幾年前在大學裏剛買電腦以後連 QQ 都聊不明白的光景,本身彷佛又年輕了一回。
能夠說,這一本書的編寫過程,除了促使我對 Kotlin 協程有了一個更加宏觀的概念把控以外,我還學到了很是多有意思的東西。
固然,除了有意思以外,在寫做的過程當中我也確實無數次感受到了對文字細節的疲憊,但一次次的修改和校對以後又以爲很是值得。
感謝這樣的一個機會,在這不平凡的 2020 年裏,我寫了一本書 :)
本文分享自微信公衆號 - Kotlin(KotlinX)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。