進程、線程、協程理解


原文: 一個故事講完進程、線程和協程

https://mp.weixin.qq.com/s/zuWRx1FGuBC-_HwuA7jK3w

1. 理解:

批處理:指一個處理完了另一個再處理;

進程:即每個程序的執行的代碼(全部流程),加上執行現場(當前執行場景);

並發:因為多個程序在一個CPU上不斷切換,人類看起來如同程序在同時執行,這就是並發;
並行:即多個程序同時在多個CPU上執行,就是並行;

線程:進程內部,有多個執行流程(加上每個流程的執行場景),這個流程就是線程;

協程:即線程內部,轉換運行控制權;

2.總結:

進程是:一個CPU情況下,多個程序分別使用機器資源(CPU或硬盤等)的概念;
線程是:一個進程情況下,多個執行流程(即線程)分別使用分配給該進程的機器資源的概念;
協程是:一個線程情況下,多個執行流程(即協程)由線程控制,分別使用分配給該線程的機器資源的概念;

3.協程的理解

進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源;
線程是處理器調度的基本單位;
協程可以理解為線程內部調度的基本單位。

協程的優勢在於:處理器調度(即線程)會有很大的場景切換消耗,而對處理器來說,協程屬於同一個調度,切換消耗較小。

本質就是各種抽象,用於提升小路,不用糾結太深,只要可以更好的解決問題提升效率即可。

4.參考:

  1. 進程和線程、協程的區別 - lxmhhy - 博客園 https://www.cnblogs.com/lxmhhy/p/6041001.html
    注:總結的很好,可以參考理解;
  2. 協程的好處有哪些? - 知乎 https://www.zhihu.com/question/20511233/answer/75957672
    注:這個回答說了,每種代碼的理解都不同,理解側重點也不同。不用糾結,協程只是一種解決問題的手段,也可以用其他方式實現(可能效率低),本質沒有太多不同。
    學會結合具體場景,可以使用然后解決問題即可。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM