進程、線程、協程理解

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

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

1. 理解:

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

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

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

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

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

2.總結:

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

3.協程的理解

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

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

本質就是各類抽象,用於提高小路,不用糾結太深,只要能夠更好的解決問題提高效率便可。博客

4.參考:

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

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

相關文章
相關標籤/搜索