Multithreading 在Kotlin中,一个线程一次只能运行一个协程?
我对Kotlin协程和线程的理解如下: 一个线程一次只能运行一个协程。一个线程可以处理多个协程。它可以挂起一个协同程序并运行另一个协同程序。但是在给定的时间点上,一个线程上只运行一个协同程序。不能在同一时间点在同一线程上运行多个协程 这是对的吗?是的,这是对的 协程可以看作是一个指令序列,线程在遇到挂起点之前一直运行,在该挂起点处协程暂停执行(保存调用堆栈和本地变量以供以后恢复)并产生控制,在这种情况下,它不再在其运行的线程上运行 这非常类似于返回的函数不再在线程上运行,将控制权返回给调用者,但协程会另外保存其状态,以便以后可以在同一线程或其他线程上恢复它。一旦协同路由产生控制,线程将返回启动或恢复协同路由的代码。该代码可能是也可能不是另一个协同程序Multithreading 在Kotlin中,一个线程一次只能运行一个协程?,multithreading,kotlin,kotlin-coroutines,Multithreading,Kotlin,Kotlin Coroutines,我对Kotlin协程和线程的理解如下: 一个线程一次只能运行一个协程。一个线程可以处理多个协程。它可以挂起一个协同程序并运行另一个协同程序。但是在给定的时间点上,一个线程上只运行一个协同程序。不能在同一时间点在同一线程上运行多个协程 这是对的吗?是的,这是对的 协程可以看作是一个指令序列,线程在遇到挂起点之前一直运行,在该挂起点处协程暂停执行(保存调用堆栈和本地变量以供以后恢复)并产生控制,在这种情况下,它不再在其运行的线程上运行 这非常类似于返回的函数不再在线程上运行,将控制权返回给调用者,但
您可以将线程视为比协同路由更低级别(OS级别或JVM级别)的原语。应用程序中的所有代码都在某个线程中执行,每个线程一次执行一个指令序列,从这个意义上讲,协程并不是排斥。我建议观看这段视频,它解释了挂起函数是如何“在引擎盖下”工作的:另一种思考方式是,它类似于事件循环。您有一个任务/协同例程添加到的队列,有一个线程(或更多线程,即Dispatchers.IO)读取并运行每个任务。查看协程JVM源代码,您将看到有一个用于协例程的队列,而协例程是一个可运行的,它是一个常规方法,但被划分为其挂起点的每个部分。