美文网首页
kotlin协程[1]:相关理论

kotlin协程[1]:相关理论

作者: 瑜小贤 | 来源:发表于2021-10-20 15:04 被阅读0次

在之前对Kotlin的反射进行了详细的学习,接下来进入一个全新的篇章,就是关于Koltin的协程【coroutine】,在正式撸码之前先对它有一个全面理论化的了解:

协程的定义:

  • kotlin中的协程 通过将复杂性放入库中来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。【用同步的逻辑顺序,写异步的代码】
  • 该库【协程是以单独的jar方式来存在的,如果项目中不用它则可以不依赖它】可以将用户代码的相关部分包装为回调、订阅相关事件、在不同线程(甚至不同机器)上调度执行,而代码则保持如同顺序执行一样简单

协程的描述:【没有特定的概念,容易晕】

  • 协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销比较大。
  • 而协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程。
  • 总而言之:协程可以简化异步编程,可以顺序地表达程序,协程也提供了一种避免阻塞线程并用更廉价、更可控的操作替代线程阻塞的方法---协程挂起。

协程相关概念【先有个概念,目前不可能记住】

  • CoroutineScope,可以理解为协程本身,包含了CoroutineContext。
  • CoroutineContext,协程上下文,是一些元素的集合,主要包括JobCoroutineDispatcher元素,可以代表一个协程的场景。
  • EmptyCoroutineContext,表示一个空的协程上下文。
  • CoroutineDispatcher,协和调度器,决定协程所在的线程或线程池。它可以指定协程运行于特定的一个线程、一个线程池或者不指定任何线程(这样线程就会运行于当前线程)。
  • coroutines-core中CoroutineDispatcher有三种标准实现:Dispatchers.DefaultDispatchers.IODispatchers.MainDispatchers.Unconfined,Unconfined就是不指定线程。
  • launch函数定义如果不指定CoroutineDispatcher或者没有其他的ContinuationInterceptor,默认的协程调度器就是Dispatchers.Default,Default是一个协程调度器,其指定的线程为共有的线程池,线程数量至少为2,最大与CPU数相同。

Job & Deferred:

  • Job,任务,封装了协程中需要执行的代码逻辑。Job可以取消并且有简单的生命周期,它有如下几种状态:


  • Job完成时是没有返回值的,如果需要返回值的话,应该使用Deferred,这是Job的子类。
  • public interface Deferred<out T> : Job

Coroutine builders:

  • CoroutineScope.launch函数属于协程构建器Coroutine builders,Koltin中还有其他几种Builders,负责创建协程。

CoroutineScope.launch{}:

  • CoroutineScope.launch{}是最常用的Coroutine builders,不阻塞当前线程,在后台创建一个新协程,也可以指定协程调度器。

runBlocking{}:

  • runBlocking{}是创建一个新的协程同时阻塞当前线程,直到协程结束。这个不应该在协程中使用,主要是为main函数和测试设计的。

withContext{}:

  • withContext{}不会创建新的协程,在指定协程上运行挂起代码块,并挂起该协程直至代码块运行完成。

async{}:

  • CoroutineScope.async{}可以实现与launch builder一样的效果,在后台创建一个新协程,唯一的区别是它有返回值,因为CoroutineScope.async{}返回的是Deferred类型。

转自https://www.cnblogs.com/webor2006/p/11712521.html

相关文章

  • kotlin协程[1]:相关理论

    在之前对Kotlin的反射进行了详细的学习,接下来进入一个全新的篇章,就是关于Koltin的协程【coroutin...

  • Kotlin Coroutine 探索之旅

    协程 大家如果已经使用Kotlin语言进行开发,对协程这个概念应该不会很陌生。虽然在网上有很多Kotlin协程相关...

  • kotlin协程

    1:什么是协程,kotlin协程是什么。 2:kotlin开启协程的方式 launch async+await两...

  • 协程的学习笔记

    协程整理的相关教程: Kotlin协程官方教程[https://www.kotlincn.net/docs/ref...

  • Kotlin 并发编程之"协程"

    Kotlin 并发编程之"协程" Kotlin协程简介 Kotlin, as a language, provid...

  • Kotlin协程探索(一) (Coroutine)

    Kotlin协程探索 (一)(Coroutine) PS:以下协程都特指Kotlin协程;且期望大家大概知道协程的...

  • 初遇Kotlin协程

    初遇Kotlin协程(coroutine) 这篇文章我们将建立协程项目,并用Coroutines编写相关代码。 K...

  • Kotlin 协程基本概念

    目录1、什么是 Kotlin 协程2、场景举例3、如何使用 Kotlin 协程4、实现第一个协程5、Corouti...

  • Kotlin协程它不香吗?

    本博客的目的: 知道Kotlin协程是什么,为什么要用Kotlin协程 快速上手Kotlin协程 抓住核心,避免被...

  • Android版kotlin协程入门(三):kotlin协程的异

    kotlin协程的异常处理 在上一篇《Android kotlin协程入门(二):kotlin协程的关键知识点初步...

网友评论

      本文标题:kotlin协程[1]:相关理论

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