Kotlin常见技术分享-02-相对于Java 的核心优势-协程

协程

协程 的定位 是kotlin 为了简化 异步编程 而设计的。

在学习相关关键字之前咱们先 了解一些 协程 相关的 重要概念。

首先 第一点需要记住的就是 在 没有协程之前, 在Java中 我们通过 充分的利用 线程 级别的资源, 来充分的 利用底层资源, 比如CPU资源, CPU 多核的情况, 通过线程间的切换 来提高CPU资源的利用率, 然后通过 线程池 来管理 线程, 通过锁机制来确保 安全。 但是 假如 在一个线程 可能遇到了 IO操作的 时候, 在 这个IO操作 执行完 的这段时间, 实际上 这个线程 资源是被浪费的,

协程 的定位 就是为了 把这一段 等待的时间, 利用起来

在 Java 中 一个请求 进来, 一般会分配一个线程 处理这个请求 。 即 主线程

然后去执行任务 A,B,C 如果B是一个阻塞性的任务 比如IO操作, 线程就会阻塞。

在Kotlin 中 咱们就可以创建一个协程 来执行 任务 A, B, C

当然执行的时候 协程 还是需要 绑定一个线程 来帮助他执行实际的任务, 但是假如 到了 B阻塞了。
协程 会自动的 把 这个线程释放出来 给别人去用 (我们一般专业一点管这个叫做挂起 英文 suspend) 这样就能把这部分资源 利用起来了。

所以 记住 协程 实际上就是搭建在 线程基础上的 更轻量的 任务调度和编排框架。

挂起函数

挂起函数是一切的基石, 只有用suspend 修饰的函数 且 这个函数里头 真正调用了其他挂起函数比如 delay 函数 , 挂起 的动作才会 生效。

如果你是后端开发者或好奇后端用法:可以知道,在后端典型用法是:每个HTTP请求都包裹在一个协程里处理。当这个协程执行到suspend函数(如查询数据库)时,它会挂起并释放底层线程,这个线程立刻可以去处理其他到达的请求。这样,用几十个线程就能轻松处理成千上万的并发连接。

协程作用域 (CoroutineScope)

呐, 还有一个重要的 东西叫做协程作用域。

首先, 我们知道 线程有线程池来管理, 那么 协程 肯定也需要一个管家, 一种管理机制。

而 协程作用域 就是那个管家, 在创建 协程 之前, 必须先有一个管家。

在管家创建之后, 我们创建出协程, 就可以给他绑定这个管家, 由这个协程 衍生出的 所有子协程 都会受这个 管家 管理, 当 管家 说 停止执行的时候 , 所有由这个管家 管理的 协程 就都得停止。

这种 一个 CoroutineScope 管理一个协程树(或协程组), 通过这种树形结构,才能实现"取消父协程/作用域,所有子协程自动取消"的关键特性 。 这也是后面 另一个概念 结构化并发的 实现基础

相关推荐
于先生吖1 分钟前
前后端分离二手商城开发,质检登记、回收回款整套业务源码部署教程
java·开发语言·uni-app
codeejun4 分钟前
每日一Go-76(架构篇)|多集群部署 / 容灾 / Failover / Backup / 热迁移
开发语言·架构·golang
战族狼魂5 分钟前
从零构建企业级Hermes-Agent:复杂任务拆解、工具协同与安全落地实践
开发语言·人工智能·python
小锋java123421 分钟前
分享一套锋哥原创的基于LangChain4j的RAG医疗健康知识智能问答系统(SpringBoot4+Vue3+Ollama)
java·人工智能
阿里嘎多学长27 分钟前
2026-06-08 GitHub 热点项目精选
开发语言·程序员·github·代码托管
程序员晨曦39 分钟前
Java 并发修仙传:ThreadLocal 从“闭关修炼”到“走火入魔”的救赎之路
java·开发语言
AIGS00141 分钟前
探索向量空间JBoltAI:工业企业数智化升级的基础设施
java·人工智能·人工智能ai大模型应用
李可以量化1 小时前
量化之MiniQMT 实战:一键读取通达信自选股并实时监控涨跌幅(附完整可运行代码)
开发语言·python·量化·qmt·ptrade
嘶哈哈哈1 小时前
嘉立创 EDA 入门实操笔记:从原理图到 PCB 布线、差分对、覆铜与 DRC 检查
开发语言·笔记·php
wgc2k1 小时前
Nest.js 基础-8-Hello,NestJS
开发语言·javascript·ecmascript