RSS Email Twitter GitHub Dribbble LinkedIn Facebook Instagram YouTube Pinterest Reddit icon menu

Cody's 探索日誌

東摸西摸,十分好奇

PV: / UV:

TAGS

多進程/多執行緒! 並發/平行?

開始學習如何提升某部分演算法的效能,對於如何運用多工開發邏輯的釐清和整理 跟以往單工開發的邏輯差上許多,必須考慮到整合、處理邏輯、場景等等的因素 多執行緒(線程) 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 沒有辦法同時運作,那要他何用!?