- 什么是协程:
Kotin协程:协程通过将复杂性放入库来衙化异步编程,程序的逻辑可以在协程中顺序地表达,而底层库会为找们解决其异步性,该库可以将用户代码的相关部分包装为回调、订阅相关事件:在不同线程(甚至不同机器)上调度执行,而代码则保持如同顺序执行一样简单。是一个轻量级的线程,是Google从语言方面对线程的做一个封装优化,诞生的。与jetpack、kotlin、acc、scope、vvm这些搭配易用,一套的工具体系所以兼容性更好。
协程(Coroutine)就是协同程序,而Kotlin协程就是一个基于Java Thread API封装的工具包,帮助我们轻松的写出复杂的并发代码。
kotlin协程相较于线程池,并没有什么,能上的优势。
非阻塞式挂起没什么特别的, java子线程也同样是非阻塞式的
特点:轻量;实质,便于多线程开发;线程池;网络库支持,轻便优雅。 - 需要导入的库:

- GlobalScope.launch
可创建一个协程作用域。异步,不阻塞线程,返回值Job,是一个能控制协程的接口,能取消,加入。代码:
运行结果:
这里我们可以看出:最先打印的是“你好吗?”,说明虽然前面还有两个GlobalScope.launch函数代码块都有sleep(1000),但是并没有等待它们运行结束后再往后面执行;因为launch是一个非阻塞性线程,所以在最后还有个sleep(2200),不然就运行结束了。 - GlobalScope.async
异步,不阻塞线程 。返回值是 Deferred,可以得到运行的结果并返回。在调用await()方法时,如果代码块中的代码没有执行完毕,那么该方法会一直阻塞当前协程,直到获取async函数的执行结果。其他和 launch 是一样的。 - RunBlocking
阻塞线程。通常用于普通函数与协程的桥接。会场造一个有生命周期的一个阻塞式的协程,会等待内部协程执行完毕才会结束。但是它会产生一些性能上的问题。代码:
运行结果:
它是顺序执行的代码结果,所以它是阻塞线程的。 - Cancel、Join
用于launch返回的Job来控制该协程,加入或者取消。代码:
L1、L2、a1只是打印一个结果,a2里面是循环打印20次。
第一次没有使用Cancel、Join的结果:
因为 launch和async是不阻塞线程的,所以先打印最后一个不在任何线程里面的代码:外部和耗时,因为RunBlocking是等待内部协程执行完毕后才会结束运行,所以会不分先后的执行完L1、L2、a1、a2的全部代码。
第二次执行加入 a2.join() 的结果:

