簡體   English   中英

Kotlin 協程執行順序同線程

[英]Kotlin Coroutine Execution Order Same Thread

我遇到了一些使用單線程上下文創建CoroutineScope的代碼

val serialThreadContext = newSingleThreadContext("mysinglethreadcontext")
fun myScope(): CoroutineScope = CoroutineScope(serialThreadContext)

然后在代碼庫的其他地方,在這個 scope 中啟動協程......

myScope().launch {
   someOtherMethod()
   ...
}

據我了解,所有這些創建的協程都將安排在同一個線程上,但我找不到任何關於執行或暫停順序的具體文檔。

這在我的腦海中提出了以下問題:

  1. 如果someOtherMethod不包含任何suspend函數,這個協程還能被線程掛起嗎?

  2. 當線程從調度程序中拉出協程時,是否有任何保證的執行順序?

  1. 協程只能在掛起函數處掛起。 一旦調用了someOtherMethod ,如果它不是掛起 function,則無法避免等待 function 返回,然后才能通過掛起釋放線程。 請注意,標記為suspend的 function 仍然並不意味着它一定會暫停調用它的協程。 如果它沒有在內部對其他調度程序進行掛起工作,它仍然會占用您的調用線程。

  2. 不保證執行順序。 您不應該依賴單線程調度程序來嘗試按順序排列工作。 有關如何使用 Channel 創建工作隊列的示例,請參見我的答案

暫無
暫無

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

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