首页 > 其他分享 >协程

协程

时间:2023-12-06 19:36:57浏览次数:23  
标签:协程 launch 作用域 CoroutineStart Job CoroutineScope

https://juejin.cn/post/7088711680665845768

 

 

补充问题:

1、协程启动方式?

一般来说,协程的启动使用比较多的有如下的三个方法:

  1. runBlocking: T
  2. launch: Job
  3. async/await: Deferred

通过查看这三个方法,我们可以得知协程的几个重要的属性,或者是参数。拿 launch: Job的源码来说,我们从 GlobalScope.launch的 launch 方法进入,可以看到 launch 的方法声明是:

  kotlin 复制代码
// code 1 launch 方法声明
public fun CoroutineScope.launch(
    context: CoroutineContext = EmptyCoroutineContext,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> Unit
): Job

其中的 CoroutineContextCoroutineStart suspend CoroutineScope.() -> Unit等几个参数都是协程的重要组成部分。

 

2、协程作用域?

之前我们都是通过 GlobalScope 来启动一个协程的,其实这样使用在 Android 开发中并不好。因为是全局的作用域。

在 Android 开发过程中,我们需要理解一些协程代码运行的范围。而所有的Scope 如GlobalScope 都是 CoroutineScope 的子类,我们的协程创建都需要这样一个 CoroutineScope 来启动。

同时我们还有其他的一些作用范围的 CoroutineScope 对象。

  • GlobeScope:全局范围,不会自动结束执行。
  • MainScope:主线程的作用域,全局范围
  • lifecycleScope:生命周期范围,用于activity等有生命周期的组件,在DESTROYED的时候会自动结束。
  • viewModelScope:viewModel范围,用于ViewModel中,在ViewModel被回收时会自动结束

不同的Scope有不同的使用场景,下面我会仔细讲解。

 

3、

标签:协程,launch,作用域,CoroutineStart,Job,CoroutineScope
From: https://www.cnblogs.com/guoyu1/p/17880327.html

相关文章

  • python 协程
    python:用@asyncio.coroutine装饰器生成的对象是一个生成器对象但不是协程对象        用async定义的函数对象不是一个生成器,但是一个协程对象 importasynciofromcollections.abcimportCoroutine,[email protected]():print('......
  • C++-Python_多进程_多线程-协程-异步开发
    python多任务、并发编程等领域并发:宏观上并行,微观上串行并行:宏观上并行,微观上并行并发:I/O密集型作业运行态---阻塞态的转化并行:CPU密集型作业并发(Concurrent)、并行(Parallesim)、多线程(MultiThreaded)、多进程(Multiprocessing)、多任务(Multitasking)、......
  • asyncio协程库实现原理剖析
    目录迭代器可迭代对象&迭代器自定义迭代器生成器生成器就是迭代器生成器的4个状态用yield重构迭代器生成器三种应用场景生成器进阶函数运行机制函数对象和代码对象函数运行帧同步和异步协程yield表达式yield表达式的优先级send()用法yield表达式作为函数入参使用close()结束生成......
  • 进程,线程,协程
    1、进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等......
  • Kotlin协程系列(三)
    1.前言前面两节,我们运用了kotlin提供的简单协程去实现了一套更易用的复合协程,这些基本上是以官方协程框架为范本进行设计和实现的。虽然我们还没有直接接触kotlin官方协程框架,但对它的绝大多数功能已经了如指掌了。本节,我们来探讨一下官方协程框架的更多功能,并将其运用到实际......
  • go的GPM - 协程的本质
    协程与线程线程在创建、切换、销毁时候,需要消耗CPU的资源。协程就是将一段程序的运行状态打包,可以在线程之间调度。减少CPU在操作线程的消耗进程用分配内存空间线程用来分配CPU时间协程用来精细利用线程协程的本质是一段包含了运行状态的程序后面介绍后,会对这个概念更好......
  • Kotlin协程系列(二)
    在进行业务开发时,我们通常会基于官方的协程框架(kotlinx.coroutines)来运用Kotlin协程优化异步逻辑,不过这个框架过于庞大和复杂,如果直接接触它容易被劝退。所以,为了我们在后续的学习中游刃有余,在使用官方给出的复合协程时能够胸有成竹,我们暂且抛开它,按照它的思路实现一个轻量......
  • Kotlin协程系列(一)
    一.协程的定义最近看了一本有关kotlin协程的书籍,对协程又有了不一样的了解,所以准备写一个关于kotlin协程系列的文章。言归正传,我们在学习一个新东西的时候,如果连这个东西"是什么"都回答不了,那么自然很难进入知识获取阶段的"为什么"和"怎么办"这两个后续环节了。因此,我们......
  • 使用Python协程并发测试cdn响应速度
    代码干净清爽才能看着赏心悦目:#!/usr/bin/envpython3.11importtimefromcontextlibimportcontextmanagerfromenumimportStrEnumimportanyioimporthttpx@contextmanagerdeftimeit(msg:str):start=time.time()yieldcost=time.time()-sta......
  • etree和协程爬明朝那些事、
    1、etree和协程爬明朝那些事importrequestsfromlxmlimportetreeimportasyncioimportaiohttpimportaiofilesimportos#1.拿到主页面的源代码(不需要异步)#2.拿到页面源代码之后.需要解析出<卷名>,<章节,href>headers={"user-agent":"Mozilla/5.0(Windows......