我对Kotlin协程和线程的理解是这样的:
一个线程一次只能运行一个协程。一个线程可以同时处理多个协程。它可以挂起一个协程并运行一个不同的协程。但是在给定的时间点上,一个线程上只有一个协程在运行。您不能在同一时间点在同一线程上运行多个协程。
是这样的吗?
发布于 2020-10-05 17:53:26
是的,这是正确的。
协程可以看作是线程运行的指令序列,直到它遇到一个挂起点,在这个点上,协程挂起它的执行(保存调用堆栈和本地变量以便稍后恢复),并产生控制,在这种情况下,它不再在它运行的线程上运行。
这非常类似于返回的函数不再在线程上运行,而是将控制权返回给调用者,但是协程额外保存了它的状态,以便以后可以在同一个线程或另一个线程上恢复它。一旦协程产生了控制权,线程就会返回到启动或恢复协程的代码。该代码可能是也可能不是另一个协程。
您可以将线程视为比协程更低级别(操作系统级别或JVM级别)的原语。应用程序中的所有代码都是在某个线程中执行的,每次在每个线程中执行一个指令序列,协程在这个意义上也不是唯一的。
https://stackoverflow.com/questions/64201104
复制相似问题