展开

关键词

Kotlin-特殊的阻塞

阻塞是种特殊的启动方式,一般是用 runBlocking{} 扩起来一段。 首先是父得到执行,然后才是子。 重点是这两段都在同一个线程main里完成。这里就带来一个有趣的问题, runBLocking{}和平时常用的launch有什么区别? 这里给出结果,改用GlobalScope.launch之后,子会在一个独立的线程里运行。 runBlocking 在kotlin官网上对于这个api的解释是桥接阻塞与非阻塞的世界。 在创建完coroutine后就进入派发流程了,这部分和Kotlin-一个的生命周期中的逻辑比较相似,下面也会讲到。 这个问说明,runBLocking{}这种,它的运行逻辑是先把父放队列里,然后取出来执行,执行完毕再把子入队,再出队子,用同样的方式递归。

73420

Kotlin开篇

Kotlin》均基于Kotlinx-coroutines 1.3.70 新开个坑,专门讲kotlin。聊程之前先说一下具体聊的是的什么内容。 · 是什么? · 什么时候用? · 的核心是什么? · kotlin和其他语言的有什么异同? kotlin的出现其实比kotlin语言还晚一点。在当前这个版本,甚至都还处于一个不稳定的迭代版本中。 存活 } 上面的代码是一个常规启动的方式,关键函数只有 launch,delay,这两个函数是kotlin独有的。 这个问题涉及到Kotlin的Scope,调度,也是的实现核心逻辑 Kotlin不是第一个提出的 实际上在Kotlin之前就有不少语言实践了这个概念。比如python,golang。 kotlin还在发展 如果去看kotlin源码的话会发现里面有很多 exeprimental 的api和实现逻辑。

