iT邦幫忙

2021 iThome 鐵人賽

DAY 1
0
Mobile Development

解鎖kotlin coroutine的各種姿勢-新手篇系列 第 1

day1 你說用coroutine講30天會不會太過分

說實話,太過分了,根本講不完(笑

前言

簡單介紹一下,我會先講基礎的,再帶一點深入的,搭配一些範例和文檔,主要是讓人看懂會用,至於更深入的知識,需要自己去翻文檔,我就挖坑給你們跳

我的文章中不時會把整串的英文貼過來,只要有整串英文的建議一定要看,我會貼的情況有三種

  1. 現有的中文資源,在翻譯上有歧異或誤區,英文解釋得更貼切
  2. 我中文不好,沒辦法把英文的意思翻譯過來
  3. 英文寫得太好,我覺得翻譯會降低理解度

為什麼要這麼麻煩呢?
文檔連結
文檔連結
android文檔連結
官方blog
影片
等等

痾你知道裡面有多少東西嗎? 鐵人賽的期間剛好我手邊還有案子,時間不夠,但講講基本知識還是夠的,每篇我都會放一些資料來源和延伸閱讀的文章,同時我會盡量不帶原碼,連結裡同樣有別人帶著看原碼的連結,還是蠻推薦去看的,畢竟不能只有我看過 要了解背後原理

全部文章會採動態更新方式,我會在看到解釋更貼切或我有遺漏重要細節時,回來編輯之前的文章,也歡迎各位開發者指出我文章的錯誤或描述不足的地方

正文

所以第一天也不能水過去,直接開始講program, process, thread和coroutine吧
對第一點就是,請接受他們的英文名字,畢竟中文翻譯後,可能會有翻譯落差,名稱不同等等情況,重點是我會搞混

首先,program是什麼?

program就是我們工程師平時開ide寫的東西,在編譯之後會轉成機器語言,然後安裝在裝置的次級儲存裝置裡面

更直白一點,你從play store載了一個app,他就會被安裝在手機裡,但還不會執行

在圖形化介面Graphical User Interface,aka GUI,之中,大部分program會有一個Icon,就好比手機裡,每個app都會有一個圖示,但它並不是program,他只是一個launch icon,就好比說他是告訴系統,現在要執行哪個程式的按鈕

補充,不是所有的program都會有icon

process

process也可稱為application,當icon點擊之後,Operate system,aka OS,會分配記憶體給program,而process是指已載入記憶體且可被執行的machine code

The term process (Job) refers to program code that has been loaded into a computer’s memory so that it can be executed by the central processing unit (CPU). A process can be described as an instance of a program running on a computer or as an entity that can be assigned to and executed on a processor. A program becomes a process when loaded into memory and thus is an active entity.

英文連結
中文連結1
中文連結2
中文連結3
我沒有要衝字數,是中文的描述不同,只好去看英文的,中文有人說是已經執行的,有人說是還沒執行的,但我們都知道cpu才是真正工作的地方,那從上面的英文來看,process是指在一台電腦裡(running)運行的程式實體,或是可被指派給處理器操作的實體。

另外,關於process還有幾個特點

  1. OS 分配資源的最小單位,可以從 OS 得到如 CPU Time、Memory…等資源,意思是這個 process 在運行時會消耗多少 CPU 與記憶體。
  2. 不同的 Process 所分配到的記憶體空間 (Memory Space) 是互相獨立的,因此 Process 之間不會共享資源 (ex: 記憶體、變數)。
  3. process裡面會有很多thread'
  4. 一個program可以產生一個或多個process
  5. 一個cpu一次只能執行一個process

thread

已經了解了program和process,是時候講講thread了
一個process裡面會有多個thread,每個thread可以完成一個或多個任務(功能),實際在處理任務的是在thread,process則是thread的容器,而同一個process裡面的thread可以互享資源

以client來說,透過io thread,發出api請求,收到回覆後寫入本地資料庫,就是在io thread做多個任務

coroutine

coroutine是甚麼?
有人說他是輕量級的線程,有人說他是用戶態的線程,有人說他不是線程,而是協作式的組件
依我看,他既不是輕量級,也不是用戶態,更不是組件,他就是一塊綠豆糕
meme

ㄚㄚ偏題了,其實coroutine就是一套官方提供的線程api,上面講這麼多,coroutine就是一個線程框架 by.扔物線. GOOGLE認證講師

儘管java有thread, executor, RxJava等等thread切換工具,但coroutine藉助了kotlin的語法,讓coroutine用起來更加方便,而且能以看似同步的寫法寫出異步操作,後面29天都會在講coroutine

扔物線影片

連結統整:
如果想更深入了解這幾個之間的概念,這兩篇可以參考,我就不多加描述了
【恐龍】理解 Process & Thread

geeksforgeeks difference-between-program-and-process

這幾篇可以搭配服用
中文連結1
中文連結2
中文連結3

扔物線影片


下一篇
day 2 coroutine和架構組件
系列文
解鎖kotlin coroutine的各種姿勢-新手篇30

尚未有邦友留言

立即登入留言