協程和恢復

2021-09-27 08:51:24 字數 513 閱讀 1464

乙個用到recover的程式停掉伺服器內部乙個失敗的協程而不影響其他協程的工作。

func server(workchan <-chan *work) 

}func safelydo(work *work)

}()do(work)

}

do(work)發生panic,錯誤會被記錄且協程會退出釋放,其他協程不受影響

因為recover總是返回nil,除非直接在defer修飾的函式中呼叫,defer修飾的**可以呼叫那些自身可以使用panic和recover避免失敗的庫例程。

舉例:safelydo()中defer修飾的函式可能在recover之前就呼叫了乙個logging函式,panicking狀態不會影響logging**的執行。因為加入了恢復模式,函式do可以通過呼叫panic來擺脫不好的情況,但是恢復是在panicking的協程內部的,不能被另外的乙個協程恢復

這個例子不太還理解,得具體實踐下。????

協程巢狀協程

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

關於協程 nodejs和golang協程的不同

nodejs和golang都是支援協程的,從表現上來看,nodejs對於協程的支援在於async await,golang對協程的支援在於goroutine。關於協程的話題,簡單來說,可以看作是非搶占式的輕量級執行緒。一句話概括,上面提到了 可以看作是非搶占式的輕量級執行緒 在多執行緒中,把一段 放...

9 協程 協程理論

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