開始學習如何提升某部分演算法的效能,對於如何運用多工開發邏輯的釐清和整理
跟以往單工開發的邏輯差上許多,必須考慮到整合、處理邏輯、場景等等的因素
多執行緒(線程) Multi-Thread
啟動 Thread 的速度就不會比 Process 來的快,但是彼此之間的記憶體是共享的
但是在處理的過程中沒有小心處理,可能會導致彼此之間搞的一踏糊塗
多進程 Multi-Process
啟動 Process 的速度是比較快的,擁有獨立的記憶體空間及資源
多個 Process 之間由於記憶體獨立的關係,彼此之間不能直接交換資料
需要透過一個通道進行傳遞,才能有辦法使 Process 之間溝通
然而一個 Process 內是可以擁有多個 Thread
Multi-Thread vs. Multi-Process
- Process
- 較厚重
- 獨立記憶體空間
- 彼此通信過程緩慢繁雜
- Thread
- 較輕量
- 擁有所處共同記憶體空間
- 彼此通訊過程迅速方便
並發 Concurrency
依照上圖的情境說明,依照 A 處理 Job1、B 處理 Job2、C 處理 Job3
但是 A、B、C 彼此牽制,好比搶奪一個辦公桌
誰坐在上面就能開始工作,離開崗位後其他人利馬搶辦公桌來使用
平行 Parallelism
依照上圖的情境說明,依照 A、B、C 進行工作處理分別為 Job1、Job2、Job3
但是 A、B、C 同時依序進行工作,沒有誰先誰後的問題,同時的進行處理
Concurrency vs. Parallelism
- Parallelism
- 同時進行處理
- 能夠使用多核
- 執行順序可以預期
- Concurrency
- 輪流進行處理
- 只能使用單核
- 執行順序無法預期 (Race Condition)
Concurrency 沒有辦法同時運作,那要他何用!?
- 不寫 Parallelism 邏輯,也能透過 Concurrency 改善效能
- 記憶體共享
- I/O
- 空檔中會有其他 Multi-Process(Multi-Thread) 進行其他工作
情境
- Process 可以包含 Multi-Thread
- Multi-Process 的每個 Process 各別可以擁有 Multi-Thread
- 某些情境 Multi-Process(Multi-Thread) 處理為 Concurrency
- 某些情境 Multi-Process(Multi-Thread) 處理為 Parallelsim
- 某些情境 Multi-Process(Multi-Thread) 處理不是 Concurrency 及 Parallelsim
心得
有了基礎概念之後,對於設計構思上面會比較好進行思考
但是還是會很思考錯誤短路燒壞,畢竟人是單線性思維在所難免
不過把效能提升上去之後還是看到滿滿的成就感