線程 進程 多線程 多進程

來源:互聯網
上載者:User

標籤:

進程和線程的主要區別在於多進程每個進程擁有隔離儲存區 (Isolated Storage)空間,而多線程共用儲存空間。對於單核CPU來講,如果是阻塞操作,或者不耗時非阻塞操作,多進程/線程不會提高效率,這時候多進程/線程最有用的通常是耗時而又非阻塞的I/O操作。 打個比喻,一個人要看兩部電影,可以看完一部再看另一部,也可以同時看,看一眼這個暫停,看一眼那個再暫停看回前一個,快速不停切換,你會覺得因為兩部一起看所以先看完嗎?理論上兩部電影播放時間加起來是一樣,所以看完所用時間應該一樣。但是實際使用時間反而可能第一種方法快,為什嗎?切換是有開銷的,下次切換回來你的大腦起碼要花點時間快速回憶一下才能接下去看吧。這跟多線/進程是一個道理,CPU進行線/進程切換是有開銷的,進程切換開銷大於線程切換。 I/O操作可以想像成煮飯,煲湯之類的工作,耗時但不用你時刻盯著,而且這期間你仍可以做其他事情。這個時候煮飯和煲湯同時做就比做完一個再做另一個快多了。
 再說多核CPU,當線程/進程數達到CPU數量時,道理就跟單核CPU一樣了,繼續增加線/進程數也無法提高效率,除非是大量耗時非阻塞的I/O操作(例如檔案讀寫,資料庫讀寫,網路請求等) 當系統CPU是多核的時候比較單線/進程和多線/進程是沒有意義的,多人幹活肯定比一個人快。 多線程的痛點是線程同步和安全執行緒。多進程由於不能共用資源,需要考慮處理序間通訊問題。 所以使用單線/進程還是多線/進程完全取決於你的應用情境,沒有統一答案。這從不同的語言平台使用不同的策略可以看出來,java允許編程人員建立多線程,但javascript/node.js是單線程非同步策略,python(cpython解譯器)設定了GIL全域鎖,實質上也是單線程的。它們之間孰優孰劣?恐怕永遠不能爭出一個絕對答案。這些語言都支援多進程以便充分利用多核CPU。 以上純個人理解。  

線程 進程 多線程 多進程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.