- 協程由用戶態控制,不由內核控制
- 1個線程中可以開很多協程
- 協程切換是在用戶態控制不由內核控制,切換時資源開銷小
- 使用方式:async def、await+可等待對象(協程對象、Future對象、task對象(是Future對象的子類)->io等待)、事件循環
- 使用場景:可以使用與I/O密集型場景
- 鎖的使用:三種場景,[1] 如果協程在操作共享變量的過程中,沒有主動放棄執行權(await),也就是沒有切換掛起狀態,那就不需要加鎖,執行過程本身就是安全的,換句話說只要協程中沒有await關鍵字舊不需要加鎖操作;[2] 可是如果在執行事務邏輯塊中主動放棄執行權了,會分兩種情況,[2.1]如果在邏輯執行過程中我們需要判斷變量狀態,或者執行過程中要根據變量狀態進行一些下游操作,則必須加鎖,[2.2] 如果我們不關注執行過程中的狀態,只關注最終結果一致性,則不需要加鎖。【 是的,拋開劑量談毒性,是不客觀的,給一個健康的人注射嗎啡是犯罪,但是給一個垂死的人注射嗎啡,那就是最大的道德,所以說,道德不是空泛的,脫離對象孤立存在的,同理,拋開場景談邏輯,也是不客觀的,協程也不是虛空的,脫離具體場景孤立存在的,我們應該養成具體問題具體分析的辯證唯物思想,只有掌握了辯證的矛盾思維才能更全面更靈活的看待問題,才能透過現象,把握本質。】更詳細的可以查看協程(asyncio)到底需不需要加鎖?