簡體   English   中英

在 Kotlin 中,一個線程一次只能運行一個協程?

[英]In Kotlin, one thread can only run one coroutine at a time?

我對 Kotlin 協程和線程的理解是這樣的:

一個線程一次只能運行一個協程。 一個線程可以處理多個協程。 它可以掛起一個協程並運行一個不同的協程。 但是在給定的時間點,一個線程上只會運行一個協程。 您不能在同一時間點在同一線程上運行多個協程。

這是正確的嗎?

是的,這是正確的。

協程可以看作是一個線程運行的指令序列,直到它遇到一個暫停點,在這個點協程暫停它的執行(保存調用堆棧和局部變量以供稍后恢復)並讓出控制權,在這種情況下它沒有在它運行的線程上運行更長的時間。

這與返回的函數不再在線程上運行,將控制權返回給調用者的方式非常相似,但是協程另外保存了它的狀態,以便以后可以在同一線程或另一個線程上恢復它。 一旦協程讓出控制權,線程就會返回到啟動或恢復協程的代碼。 該代碼可能是也可能不是另一個協程。

您可以將線程視為比協程更低級別(OS 級別或 JVM 級別)的原語。 應用程序中的所有代碼都在某個線程中執行,每次在每個線程中執行一個指令序列,從這個意義上說,協程並不排斥。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM