繁体   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