說實話,太過分了,根本講不完(笑
簡單介紹一下,我會先講基礎的,再帶一點深入的,搭配一些範例和文檔,主要是讓人看懂會用,至於更深入的知識,需要自己去翻文檔,我就挖坑給你們跳
我的文章中不時會把整串的英文貼過來,只要有整串英文的建議一定要看,我會貼的情況有三種
為什麼要這麼麻煩呢?
文檔連結
文檔連結
android文檔連結
官方blog
影片
等等
痾你知道裡面有多少東西嗎? 鐵人賽的期間剛好我手邊還有案子,時間不夠,但講講基本知識還是夠的,每篇我都會放一些資料來源和延伸閱讀的文章,同時我會盡量不帶原碼,連結裡同樣有別人帶著看原碼的連結,還是蠻推薦去看的,畢竟不能只有我看過 要了解背後原理
全部文章會採動態更新方式,我會在看到解釋更貼切或我有遺漏重要細節時,回來編輯之前的文章,也歡迎各位開發者指出我文章的錯誤或描述不足的地方
所以第一天也不能水過去,直接開始講program, process, thread和coroutine吧
對第一點就是,請接受他們的英文名字,畢竟中文翻譯後,可能會有翻譯落差,名稱不同等等情況,重點是我會搞混
program就是我們工程師平時開ide寫的東西,在編譯之後會轉成機器語言,然後安裝在裝置的次級儲存裝置裡面
更直白一點,你從play store載了一個app,他就會被安裝在手機裡,但還不會執行
在圖形化介面Graphical User Interface,aka GUI,之中,大部分program會有一個Icon,就好比手機裡,每個app都會有一個圖示,但它並不是program,他只是一個launch icon,就好比說他是告訴系統,現在要執行哪個程式的按鈕
補充,不是所有的program都會有icon
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還有幾個特點
已經了解了program和process,是時候講講thread了
一個process裡面會有多個thread,每個thread可以完成一個或多個任務(功能),實際在處理任務的是在thread,process則是thread的容器,而同一個process裡面的thread可以互享資源
以client來說,透過io thread,發出api請求,收到回覆後寫入本地資料庫,就是在io thread做多個任務
coroutine是甚麼?
有人說他是輕量級的線程,有人說他是用戶態的線程,有人說他不是線程,而是協作式的組件
依我看,他既不是輕量級,也不是用戶態,更不是組件,他就是一塊綠豆糕
ㄚㄚ偏題了,其實coroutine就是一套官方提供的線程api,上面講這麼多,coroutine就是一個線程框架 by.扔物線. GOOGLE認證講師
儘管java有thread, executor, RxJava等等thread切換工具,但coroutine藉助了kotlin的語法,讓coroutine用起來更加方便,而且能以看似同步的寫法寫出異步操作,後面29天都會在講coroutine
連結統整:
如果想更深入了解這幾個之間的概念,這兩篇可以參考,我就不多加描述了
【恐龍】理解 Process & Thread
geeksforgeeks difference-between-program-and-process