多執行緒筆記 === # 概念 主要來源來自於 [並行和多執行緒程式設計](https://hackmd.io/@sysprog/concurrency/https%3A%2F%2Fhackmd.io%2F%40sysprog%2FS1AMIFt0D) * Concurrency (並行) 和Parallelism (平行) 不同,Concurrency只是表達把程式或行為拆分成可獨立執行的部分,平行是指單一同種相同可獨立執行的部分,可以==同一時間去做==。所以並行可能會用到平行,但不一定要平行,因為拆分的時候有可能相同也可能不同。 * mutex和signal象徵著owner,semaphore象徵著counter * 在過去的Linux,曾經有用semaphore時做mutex,產生了沒有mutex的owner去unlock成功的狀況 * 各個thread如果不是producer,就會是consumer * 現行IC的製作工藝,因為時脈的提升跟散熱和耗電有關,效率提升成本高,導致近代IC雖然電晶體數量提高,但是時脈沒有跟著提升 *  * atomic operation在中文翻成原子操作,意思是取自於原子當下是自然界最小粒子,==不可被分割==,在這種狀況下,不論其他併行的thread或process有什麼操作下,這個operation要不就是完全被做完,要不就是完全還沒開始做 * out of order,為了程式執行的最佳化,有可能在避免各種CPU hazard的情況下,會讓原始的程式指令調換排序,提升執行效能 [Multitasking v.s. Multithread 英文](https://techdifferences.com/difference-between-multitasking-and-multithreading-in-os.html) [Multitasking v.s. Multithread 中文](https://www.ni.com/zh-tw/support/documentation/supplemental/07/differences-between-multithreading-and-multitasking-for-programm.html) * 在Linux核心,Thread和Process在過去沒有明顯的差別 * Micro kernel在前期並沒有被納入Linux,但後期被使用 [補充筆記 Micro Kernel Linux 核心設計: 不僅是個執行單元的 Process](https://hackmd.io/@sysprog/linux-process) * preemptive和non-preemptive主要是由中央分配工作,還是自主性的教出CPU使用權 * 非搶占式的缺點在於低優先序的工作不會禮讓高優先度的工作 * 搶占性的系統設計難度較高,主要原因在於中央分配,一但執行的工作被中斷和保留,就必須考慮是否能再次進入,以及進入前資料保護的問題 * Fork Join 分開再聚集 * Deadlock - A等B,B又等A,雙方互等的情況下導致系統停止運行 * Starvation - A因為優先程度過低,對於CPU來說,永遠都有比他優先的工作在執行,導致他無法運行 * Thread特性 * 同一Process底下可以同時存在多個Thread * 在同一Process底下,Thread在start lunch的當下變數和記憶體位置都會被複製,可簡單的共享同Process不同Thread的資源,如記憶體、變數,但各自Thread有自己的stack。 * 與其比較Process和Thread的不同,不如比較為何要使用Process或者為何要使用Thread,在實作上兩者皆有可能達成相同任務,但因其特性難度不同 ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up