請仔細理解如下的通俗描述
有一個老板想要開個工廠進行生產某件商品(例如剪子)
他需要花一些財力物力制作一條生產線,這個生產線上有很多的器件以及材料這些所有的 為了能夠生產剪子而準備的資源稱之為:進程
只有生產線是不能夠進行生產的,所以老板的找個工人來進行生產,這個工人能夠利用這些材料最終一步步的將剪子做出來,這個來做事情的工人稱之為:線程
這個老板為了提高生產率,想到3種辦法:
在這條生產線上多招些工人,一起來做剪子,這樣效率是成倍増長,即單進程 多線程方式
老板發現這條生產線上的工人不是越多越好,因為一條生產線的資源以及材料畢竟有限,所以老板又花了些財力物力購置了另外一條生產線,然后再招些工人這樣效率又再一步提高了,即多進程 多線程方式
老板發現,現在已經有了很多條生產線,并且每條生產線上已經有很多工人了(即程序是多進程的,每個進程中又有多個線程),為了再次提高效率,老板想了個損招,規定:如果某個員工在上班時臨時沒事或者再等待某些條件(比如等待另一個工人生產完謀道工序 之后他才能再次工作) ,那么這個員工就利用這個時間去做其它的事情,那么也就是說:如果一個線程等待某些條件,可以充分利用這個時間去做其它事情,其實這就是:協程方式
簡單總結
進程是資源分配的單位
線程是操作系統調度的單位
進程切換需要的資源很最大,效率很低
線程切換需要的資源一般,效率一般(當然了在不考慮GIL的情況下)
協程切換任務資源很小,效率高
多進程、多線程根據cpu核數不一樣可能是并行的,但是協程是在一個線程中 所以是并發