gpt4 book ai didi

android - 如果从协程调用非挂起函数会发生什么?

转载 作者:行者123 更新时间:2023-12-02 13:34:41 24 4
gpt4 key购买 nike

Kotlin 中协程的关键概念之一是 必须从协程或另一个挂起函数调用挂起函数 .

但是,挂起函数可以调用任何类型的函数,挂起或正常。
这样做的后果是什么? (这不是我的真实情况,只是想知道理论上的原因)

我想在那种情况下,创建协程的唯一要点是在调用它之前更改上下文(线程),因此它不会阻塞主线程。
但是,协程的所有其他优点会丢失吗? (合作取消,结构化并发......)

最佳答案

如果一个挂起函数调用另一个挂起函数,则协程被挂起,直到返回结果。

从挂起函数调用常规函数将阻塞线程。哪个线程?好吧,这取决于您使用的 Dispatcher。 IO能够产生数百个线程。但是 Default调度程序具有与您的 CPU 计数相同数量的线程。这意味着虽然这不会阻塞其他协程,但会减少可用资源的数量。

含义:不要在此调度程序上调用可能会长时间阻塞的非挂起函数,就像您不阻塞 UI 一样线。

是的,如果你在没有 yield() 的情况下执行诸如繁忙循环之类的操作,挂起函数可能会产生相同的结果。或其中的任何其他暂停调用。

关于android - 如果从协程调用非挂起函数会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com