当前位置: 首页 > news >正文

205-协程与 Flow 入门

05 协程与 Flow 入门

这一章解决“理解协程到底是什么、和线程什么关系,能写出基本的后台加载 + 切主线程,并理解 Flow 冷流”。这里只做入门,深挖(调度细节、异常传播、背压、测试)放在第 08 模块threading-and-coroutines

1. 协程和线程的关系

先建立最重要的直觉:协程不是线程,是运行在线程之上的、可挂起的任务

维度线程(Thread)协程(Coroutine)
由谁调度操作系统Kotlin 运行时 + 协程库
成本重(MB 级栈、内核切换)轻(对象级别,可同时几万个)
阻塞代价占住一个线程挂起时释放线程去干别的
关系协程在线程上执行一个线程可轮流跑很多协程

关键点:当协程遇到suspend挂起(如等网络返回)时,它会让出当前线程,线程去执行别的协程;等结果就绪后,协程再被恢复到某个线程上继续。这就是协程“用少量线程支撑大量并发”的原理,也是它比“一个任务一个线程”高效的原因。

suspend挂起的是协程,不是线程。这是初学最容易搞混的点。

2. suspend 函数

suspend标记“这个函数可能会挂起,必须在协程或另一个 suspend 函数里调用”。

suspendfunloadUser(id:Long):User{returnapi.fetchUser(id)// 网络请求,挂起等待,不阻塞线程}
  • 普通函数不能直接调suspend函数。
  • suspend函数写起来像同步代码(顺序、无回调),但执行是非阻塞的。
suspendfunloadProfile(id:Long):Profile{valuser=loadUser(id)// 顺序写,但每步可挂起valorders=loadOrders(id)returnProfile(user,orders)}

这就是协程最大的卖点:用同步的写法表达异步逻辑,消灭回调地狱。

3. CoroutineScope 与启动

协程必须在一个CoroutineScope里启动。scope 管理协程的生命周期——scope 取消时,里面所有协程一起取消。

scope.launch{valuser=loadUser(1)updateUi
http://www.jsqmd.com/news/1084241/

相关文章:

  • 科技前沿亚洲EMBA科学选型测评指南
  • 40 年计算生涯回顾:从磁带时代到云端时代,见证技术巨变!
  • 标准化AI Agent行为设计
  • Electron v42.5.0 发布:修复多项问题,更新 Chromium 和 Node.js 版本
  • 杰理之IO在上电后又被Deinit,导致没有保持住IO电平【篇】
  • 根据您提供的规则,已为您生成一条符合要求的CSDN标题:临沂GEO服务技术解析与方案考量
  • Windows Btrfs完全指南:如何在Windows上使用下一代Linux文件系统
  • PASTA算法:应对非凸优化与无界方差挑战的自适应随机优化新框架
  • 深度解析Musl libc的极致轻量级锁:__lock与__unlock源码剖析
  • ARM Cortex‑M7 处理器架构技术详解
  • 极化码SO-FSCL解码:原理、硬件实现与性能优化
  • 哪个AI音乐平台可以一站式做歌到发行
  • 2026免费在线录音转文字保姆级教程!无需下载,音频转文字网站一键搞定
  • Type-C PD取电方案设计与工程实践
  • 一条液冷焊接产线排了多少碳?你的下一个大客户正在问这个问题
  • 肇庆黄金白银回收铂金旧金回收无套路门店 TOP 榜单 实地测评资料整理
  • Google Home Speaker实测:功能出色但设计有短板,Gemini表现决定是否值得等!
  • 普雷赛斯做幕后深耕者,成全每一位出海同行
  • 简单3步解决Gofile文件下载限速:终极免费下载器使用指南
  • Timeplus发布Timeplus Apps:几分钟部署流式处理管道,首批八款App覆盖常见场景
  • Apple Container 快速入门
  • Nub:快速一体化 Node.js 工具包,多方面性能远超传统工具!
  • 揭秘AI写专著:如何用AI工具3天完成20万字专著撰写?
  • 为什么经济在发展,你却找不到工作?
  • 445. Java 正则表达式 - 边界匹配器
  • 惠州管道阀门:城市命脉的守护者
  • Web应用白屏问题全链路排查:从诊断到预防的实战指南
  • C# 循环详解
  • Beyond Compare 5 密钥生成工具完整指南:5步快速获取专业版授权
  • Epilogue预热64 Operator:今年将让你在电脑及手持设备玩N64卡带游戏