首页 > 其他分享 >协程

协程

时间:2022-11-11 23:22:38浏览次数:69  
标签:协程 函数 多个 线程 Activity Dispatchers

概念

提示 协程不是进程也不是线程,而是一个特殊的函数。这个函数可以在某个地方被“挂起”,并且可以重新在挂起处外继续运行。所以说,协程与进程、线程相比并不是一个维度的概念。

一个进程可以包含多个线程,一个线程也可以包含多个协程。简单来说,在一个线程内可以有多个这样的特殊函数在运行,但是有一点必须明确的是:一个线程中的多个协程的运行是串行的。 如果是多核CPU,那多个进程或一个进程内的多个线程是可以并行运行的。但是在一个线程内协程 却绝对是串行的,无论CPU有多少个核毕竟协程虽然是一个特殊的函数,但仍然是一个函数。 一个线程内可以运行多个函数,但这些函数都是串行运行的。当一个协程运行时,其他协程必须被挂起。

协程调度器种类

1) Dispatchers.Main : UI 线程执行协程;
2)Dispatchers.IO : IO 线程执行协程;
3)Dispatchers.Default  : CPU 密集型线程执行协程;
4)Dispatchers.Unconfined : 构建完协程立刻在当前线程执行;

协程作用域(CoroutineScope)

1)GlobalScope,生命周期是process级别的,即使Activity或Fragment已经被销毁,协程仍然在执行;

2)MainScope,在Activity中使用,可以在onDestroy()中取消协程;

3)viewModelScope,只能在ViewModel中使用,绑定ViewModel的生命周期;

4)lifecycleScope,只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。

启动方式

1)runBlocking: T

2)launch: Job

3)async/await: Deferred

详情请看: https://juejin.cn/post/7088711680665845768

标签:协程,函数,多个,线程,Activity,Dispatchers
From: https://www.cnblogs.com/zuiniub/p/16882393.html

相关文章

  • 【Go】协程
    今天主要学习了一下go语言的多线程,也写了一些例子,最开始还是很困惑。比如下面这个例子:packagemainimport"fmt"funcloop(){fori:=0;i<10;i++{fmt.Printf("......
  • 协程 + epoll 的两个小例子
    getcontext/setupcontext/swapcontext/setcontext 方式的协程实现#include<stdio.h>#include<stdlib.h>#include<string.h>#include<poll.h>#include<errno.h>......
  • lua协程
    localcoroutine=coroutinelocaltable=tablelocalcoroutine_create=coroutine.createlocalcoroutine_resume=coroutine.resumelocalcoroutine_yield=co......
  • 协程
    阅读目录一引子二协程介绍三Greenlet模块四Gevent模块引子之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。......
  • 协程记录一
    多任务异步协程一,Python协程基础知识1.1协程概念引入​ 协程是我要重点去讲解的一个知识点.它能够更加高效的利用CPU.​ 其实,我们能够高效的利用多线程来完成......
  • 【Python零基础入门篇 · 35】:协程和IO操作的简单理解
    协程和IO操作的简单理解协程的理解协程,又称微线程,纤程。英文名Coroutine。协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资......
  • 【Python零基础入门篇 · 36】:greenlet协程模块的使用、gevent模块的使用、程序打补丁
    greenlet协程模块的使用greenlet:是一个用C实现的协程模块,通过switch()来实现任务函数间的切换。greenlet属于手动切换任务,当遇到IO操作,程序会阻塞,而不能进行自动切换。g......
  • 【Python零基础入门篇 · 36】:greenlet协程模块的使用、gevent模块的使用、程序打补丁
    greenlet协程模块的使用greenlet:是一个用C实现的协程模块,通过switch()来实现任务函数间的切换。greenlet属于手动切换任务,当遇到IO操作,程序会阻塞,而不能进行自动切换。g......
  • python 协程
    什么是协程、异步举个例子:假设有1个洗衣房,里面有10台洗衣机,有一个洗衣工在负责这10台洗衣机。那么洗衣房就相当于1个进程,洗衣工就相当1个线程。如果有10个洗衣工,就相当于1......
  • 协程的async使用
    async与launch一样都是开启一个协程,但是async会返回一个Deferred对象,该Deferred也是一个job async函数类似于launch函数.它启动了一个单独的协程,这是一个轻量级的线程......