在这里可以看出加入a2.join() 后,代码是要执行完a2后才继续往下执行,然后打印最后面的:外部和耗时,再接着打印a1的”你好“。
第三次执行加入 a2.cancer() 没有 a2.join() 的结果:
可以看出a2的代码没有完全执行完,因为a2在第一次执行到delay(200)的时候,在a1里面执行了a2.cancer() - await,async的异步deferred结果获取
前面知道async是有一个返回值的
运行结果:
需要注意的是在async代码块里面最后有个返回值;最后的打印代码里面a.await是可以获取async代码块的返回值,并且要两个都运行结束才会打印。
await是一个挂起函数,不会阻塞等待一个最终结果。
suspend: 可以挂起函数,但是它不能提供一个协程的作用域。挂起函数只能在另外的挂起函数或者是协程里面调用, - coroutineScope:也是一个挂起函数,可以在任何挂起函数中调用,而且还宽裕继承外部的协程作用域并创建一个子作用域。它就可以与suspend搭配使用。它和RunBlocking很类似,也会等待内部协程执行完毕才会结束,不然会一直阻塞当前协程,当然不会影响其他协程和线程,所有对性能也没有影响。
delay():是一个非阻塞式的挂起函数,只会挂起当前协程,并不会影响其他协程运行。而Therad.sleep():会阻塞当前的线程,这样运行在该线程下的所有协程都会被阻塞。
WithContext():会立即执行代码块的代码,同时将当前协程阻塞住,在代码执行完毕后,会将最后一行代码的执行结果作为返回值返回,但是它要求我们制定一个线程参数,Dispatcher.Default、Dispatcher.IO、Dispatcher.Main(字太多了,不想打了)
相关推荐
C++实战:基于ONNX Runtime与OpenCV部署XFeat图像匹配模型
本文详细介绍了在C++环境中,利用ONNX Runtime与OpenCV高效部署XFeat图像匹配模型的完整流程。内容涵盖环境搭建、模型转换、核心代码封装及可视化实现,旨在帮助开发者将这一先进的深度学习模型集成到对性能要求苛刻的工业或嵌入式应用中,实现鲁棒且快速的特征匹配。
Android kotlin 协程之快速使用
协程有两大优势: 异步逻辑同步化表达。什么意思呢,就是整个代码看下来都是同步的,只需要函数return返回结果就行,不需要考虑太多回调的方式,避免了广为所知的回调地狱 用更少的线程做尽量多的任务。从官方文档可以获取到,协程只是线程上运行的代码块,在线程阻塞的时候,使用挂起操作,使得线程可以回到线程池,继续做其他的任务,减少了很多不必要的系统资源消耗 基于第二点,我尝试过写demo进行各种验...
python入门:Anaconda和Jupyter notebook的安装与使用
一、安装和使用Anaconda 1、anaconda是什么? Anaconda在英文中是“巨蟒”的意思,与python的意思相近,它是python的包管理器和环境管理器。 2、为什么需要安装anaconda? 原因有以下几点: 附带一大批常用的数据科学包,方便立即开始处理数据 管理包 anaconda是在conda(一个包管理器和环境管理器)上发展来的;而conda可以很方便地对第三方的包进行安装、卸载和更新。 管理环境 conda可以为不同的项目建立不同的运行环境,避免不同的项目或包版本
一文学会 使用Kotlin Coroutine协程
协程的概念最早由Melvin Conway在1963年提出并实现,用于简化COBOL编译器的词法和句法分析器间的协作,当时其对协程的描述是“行为与主程序相似的子线程”。协程可看作轻量级的线程,目前 Python、go、Kotlin 等开发语言均已支持协程,Java 可以通过第三方扩展的方式来使用协程。关于线程、协程两者的对比,可以简要叙述如下:线程:线程由操作系统调度,线程切换或线程阻塞由操作系统和CPU调度实现;
PyTorch实战:手把手教你用QAT量化感知训练拯救模型精度(附避坑指南)
本文详细介绍了如何使用PyTorch进行QAT量化感知训练,以提升模型在边缘设备上的推理精度。通过核心原理讲解、实战代码示例和避坑指南,帮助开发者掌握从环境配置、模型训练到边缘部署的全流程,有效解决传统量化方法导致的精度损失问题。
VFIO框架源码分析(一)- 从初始化到设备访问
本文深入剖析了Linux内核中的VFIO(Virtual Function I/O)框架,详细解读了其从初始化到设备访问的全过程。VFIO通过Container->Group->Device的层次化设计,利用IOMMU提供安全隔离,允许用户空间直接访问物理设备。文章基于Linux v5.15版本,重点分析了vfio_init模块入口、Container创建与配置、Group关联以及最终设备访问等关键环节,揭示了VFIO如何通过逐层授权机制构建安全可靠的设备直通模型,为虚拟化技术提供核心支持。
Kotlin协程快速入手
Kotlin协程快速入手
【C++实战(62)】从0到1:C++打造TCP网络通信实战指南
本文是 C++ 网络编程实战专栏第 62 篇,聚焦 TCP 客户端与服务端开发。先阐述 TCP 协议特点、核心 API 及阻塞与非阻塞 IO 区别,打牢基础;再详解 TCP 服务端初始化、客户端连接处理与数据收发,以及客户端初始化、异常处理和协议设计;最后通过简易聊天系统实战,介绍线程池应用、协议解析及稳定性测试,助力开发者掌握 TCP 网络编程实操技能。
kotlin协程学习——内置的支持
在讨论协程时,通常将其视为一个单一的概念。实际上,它们由两个组件组成:Kotlin语言提供的内置支持(编译器支持和Kotlin标准库中的元素),以及Kotlin协程库(名为kotlinx.coroutines)。有时它们被视为相同的实体,但它们彼此非常不同。
为什么先进工艺需要check那么多corner?
那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。
Excel 汉字首字母提取:四种方案对比与选型
本文对比了 Excel 中提取汉字首字母的四种方案:手动转换、VBA 脚本、映射表与 AI 工具。手动方式低效易错;VBA 适合无网环境但识别范围有限;映射表精度提升却无法解决多音字;AI 工具通过语义理解可一句话完成提取,是多数场景下的首选。
Kotlin协程
一.协程的基本用法 kotlin没有把协程纳入标准库中,需要单独导入协程的依赖包: implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' 开启一个协程最简单的方式: GlobalScope.launch { println("The first coroutin
高斯过程的数学理解
G澳大利亚的过程是有益的,特别是当我们有少量数据时。当我在制造业担任数据科学家时,我们的团队使用这种算法来揭示我们接下来应该进行哪些实验条件。但是,此算法不如其他算法流行。在这篇博客中,我将通过可视化和 Python 实现来解释高斯过程 [1] 的数学背景。
kotlin 协程笔记
kotlin 协程
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
Kotlin 协程源码阅读笔记 —— Channel
到这里就分析完毕了,你看懂了吗?如果没有看懂,我先总结一下,然后你再回去看看源码,一定能够看懂的。发送数据首先通过发送序列号(依次递增的)来计算Segment的id和index,通过id去查找Segment,如果没有就创建一个新的Segment,将需要发送的数据添加到Segment中,然后获取Segment如果状态为空就表示没有调用receive()接收数据的地方,然后需要判断缓存是否可用,如果可用就直接将Segment状态修改为BUFFERED;如果缓存不可用就将suspend函数中的。
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
Kotlin 协程源码阅读笔记 —— Mutex
到这里你理解了Mutex的工作方式了吗?如果还有困惑,可以再看一遍,有问题也可以在评论区中指出。Mutex和与的最大区别是它是非重入锁,而且它也不以线程作为锁的拥有者,它是专门为协程设计它获取锁的方式是lock()方法,而且它是一个suspend方法,不过释放锁的unlock()方法它不是一个suspend方法。与都有可能会使用monitor锁,但是Mutext是不会使用的,它通过CAS自旋的方式来修改各种状态,这样做到线程安全。
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
Kotlin 协程源码学习笔记
Kotlin Coroutine协程源码学习笔记Kotlin Coroutine协程源码学习笔记什么是协程协程基本使用方法协程源码分析 Kotlin Coroutine协程源码学习笔记 学习kotlin有一段时间了,写个博客记录一下。本文基于kotlin 1.3.31来写,如有任何描述不当的地方,请多多指教纠正。 什么是协程 协程是一种轻量级的线程。那和线程有什么不一样?一.线程的调度是由操...
Kotlin 协程学习笔记
看B站扔物线大佬讲协程的粗陋笔记
Kotlin 协程源码阅读笔记 —— 协程工作原理
方法中会创建一个对象,然后通过launch()方法传过来的Lambda对象构建一个对象它的父级是,然后调用方法标志协程开始。第一次执行时,会调用方法,这里会对象,它的父级是对象。第一次执行方法时会调用hello()方法,在hello()方法中会构建一个对象,它的父级是,当hello()方法的callback异步调用成功后会调用方法resume协程,最终会调用到方法中去,这里也会触发方法的第二次执行,在第二次执行的过程中会调用world()方法,world()方法的处理逻辑和hello()
Kotlin协程笔记
kotlin协程基础概括
Kotlin协程笔记:CoroutineScope管理协程
CoroutineScope 是实现协程结构化并发的关键。使用 CoroutineScope,可以批量管理同一个作用域下面所有的协程。
Android kotlin协程浅析笔记
1.协程 协程?我们明确一下这篇文章,我们需要了解什么东西. 1.协程是什么东西 2.协程用来干什么 3.协程怎么写 > 4.你对我的爱有多深 根据大佬们的理解,协程大概可以理解为. 一种轻量级线程,协程类似于线程,但是它算是一种可以在单线程模式下模拟多线程编程的效果.里面状态中的挂起和恢复和我们的操作系统无关,只和函数有关 区别:线程运行在内核态,协程运行在用户态 总结:Android kotlin中协程是一个线程框架 根据定义得出作用:跟线程差不多的作用, 用来做异步/网络请求 2.协程域的
kotlin协程使用笔记
简介: 协程相对独立,有自己的上下文,由自己控制切换。协程的切换在用户态完成,不涉及内核操作,相比线程的用户态内核态切换开销更小。 协程是一个可以挂起的特殊函数,当前协程被暂停后可以选择切换到其它协程执行,并等待其它协程任务结束后再切回来继续执行(代替回调)。 一个线程可以有多个协程,通过分时复用的方式进行切换。一个线程内的多个协程是串行执行的。 协程可以通过suspend关键字来标志耗时操作。 创建协程 RunBlocking: 使用: runBlocking { log("runBlock
Kotlin 协程源码阅读笔记 —— CoroutineContext
中的链表实现方式很有意思,而且在Kotlin的实现中很多的地方都用了组合的思想来替代修改。很多时候var就是造成BUG的元凶,同时也会造成多线程编程困难。而val就能够在一定的程度上缓解这种问题。
kotlin协程学习笔记
集成kotlinx.coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.2.1' 混淆 # ServiceLoader support -keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {} -keepname...
522



被折叠的 条评论
为什么被折叠?



