Kotlin 协程是一种在 Kotlin 语言中实现并发编程的强大工具。它提供了一种轻量级的线程管理方式,使得开发者能够以接近同步代码的方式编写异步代码。本文将深入探讨 Kotlin 协程的实现原理,并分析其关键源码。
Hi你好,新同学。很高兴,你终于追寻这个问题了,也许你正感到迷茫,各路大神对协程的理解不一,有人说它是线程框架,有人说它比线程更轻,希望我这篇博文可以帮你从另一个角度简单理解协程。
近些年,一些编程语言的新贵Go和Kotlin纷纷引入了协程这个语言特性,使得协程这个似乎十分陌生的概念开始频繁进入大家的视野,为了便于理解,开发者们都把它当作线程的小弟来对待,即轻量级线程。可是真要细说起来,协程其实是很早就出现的一个编程概念,它的出现甚至是是早于线程的,但是就编程语言的江湖地位而言,协程是不如线程的,所以向线程低头叫爸爸不奇怪。
这是一份写给Android工程师的协程指南,希望在平静的2023,给大家带来一些本质或者别样的理解。
作者 | Roman Elizarov 译者 | 刘雅梦 策划 | 邓艳琴 真正的编程语言是有生命的,是不断变化和发展的。与任何生产代码一样,它们的设计师的大部分时间都花在了缺陷修复和小改进上,而不是花在激进的新特性上。Kotlin 的独特之处在于:它多年来一直以用例和社区驱动的方式发展,早在 2016 年发布 1.0 稳定版本之前就开始了,即使是在 2011 年上市之前也有一段时间了。 1Kotlin 空安全的故事 以 Kotlin 空安全(null-safety)为例。任何语言设计都必须要回答的第一个问
Kotlin 的协程从 v1.1 开始公测(Experimental) 到现在,已经算是非常成熟了,但大家对它的看法却一直存在各种疑问,为什么呢?因为即便我们把 Kotlin 丢掉,单纯协程这个东西本身就已经长时间让大家感到疑惑了,不信的话可以单独搜一下协程或者 Coroutine,甚至连 Lua 之父在提到为什么协程鲜见于早期语言实现,就是因为这概念没有一个清晰的界定。
内容来源:2018 年 6 月 28 日,饿了么资深Android工程师张涛在“droidcon上海2018安卓技术大会”进行《领略kotlin协程的力量》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。
作者 |Roman Elizarov 编辑 |邓艳琴、孙瑞瑞 真正的编程语言是有生命的,是不断变化和发展的。与任何生产代码一样,它们的设计师的大部分时间都花在了缺陷修复和小改进上,而不是花在激进的新特性上。Kotlin 的独特之处在于:它多年来一直以用例和社区驱动的方式发展,早在 2016 年发布 1.0 稳定版本之前就开始了,甚至在 2011 年上市之前的一段时间也是如此。 Kotlin 空安全的故事 以 Kotlin 空安全(null-safety)为例。任何语言设计都必须要回答的第一个问题是
Kotlin 协程把 suspend 修饰符引入到了我们 Android 开发者的日常开发中。您是否好奇它的底层工作原理呢?编译器是如何转换我们的代码,使其能够挂起和恢复协程操作的呢?
如果您是库作者,您也许希望用户在使用 Kotlin 协程与 Flow 时可以更加轻松地调用您基于 Java 或回调的 API。另外,如果您是 API 的使用者,则可能愿意将第三方 API 界面适配协程,以使它们对 Kotlin 更友好。
今天我们来聊聊Kotlin的协程Coroutine。 如果你还没有接触过协程,推荐你先阅读这篇入门级文章What? 你还不知道Kotlin Coroutine? 如果你已经接触过协程,但对协程的原理存
线程是操作系统的内核资源,是 CPU 调度的最小单位,所有应用程序的代码都运行于线程之上。
Go 语言比 Java 语言性能优越的一个原因,就是轻量级线程Goroutines(协程Coroutine)。本篇文章深入分析下 Java 的线程和 Go 的协程。
7 协程 协程,协作代码段。关于定义这里不多讲了,协程提供了一种可以避免线程阻塞的能力,这是他的核心功能。在 kotlin 中使用协程,需要在gradle中引入协程库: //Android 工程使用 implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:x.x.x" //Java 工程使用 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:x.x.x'
ViewModel 甫一发布,便成为了 Jetpack 中的核心组件之一。我们在 2019 年做的一份开发者问卷显示,超过 40% 的 Android 开发者已经在自己的应用中使用了 ViewModel。ViewModel 可以将数据层与 UI 分离,而这种架构不仅可以简化 UI 的生命周期的控制,也能让代码获得更好的可测试性。如果想了解更多,可以参考 ViewModel: 简单介绍视频和官方文档。
协程并不是 Kotlin 提出来的新概念,其他的一些编程语言,例如:Go、Python 等都可以在语言层面上实现协程,甚至是 Java,也可以通过使用扩展库来间接地支持协程。
ViewModel 甫一发布,便成为了 Jetpack 中的核心组件之一。我们在 2019 年做的一份开发者问卷显示,超过 40% 的 Android 开发者已经在自己的应用中使用了 ViewModel。ViewModel 可以将数据层与 UI 分离,而这种架构不仅可以简化 UI 的生命周期的控制,也能让代码获得更好的可测试性。
Android 开发者来说 Kotlin 语言已经是很熟悉的了,但 Kotlin 中的 协程 不了解的同学可能还有很多。
很尴尬,但是事实是,很大一部分的程序员不知道协程是啥玩意,更大一部分的程序员,项目中没用到协程。
作为 Kotlin Multiplatform 体系重要组成部分之一的 Kotlin/Native ,目前还是一项处于 beta 阶段的技术。而 Kotlin/Native与 Kotlin/JVM 的异步并发模型也有着极大的不同,因此如果要实践 Kotlin Multiplatform,则事先对 Kotlin/Native的异步并发模型进行探究就显得很有必要。
这是 #11WeeksOfAndroid 系列的最后一篇文章。感谢您在过去的时间里和我们一起深入探索 Android 开发的关键领域。下面来和我们一起回顾这些精彩内容吧:
在多线程并发的情况下会很容易出现同步问题,这时候就需要使用各种锁来避免这些问题,在java开发中,最常用的就是使用synchronized。kotlin的协程也会遇到这样的问题,因为在协程线程池中会同时存在多个运行的Worker,每一个Worker都是一个线程,这样也会有并发问题。
"协程是轻量级的线程",相信大家不止一次听到这种说法。但是您真的理解其中的含义吗?恐怕答案是否定的。接下来的内容会告诉大家协程是如何在 Android 运行时中被运行的,它们和线程之间的关系是什么,以及在使用 Java 编程语言线程模型时所遇到的并发问题。
链接:https://juejin.im/post/6854573211930066951
最近看了一本有关kotlin协程的书籍,对协程又有了不一样的了解,所以准备写一个关于kotlin协程系列的文章。
协程并不是一个新的概念,它并不是 Kotlin 发明的。它们已经存在了几十年,并且在 Go 等其他一些编程语言中很受欢迎。
在现代Android应用开发中,协程(Coroutine)已经成为一种不可或缺的技术。它不仅简化了异步编程,还提供了许多强大的工具和功能,可以在高阶场景中发挥出色的表现。本文将深入探讨Coroutine重要知识点,帮助开发者更好地利用Coroutine来构建高效的Android应用。
从 API 1 开始,处理 Activity 的生命周期 (lifecycle) 就是个老大难的问题,基本上开发者们都看过这两张生命周期流程图:
移动端跨平台技术自移动开发诞生以来一直是个热门话题,一是持续关注研发效率,降本提效;二是一套代码多端运行可以提升多端业务逻辑的一致性;三是跨端技术方案通常意味着更佳的高效运维和缺陷修复。
本文是Kotlin协程解析系列文章的开篇,主要介绍Kotlin协程的创建、协程调度与协程挂起相关的内容
在 Android 应用开发中,异步编程是不可避免的,而 Kotlin Flow 是一个强大的库,能够使异步操作更加优雅和易于管理。本文将深入探讨 Kotlin Flow 的使用方法,同时也会解析其背后的实现原理,帮助你更好地理解这一技术。
从kotlin1.1开始,协程就被添加到kotlin中作为实验性功能,直到kotlin1.3,协程在kotlin中的api已经基本稳定下来了,现在kotlin已经发布到了1.4,为协程添加了更多的功能并进一步完善了它,所以我们现在在kotlin代码中可以放心的引入kotlin协程并使用它,其实协程并不是kotlin独有的功能,它是一个广泛的概念,协作式多任务的实现,除了kotlin外,很多语言如Go、Python等都通过自己的方式实现了协程,本文阅读前希望你已经知道如何使用kotlin协程,如果不熟悉可以阅读一下官方文档:
传统意义上的协程是单线程的,面对io密集型任务他的内存消耗更少,进而效率高。但是面对计算密集型的任务不如多线程并行运算效率高。
协程是一种并发设计模式,您可以在Android上使用它来简化异步执行的代码。Kotlin1.3版本添加了 Coroutines,并基于其他语言的既定概念。
前面我们提到 launch 函数有三个参数,第一个参数叫 上下文,它的接口类型是 CoroutineContext,通常我们见到的上下文的类型是 CombinedContext 或者 EmptyCoroutineContext,一个表示上下文的组合,另一个表示什么都没有。我们来看下 CoroutineContext 的接口方法:
协程 Coroutine 是 Kotlin 语言 中新出现的概念 , 在 Java 语言中没有 ;
本文是介绍 Android 协程系列中的第一部分,主要会介绍协程是如何工作的,它们主要解决什么问题。
你还记得是哪一年的 Google IO 正式宣布 Kotlin 成为 Android 一级开发语言吗?是 Google IO 2017 。如今两年时间过去了,站在一名 Android 开发者的角度来看,Kotlin 的生态环境越来越好了,相关的开源项目和学习资料也日渐丰富,身边愿意去使用或者试用 Kotlin 的朋友也变多了。常年混迹掘金的我也能明显感觉到 Kotlin 标签下的文章慢慢变多了(其实仍然少的可怜)。今年的 Google IO 也放出了 Kotlin First 的口号,许多新的 API 和功能特性将优先提供 Kotlin 支持。所以,时至今日,实在找不到安卓开发者不学 Kotlin 的理由了。
网上几乎全部介绍Kotlin的文章都会说Kotlin的协程是多么的高效,比线程性能好很多,然而事情的真相真是如此么?
如果需要依次调用它们, 我们只需要使用正常的顺序调用, 因为协同中的代码 (就像在常规代码中一样) 是默认的顺序执行。下面的示例通过测量执行两个挂起函数所需的总时间来演示:
前面一篇文章我们大概讨论了协程是怎么一回事,也举了一些例子,不过整体上覆盖的细节比较少。这篇文章我们按照协程的经典论文 “Revisiting Coroutines” 的思路展开,详细的讨论下协程究竟是怎样的存在。当然由于涉及语言较多,个人水平有限,如有不恰当之处,欢迎大家指正。
本文是介绍 Android 协程系列中的第二部分,这篇文章主要会介绍如何使用协程来处理任务,并且能在任务开始执行后保持对它的追踪。
我们刚刚学线程的时候,最常见的模拟各种延时用的就是 Thread.sleep 了,而在协程里面,对应的就是 delay。 sleep 让线程进入休眠状态,直到指定时间之后某种信号或者条件到达,线程就尝试恢复执行,而 delay 会让协程挂起,这个过程并不会阻塞 CPU,甚至可以说从硬件使用效率上来讲是“什么都不耽误”,从这个意义上讲 delay 也可以是让协程休眠的一种很好的手段。
Kotlin 语言是一种功能强大、安全、简洁且互操作性良好的编程语言,由 JetBrains 公司于 2011 年推出。Kotlin 具有许多优秀的特性,如 null 安全、扩展函数、类型推断、Lambda 表达式等,使得编写安卓应用变得更加简单、高效、易维护。
协程虽然是微线程,但是并不会和某一个特定的线程绑定,它可以在A线程中执行,并经过某一个时刻的挂起(suspend),等下次调度到恢复执行的时候,很可能会在B线程中执行。
前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久。一方面是因为 Compose 的学习在个人来看重要性更高;另一方面就是,发现学完之前的 Kotlin 系列的笔记一到笔记三后,已经基本可以在项目中使用 Kotlin 进行日常的编码了,所以才导致这个 Kotlin 学习笔记系列停更了好久,哈哈!对 Jetpack Compose 感兴趣的同学可以看一下我的另一个笔记系列—— Jetpack Compose 学习笔记。这次咱来看看 Kotlin 协程的基础知识。
今天来看下如何使用Coroutine和Flow简化API,以及如何使用suspendCancellableCoroutine和callbackFlow API构建你自己的协程风格适配器。
基础设施层 : 基础设施层 的 协程基础 Api 定义在 kotlin.coroutines.* 包下 ;
领取专属 10元无门槛券
手把手带您无忧上云