24320
  • 广告
    关闭

    【玩转 Cloud Studio】有奖调研征文,千元豪礼等你拿!

    想听听你玩转的独门秘籍,更有机械键盘、鹅厂公仔、CODING 定制公仔等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Kotlin 总结

    设计的初衷是为了解决并发问题,让 「协作式多任务」 实现起来更加方便。 就是 Kotlin 提供的一套线程封装的 API,但并不是说就是为线程而生的。 不过,我们学习 Kotlin 中的,一开始确实可以从线程控制的角度来切入。因为在 Kotlin 中,的一个典型的使用场景就是线程控制。 c.suspend suspend是 Kotlin 最核心的关键字,几乎所有介绍 Kotlin 的文章和演讲都会提到它。它的中文意思是「暂停」或者「可挂起」。 所以这个 suspend,其实并不是起到把任何把挂起,或者说切换线程的作用。 真正挂起这件事,是 Kotlin框架帮我们做的。 4,Kotlin 的实战 5,漫画:什么是? 向大佬们致敬。

    9310

    破解 Kotlin (2) - 启动篇

    我们今天主要说 Kotlin。 我们说过,启动需要三样东西,分别是 上下文、启动模式、体,体 就好比 Thread.run 当中的代码,自不必说。 本文将为大家详细介绍 启动模式。 在 Kotlin 当中,启动模式是一个枚举: public enum class CoroutineStart { DEFAULT, LAZY, @ExperimentalCoroutinesApi 在 Nodejs 中,Kotlin 的默认调度器则并没有实现线程的切换,输出结果也会略有不同,这样似乎更符合 JavaScript 的执行逻辑。 更多调度器的话题,我们后续还会进一步讨论。 我们在前面提到我们的示例都运行在 suspend main 函数当中,所以 suspend main 函数会帮我们直接启动一个,而我们示例的都是它的子,所以这里 5 的调度取决于这个最外层的的调度规则了

    42030

    Kotlin-的内部概念Continuation

    实现这个能力的关键在于实现了continuation接口。 从源码里猜测,它肯定是一个实现了continuation的类,因此它才能有可重入性。 把编译后的字节码用jd-gui打开可以看到,我们所写的会给编译器插入代码,实现SuspendLambda接类, ? 但这个函数又再次是 kotlin 标准库里的。 所以会看到虽然的外部概念很清晰,只是一个 coroutine,但在内部,实际上支撑它的还有Continuation,Dispatch,Intercept。还是挺复杂的。

    57840

    Kotlin-派发和调度框架

    搞清楚内部概念对分析源码来说非常关键。 的最小粒度-Coroutine 对没接触过的人来说,一个OOP代码的最小调度粒度是函数。 在中,最小的调度粒度是,在kotlin中叫coroutine。 外部概念和内部概念 中外部概念和内部概念的差别很大。对应开发者来说,一个的最小粒度coroutine,在的内部概念中叫DispatchedContinuation。 为什么可以提升效率,在Kotlin-设计的基础中有具体解释。 框架三大件,Continuation-Disptacher-Scheduler Kotlin从框架设计上就考虑了跨平台的问题。 这里的跨平台不是指安卓和服务端。

    30330

    破解 Kotlin (5) - 取消篇

    关键词:Kotlin 取消 任务停止 的任务的取消需要靠内部调用的协作支持,这就类似于我们线程中断以及对中断状态的响应一样。 1. 线程的中断 我们先从大家熟悉的话题讲起。 再谈 Retrofit 的扩展 4.1 Jake Wharton 的 Adapter 存在的问题 我在破解 Kotlin - 入门篇(https://www.bennyhuo.com/2019 父。 4.2 如何正确的将回调转换为 前面我们提到既然 adapt 方法不是 suspend 方法,那么我们是不是应该在其他位置创建呢? 接着我们将之前我们一直提到的回调转的例子进一步升级,支持取消,这样大家就可以轻易的将回调转变为的挂起调用了。 最后我们还分析了一下 Retrofit 的扩展的一些问题和解决方法,这个例子也进一步可以引发我们对作用域以及如何将现有程序化的思考。

    74950

    破解 Kotlin (6) - 挂起篇

    关键词:Kotlin 挂起 任务挂起 suspend 非阻塞 的挂起最初是一个很神秘的东西,因为我们总是用线程的概念去思考,所以我们只能想到阻塞。不阻塞的挂起到底是怎么回事呢? 调用完全一样。 就是 Kotlin 编译之后产生的字节码。 当然,字节码是比较抽象的,我这样写出来就是为了让大家更容易的理解是如何执行的,看到这里,相信大家对于的本质有了进一步的认识: 的挂起函数本质上就是一个回调,回调类型就是 Continuation 当然,这一篇内容的安排更多是为后面的序列篇开路,Kotlin 的 Sequence 就是基于实现的,它的用法很简单,几乎与普通的 Iterable 没什么区别,因此序列篇我们会重点关注它的内部实现原理

    46930

    破解 Kotlin (3) - 调度篇

    关键词:Kotlin 异步编程 上一篇我们知道了启动的几种模式,也通过示例认识了 launch 启动的使用方法,本文将延续这些内容从调度的角度来进一步为大家揭示的奥义。 ? 1. 上下文 调度器本质上就是一个上下文的实现,我们先来介绍下上下文。 Kotlin 设计者也特别害怕大家注意不到这一点,还特地废弃了两个 API 并且开了一个 issue 说我们要重做这套 API,这两个可怜的家伙是谁呢? 上一篇文章我们提到了 suspend main 会启动一个,我们示例中的都是它的子,可是这个最外层的到底是怎么来的呢? 通过这个例子我们可以知道,实际上启动一个只需要有一个 lambda 表达式就可以了,想当年 Kotlin 1.1 刚发布的时候,我写了一系列的教程都是以标准库 API 为基础的,后来发现标准库的 API

    33320

    Kotlin | 是什么?

    所以请打开Kotlin中文网。很多人说kotlin官网教程很不详细,其实不然,kotlin中文网教程很详细。 回到正题: 什么是? 异步编程 体验 语言级 理念 注意上面几个关键点和一些实际使用,不难明白 Kotlin是基于Kotlin语法从而延伸的一个异步编程框架,它并没有带来多少性能上的体验,它能实现的,你用线程池同样也可以实现 ,但对于使用角度的来说,努力打造一个 "同步方式,异步编程的" 思想,作为开发者来说,我们可以更懒了,切换线程,withContext即可,带来了开发上的舒适,但这种舒适是基于 Kotlin 的语法 所以我希望大家刚入手时,多从语言角度去理解。 那么,是什么? 就是一个基于Kotlin语法的异步框架,它可以使开发者以同步的方式,写成异步的代码,而无需关注多余操作。 就这么简单 怎么用?

    22210

    【翻译】深入 Kotlin

    【翻译】深入 Kotlin 2017-10-26 by Liuqingwen | Tags: Kotlin 翻译 | Hits ? 一、前言 翻译好的文章也是一种学习方法! 原文作者:Adrian Bukros 二、正文 编写 Kotlin 相关的文章是当下比较流行的一个话题,这当然是有极好的理由支撑着的。 如何使用基于一种新的函数类型,叫做挂起函数。我们可以在函数名称前使用一种新的语言关键字 suspend 来标记。用这个关键字标记的函数能够暂停一个的执行,且不会阻塞当前线程。 在 C# 5.0 中,追溯到 2012 年,关于异步函数微软提出了一个特性,非常类似 Kotlin 中的: public async Task<T> doWork() { // do some 在 C# 中 async 和 await 都是关键字 在 C# 中 async 函数只能返回一个 Task 实例或者返回空 如果你仔细观察的这个例子,你会看到在 Kotlin 中, launch{}

    42610

    Android Kotlin async

    它启动了一个单独的与其它所有的一起并发的工作。 请注意,使用进行并发总是显式的。 惰性启动的 async 可选的,async 可以通过将 start 参数设置为 CoroutineStart.LAZY 而变为惰性的。 在这个模式下,只有结果通过 await 获取的时候才会启动,或者在 Job 的 start函数调用的时候。 注意,如果我们只是在 println 中调用 await,而没有在单独的中调用 start,这将会导致顺序行为,直到 await 启动该 执行并等待至它结束,这并不是惰性的预期用例。 在 Kotlin中使用这种风格是强烈不推荐的, 原因如下所述。

    38720

    Kotlin(一)——入门

    介绍 这里一开始不打算介绍什么是,虽然标题叫介绍~~ 为了方便理解,这边先做个比喻: 从使用的角度来看,Kotlin像是“另一种RxJava”,但是比RxJava要高效。 这里先有个大致的印象,先了解下在实际中的作用,回头再去看它的原理,或许会更容易些。 一开始查了好多关于资料(包括官方完档),发现不同的人说的不大一样,最后越看越乱。 于是我决定一开始先不说什么是。 作用 上面说到,用起来“像是另一种RxJava”。 那么是不是可以用来开启一个异步操作?切换线程? 答案是肯定的,不仅可以做到,而且写起来也很简单。 使用 知道到了他的优(niu)秀(bi)之处,下面来看看是怎么用的 因为是Kotlin,所以项目需要支持Kotlin。怎么支持就不用我说了吧? (不要问我,我不会,因为那是另一个同事做的。 总结 基本的使用到这里就可以告一段落了,主要介绍了给我带来了什么,可以在什么场景下用,怎么用。相信这样同步的方式来写异步,这样写出来的代码一定是非常直观、清晰的。 然而,有关什么是

    60220

    kotlin--入门

    到目前为止没有一个具体的定义,但很多语言都有,但每个语言又有所不同,官方说基于线程,是轻量级的线程。在我看来,是一种趋势,它让我们从繁琐的多线程中释放出来,提高我们的编写代码的效率。 更像是一个管理者的秘书,它让我们从复杂的逻辑中得到解放,只需要告诉秘书执行流程,其他的都交由秘书安排 以上就是我对的理解,接下来来学习如何使用kotlin 一、实现异步任务相同功能 如果说我们有一个耗时操作 ,也就是我们之前代码指定的Dispatchers,即使在主线程也是如此 官方提供的调度器为以下三种: 调度器 四、的两部分 kotlin实现分为两个层次,我们之前使用的都是业务框架层 1 .基础设施层,标准库的API,主要对提供了概念和语义上最基本的支持 2.业务框架层,的上层框架支持 基础设施写法: fun main() { val corountine = suspend ,是不过业务框架层已经做了封装 五、结构化并发 当某个协任务丢失,无法追踪,会导致资源浪费,甚至发送一个无用的网络请求,这种情况称为任务泄漏 为了解决任务泄漏,kotlin引入了结构化并发机制 使用结构化并发可以做到

    6610

    kotlin 官方文档(1)-基础(Coroutine Basics)

    最近一直在了解关于kotlin的知识,那最好的学习资料自然是官方提供的学习文档了,看了看后我就萌生了翻译官方文档的想法。 本质上,可以称为轻量级线程。在 CoroutineScope (作用域)的上下文中通过 launch、async 等构造器(coroutine builder)来启动。 当 A 调用 delay(1000L) 函数来指定延迟1秒后再运行时, A 所在的线程只是会转而去执行 B,等到1秒后再把 A 加入到可调度队列里。 我们显式地指定它的返回类型 Unit,因为 kotlin 中 main 函数必须返回 Unit 类型,但一般我们都可以省略类型声明,因为编译器可以自动推导(这需要代码块的最后一行代码语句没有返回值或者返回值为 此时我们需要手动保留对所有已启动的引用以便在需要的时候停止,但这很容易出错 kotlin 提供了更好的解决方案。我们可以在代码中使用结构化并发。

    58420

    Kotlin解析系列(上):调度与挂起

    vivo 互联网客户端团队- Ruan Wen 本文是Kotlin解析系列文章的开篇,主要介绍Kotlin的创建、调度与挂起相关的内容 一、引入 Kotlin 中引入 Coroutine 图片 二、启动 具体在使用程前,首先要配置对Kotlin的依赖。 确保所有的都会被追踪,Kotlin 不允许在没有使用CoroutineScope的情况下启动新的。 参考资料: 【1】破解Kotlin 【2】Kotlin Jetpack 实战 | 09.图解原理 【3】一文看透 Kotlin 本质 【4】抽丝剥茧Kotlin - 【5】Kotlin 实现原理 【6】kotlin -Android实战 【7】kotlin 官方指导文档

    14140

    Kotlin---(Coroutine)介绍

    切换完成后,也会继续在当前线程执行切换完成的Kotlin中的Kotlin1.3版本中,也提供了对应的库。 而在1.3之前的Kotlin版本中,Coroutine则是作为Experimental的功能提供的。 Kotlin中的也是通过线程池来实现的。 而在Kotlin中,在线程之上也建立了在线程中类似于Looper+Handler的机制,让可以在多个线程中切换,以及进行数据的传递。 而则可以比较好的避免这一点,虽然也是通过多线程实现的,并且也都会在多线程中执行。但是当该需要等待时,则会进行切换,但是切换的另一个还是运行在同一个线程中。 总结 是Ring3级别的"线程",但是一切操作都在Ring3中完成 的实现也是通过线程,也可以实现异步 也支持各个协间的通信 程之间的切换的损耗小于线程 间的数据也需要做同步 程之间的切换也需要保存当前的状态

    50220

    Kotlin 并发编程之

    Kotlin 并发编程之"" Kotlin简介 Kotlin, as a language, provides only minimal low-level APIs in its standard Kotlin 中的的实现原理是: coroutine == continuation + coroutine scope. 想要使用 Kotlin ,需要单独添加依赖: compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version Kotlin帮我们去完成线程的调度。 而这里GlobalScope.launch就是创建一个环境并且启动一个上下文包括了一个 调度器,它确定了相应的在执行时使用一个或多个线程。 调度器可以将的执行局限在指定的线程中,调度它运行在线程池中或让它不受限的运行。

    56720

    即学即用Kotlin -

    前言 上周在内部分享会上大佬同事分享了关于 Kotlin 的知识,之前有看过 Kotlin 的一些知识,以为自己还挺了解的,结果... 在这一次分享中,发现 Flow 和 Channel 这一块儿知识是自己不怎么了解的,本文也将着重和大家聊一聊这一块儿的内容,部分将分为三篇,本文是第一篇: “《即学即用Kotlin - 》 《抽丝剥茧 Kotlin - 基础篇》 《抽丝剥茧Kotlin - Flow篇》 目录 一、基础 1. 我将会在下一篇文章中和大家讨论的原理,欢迎大家关注。 学习kotlin 还是很有必要的,我们团队在开发新的功能的时候,也全部选择了 Kotlin。 参考文章: “《最全面的Kotlin: Coroutine/Channel/Flow 以及实际应用》 《Kotlin中文站》 《Kotlin用力瞥一眼》

    65020

    相关产品

    • 云端智造协同平台

      云端智造协同平台

      云端智造协同平台(CIMCP),云端部署并运行在手机、平板、电脑端,覆盖采购、排程、生产、物料、质检、设备等核心制造流程,帮助工厂低成本、高效率地实现从客户下单、原料入厂到成品出厂之间的全链路数字化管理。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券