C 面試知識 協程

2021-09-17 21:32:23 字數 389 閱讀 2873

跟程序和執行緒放在一起,只不過相比其他兩個更少的關注度。

一種使用者態的輕量級執行緒,完全由使用者排程控制,擁有自己的暫存器上下文和棧,協程排程切換的時候,先將暫存器上下文和棧儲存到其他地方,切換回來的時候再恢復之前儲存的暫存器上下文和棧。直接操作棧則基本沒有核心切換的開銷,可以不加鎖的訪問全域性變數,所以上下文的切換非常快。

但是同一時間只能執行乙個協程,大致來說是一系列互相依賴的協程間依次使用cpu,每次只有乙個協程工作,而其他協程處於休眠狀態,適合對任務進行分時處理;而執行緒,一次可以執行多個執行緒,適合執行多工處理。

執行緒和協同程式的主要不同在於:在多處理器情況下,從概念上來講多執行緒程式同時執行多個執行緒;而協同程式是通過協作來完成,在任一指定時刻只有乙個協同程式在執行,並且這個正在執行的協同程式只在必要時才會被掛起。

協程巢狀協程

import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...

9 協程 協程理論

本節的主題是基於單執行緒來實現併發,即只用乙個主線程 很明顯可利用的cpu只有乙個 情況下實現併發,為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態cpu正在執行乙個任務,會在兩種情況下切走去...

面試高頻問題之協程

首先複習一下什麼是程序和執行緒 程序就是應用程式的啟動例項。比如我們執行乙個遊戲,開啟乙個軟體,就是開啟了乙個程序。執行緒從屬於程序,是程式的實際執行者。乙個程序至少包含乙個主線程,也可以有更多的子執行緒。執行緒是程序的一部分,乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,至少包含乙個主線...