美文网首页
协程笔记

协程笔记

作者: 紫鹰 | 来源:发表于2021-05-10 18:29 被阅读0次

什么是协程

官方描述:协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、订阅相关事件、在不同线程(甚至不同机器)上调度执行,而代码则保持如同顺序执行一样简单。就像非常轻量级的线程。

为什么需要协程

  • 轻量级

协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程。

  • 内存泄漏更少
    使用结构化并发机制在一个作用域内执行多项操作。

  • 内置取消支持
    取消操作会自动在整个协程层次内传播。

  • jetpack集成
    许多jetpack库都包含提供全面的协程支持扩展,某些库还提供自己的协程作用域。

  • 方便使用

如果后台执行一个复杂任务,第二个任务依赖上一个任务的执行结果,使用写成可以方便实现。这点类似于java8的Future以及Rxjava中的链式调用。

基础

gradle配置

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3'
  • 挂起函数
    suspend修饰符修饰的函数是挂起函数。挂起函数挂起协程时,不会阻塞协程所在的线程。挂起函数执行完后恢复协程,后面的代码才能继续执行。挂起函数只能在协程中调用。
  • CoroutineDispatcher

CoroutineDispatcher是协程调度器,决定协程运行的线程或线程池。
coroutines-core中CoroutineDispatcher有三种标准实现:
Dispatchers.Default 指定线程为共有的线程池,线程数量最少为2最大为CPU数
Dispatchers.IO IO线程
Dispatchers.Main 主线程
Dispatchers.Unconfined 不指定线程

  • 开启协程方法
开启方式比较 是否创建新协程 是否阻塞当前线程 是否指定协程调度器 是否有返回值 其他
launch{}
async{} 用await()获取返回值
runBlocking {} 主要用于测试
withContext{} 挂起协程不阻塞县城 可让您在不引入回调的情况下控制任何代码行的线程池,因此您可以将其应用于非常小的函数,例如从数据库中读取数据或执行网络请求。
  • CoroutineScope

CoroutineScope 会跟踪它使用 launch 或 async 创建的所有协程。您可以随时调用 scope.cancel() 以取消正在进行的工作(即正在运行的协程)。不过,与调度程序不同,CoroutineScope 不运行协程。

  • Job

Job 是协程的句柄。使用 launch 或 async 创建的每个协程都会返回一个 Job 实例,该实例是相应协程的唯一标识并管理其生命周期。

相关文章

  • Python协程

    这几天看了看操作系统,顺便研究了一下Python的协程,下面就是做的一点笔记 协程是什么? 协程,英文Corout...

  • 协程笔记

    什么是协程 官方描述:协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决...

  • 协程笔记

    概念 并发与并行 并发:指一个时间段内,有几个程序在同一个cpu上运行,但是任意时刻只有一个程序在cpu上运行。并...

  • 协程笔记

    协程在Kotlin中文文档的解释是轻量级的线程,Go、Python 等很多现成语言在语言层面上都实现协程,不过Ko...

  • python异步协程(aiohttp,asyncio)

    python异步协程 环境:python3.7.0 协程 协程,英文叫做 Coroutine,又称微线程,纤程,协...

  • 协程(三)IEnumerable、IEnumerator、for

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(五)简单模拟协程

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(一)基本使用

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(六)有关优化

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

  • 协程(二)协程什么时候调用

    协程(一)基本使用协程(二)协程什么时候调用协程(三)IEnumerable、IEnumerator、foreac...

网友评论

      本文标题:协程笔记

      本文链接:https://www.haomeiwen.com/subject/jqnidltx.html