IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin协程篇-1 -> 正文阅读

[移动开发]Kotlin协程篇-1

协程的定义

官方链接中文版
据官方描述协程是一个轻量级的线程,但是可能很多人不太理解这句话的意思,对于线程来说,何谓线程?

线程

线程是我们CPU运行的最小单元百度描述
那么官方描述所谓的轻量级线程可能就比较难以明白了!线程已经是最小的运行单元,怎么轻量级了?一开始可能就被这个轻量级带跑路了…

协程(个人理解)

协程依然是一个线程框架,依然是基于线程来封装的一套api ,原来对于线程的内容依然能用在协程中),而不同于线程的东西而言,协程的api重点在于不是如何去控制线程,而是类似线程一样的方式去控制任务!将任务进行细粒度的分割成伪线程的状态;
所以你理解线程和协程的区别时,不要把协程当成线程来对待,否则你可能被协程中的api迷惑!

区别

  1. 线程是内核里的东西,而协程是基于用户的(程序员)
  2. 线程是cpu分配时间片段需要执行上下文的切换(不同线程的切换),协程上下文的切换只是任务的切换,而线程有可能是不会切换的(单线程不会)

挂起与阻塞

挂起不是阻塞,挂起举个简单的例子,A,B 两个任务,如果我要去做 A任务做一半的时候如果领导说现在先完成B 那么我先把B执行 做完再去A
而阻塞好比我做A 领导要去去做B 我说不行 手上的A 没完成 ,等我做完A
那么B一直会被等待

那么对于线程来说我们的cpu对于协程而言当得到时间片段的时候依然能继续运行
线程阻塞来说就是浪费了这段时间片段

所以协程的一大优点就是解决了CPU资源浪费的问题

start

HellowWorld-Kotlin

fun main() = runBlocking<Unit> {
    println(Thread.currentThread().name)
    launch { // launch a new coroutine and continue
       // delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
        println("World!${System.currentTimeMillis()}") // print after delay
        println(Thread.currentThread().name)
    }
    println("Hello${System.currentTimeMillis()}") // mai
}
//s

我们输出线程名称结果如下:
在这里插入图片描述
发现协程也是运行在main线程的.ok到此我们可以更容易理解 我们的协程了

协程上下文CoroutineContext

协程上下文是一个抽象的概念,
从API上来看 协程上下文提供的是对元素Element的操作

get

fold

那么我们看下Element也就是我们上下文的元素

Element

  • public interface Job : CoroutineContext.Element
  • interface ContinuationInterceptor : CoroutineContext.Element
  • AbstractCoroutineContextElement
  • ThreadContextElement

我们暂时列举这几个,不难发现我们协程上下文就是封装了一系列的元素,也就是我们协程上的组件

协程的启动

协程的启动必须依赖于协程上下文去启动

在协程中提供了几种启动方式 如下:

MainScope

GlobalScope

runBlocking

从源码中我们可以发现的是都是根据协程上下文去启动的

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:27:30  更:2022-04-27 11:28:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:53:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码