原文: 一個故事講完進程、線程和協程
https://mp.weixin.qq.com/s/zuWRx1FGuBC-_HwuA7jK3w
1. 理解:
批處理:指一個處理完了另一個再處理;
進程:即每個程序的執行的代碼(全部流程),加上執行現場(當前執行場景);
並發:因為多個程序在一個CPU上不斷切換,人類看起來如同程序在同時執行,這就是並發;
並行:即多個程序同時在多個CPU上執行,就是並行;
線程:進程內部,有多個執行流程(加上每個流程的執行場景),這個流程就是線程;
協程:即線程內部,轉換運行控制權;
2.總結:
進程是:一個CPU情況下,多個程序分別使用機器資源(CPU或硬盤等)的概念;
線程是:一個進程情況下,多個執行流程(即線程)分別使用分配給該進程的機器資源的概念;
協程是:一個線程情況下,多個執行流程(即協程)由線程控制,分別使用分配給該線程的機器資源的概念;
3.協程的理解
進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源;
線程是處理器調度的基本單位;
協程可以理解為線程內部調度的基本單位。
協程的優勢在於:處理器調度(即線程)會有很大的場景切換消耗,而對處理器來說,協程屬於同一個調度,切換消耗較小。
本質就是各種抽象,用於提升小路,不用糾結太深,只要可以更好的解決問題提升效率即可。
4.參考:
- 進程和線程、協程的區別 - lxmhhy - 博客園 https://www.cnblogs.com/lxmhhy/p/6041001.html
注:總結的很好,可以參考理解; - 協程的好處有哪些? - 知乎 https://www.zhihu.com/question/20511233/answer/75957672
注:這個回答說了,每種代碼的理解都不同,理解側重點也不同。不用糾結,協程只是一種解決問題的手段,也可以用其他方式實現(可能效率低),本質沒有太多不同。
學會結合具體場景,可以使用然后解決問題即可。