type
status
date
slug
summary
tags
category
icon
password
简介
在 Kotlin 中,协程(Coroutines)是一种轻量级的并发编程框架,用于简化异步编程。协程允许您在代码中以顺序的方式编写异步代码,而无需显式地管理线程。在 Kotlin 中,协程通过
kotlinx.coroutines
库提供支持。kotlinx.coroutines 是由 JetBrains 开发的功能丰富的协程库。它包含本指南中涵盖的很多启用高级协程的原语,包括
launch
、 async
等等。Kotlin 协程第一个程序
协程是可挂起计算的实例。它在概念上类似于线程,因为它需要与其余代码同时运行的代码块。但是,协程不绑定到任何特定线程。它可以在一个线程中挂起其执行并在另一线程中恢复。
runBlocking 是一个协程构建器,它连接常规的非协程世界和 runBlocking {…} 大括号内的协程代码。 这在 IDE 中通过以下方式突出显示:在 runBlocking 左大括号之后的 CoroutineScope 提示。
runBlocking 的名称意味着运行它的线程(在本例中为测试线程)在调用期间被阻塞,直到 runBlocking {…} 内的所有协程完成执行。您经常会看到 runBlocking 在应用程序的最顶层使用,而在实际代码中很少见,因为线程是昂贵的资源,阻塞它们效率低下,而且通常是不需要的。一般 runBlocking 在测试程序中被使用。
launch 是一个协程构建器。它与{…}其余代码同时启动一个新的协程,该协程继续独立工作。这就是为什么
Hello
首先打印的原因。delay 是一个特殊的挂起函数。它将协程暂停特定时间。挂起协程不会阻塞底层线程,但允许其他协程运行并使用底层线程来执行其代码。
协程遵循结构化并发原则,这意味着新的协程只能在特定的 CoroutineScope 中启动,该范围限定了协程的生命周期。上面的示例显示 runBlocking 建立了相应的作用域,这就是前面的示例等到 World! 的原因。延迟一秒后打印,然后退出。
在真实的应用程序中,您将启动许多协程。结构化并发确保它们不丢失、不泄漏。在其所有子协程完成之前,外部作用域无法完成。结构化并发还确保代码中的任何错误都得到正确报告并且永远不会丢失。
一个新技术框架的出现旨在不断满足新的需求,同时框架技术根基仍源自于过去积累的经验和技术基础。这个角度看 Kotlin 协程,它并不神秘也不难理解。比如 Kotlin 中的 async 扩展函数启发于 C#,suspend 关键字启发于 go 语言。Kotlin 协程流式处理异步任务,我们在 RxJava 中也能看到。Kotlin 协程的产生是在传统异步编程模型的基础上,结合了协程概念和现代编程语言的特性,为 Kotlin 开发者提供了一种更优雅、更易用的异步编程解决方案。