首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin-特殊阻塞

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

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

Kotlin 总结

不过,我们学习 Kotlin,一开始确实可以从线程控制角度来切入。因为在 Kotlin 中,一个典型使用场景就是线程控制。...c.suspend suspend是 Kotlin 最核心关键字,几乎所有介绍 Kotlin 文章和演讲都会提到它。它中文意思是「暂停」或者「可挂起」。...所以我们想要自己写一个挂起函数,仅仅只加上 suspend 关键字是不行,还需要函数内部直接或间接地调用到 Kotlin 框架自带 suspend 函数才行。 3.suspend 意义?...所以,创建一个 suspend 函数,为了让它包含真正挂起逻辑,要在它内部直接或间接调用 Kotlin 自带 suspend 函数,你这个 suspend才是有意义。...4,Kotlin 实战 5,漫画:什么是? 向大佬们致敬。

2.2K10

Kotlin开篇

Kotlin》均基于Kotlinx-coroutines 1.3.70 新开个坑,专门讲kotlin。聊程之前先说一下具体聊什么内容。 · 是什么? · 什么时候用?...· 核心是什么? · kotlin和其他语言有什么异同? kotlin出现其实比kotlin语言还晚一点。在当前这个版本,甚至都还处于一个不稳定迭代版本中。...作为一个独立依赖包,它源码可以从github上获取,《Kotlin》分析源码就是以github上master分支为参考。 没那么难 出现是为了解决异步编程中遇到各种问题。...这个问题涉及到KotlinScope,调度,也是实现核心逻辑 Kotlin不是第一个提出 实际上在Kotlin之前就有不少语言实践了这个概念。比如python,golang。...kotlin还在发展 如果去看kotlin源码的话会发现里面有很多 exeprimental api和实现逻辑。

86220

破解 Kotlin (5) - 取消篇

关键词:Kotlin 取消 任务停止 任务取消需要靠内部调用协作支持,这就类似于我们线程中断以及对中断状态响应一样。 1. 线程中断 我们先从大家熟悉的话题讲起。...这段代码 ① 处启动了一个子,它内部先输出 1,接着开始 delay, delay 与线程 sleep 不同,它不会阻塞线程,你可以认为它实际上就是触发了一个延时任务,告诉调度系统 1000ms...再谈 Retrofit 扩展 4.1 Jake Wharton Adapter 存在问题 我在破解 Kotlin - 入门篇(https://www.bennyhuo.com/2019...,与它外部隔离,内部遵循默认作用域规则。...如果 cancel 抛异常而没有捕获的话,那么等同于内部抛出异常,具体如何传播看所在作用域相关定义了。

1.7K50

破解 Kotlin (2) - 启动篇

本文将为大家详细介绍几种启动模式之间不同,当然,我不打算现在就开始深入源码剖析原理,大家只需要记住这些规则就能很好使用了。 1....在 Kotlin 当中,启动模式是一个枚举: public enum class CoroutineStart { DEFAULT, LAZY, @ExperimentalCoroutinesApi...在 Nodejs 中,Kotlin 默认调度器则并没有实现线程切换,输出结果也会略有不同,这样似乎更符合 JavaScript 执行逻辑。 更多调度器的话题,我们后续还会进一步讨论。...我们在前面提到我们示例都运行在 suspend main 函数当中,所以 suspend main 函数会帮我们直接启动一个,而我们示例都是它,所以这里 5 调度取决于这个最外层调度规则了...关于调度,我们后面再聊。 3. 小结 本文通过一些例子来给大家逐步揭开面纱。

95530

破解 Kotlin (6) - 挂起篇

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

1.1K30

破解 Kotlin (3) - 调度篇

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

72520

Kotlin系列(二)

在进行业务开发时,我们通常会基于官方框架(kotlinx.coroutines)来运用Kotlin优化异步逻辑,不过这个框架过于庞大和复杂,如果直接接触它容易被劝退。...3.创建   我们已经给出了描述,知道了应该具有哪些能力,接下来就需要如何封装创建了。   ...该作用域包括以下三种: 顶级作用域:没有父所在作用域为顶级作用域 协同作用域:中启动新,新为所在,这种情况下子所在作用域默认为协同作用域。...主同作用域:与作用域在父子关系上一致,区别在于处于该作用域下出现未捕获异常时不会将异常向上传递给父。   ...除了这三种作用域中提到行为外,父子程之间还存在以下规则: 父被取消,则所有的子均被取消 父需要等待子执行完毕后才最终进入完成状态 子会继承父上下文中元素,如果自身有相同

21110

java框架quasar和kotlin

,他标记了代码起始和结束位置,以及方法需要暂停位置,每个协任务统一由FiberScheduler去调度,内部维护了一个或多个ForkJoinPool实例。...而反观,基于固定几个线程调度,可以轻松实现百万级处理,而且内存稳稳。 后记 最后,博主以为Quasar只是一个框架层面的东西,所以就又去看了下同样是jvm语言kotlin。...,有种震惊赶脚,kotlin同步模型牛逼呀,瞬时感觉到发现了java里骚操作了,可以使用kotlin来代替java中多线程操作。...所以就有下面这个kotlin实现代码: @Service class KotlinAsyncService(private val weatherService: GetWeatherService...io操作,io操作是阻塞并发也就变成了调度几个线程并发了。

28730

Kotlin---使用

第一个 在使用程之前,需要保证Kotlin-Gradle-Plugin版本高于1.3。目前最高版本为1.3.11。...否则编译会报错 首先来创建一个: GlobalScope.launch { // 在后台启动一个新并继续 delay(1000L) // 非阻塞等待 1 秒钟(默认时间单位是毫秒...并且这样执行,并不会阻塞主线程执行 delay函数只能在中使用,否则编译不过,尽量避免使用GlobalScope.launch创建,当我们使用 GlobalScope.launch 时...如果我们忘记保持对新启动引用,它还会继续运行。 阻塞runBlocking GlobalScope.launch启动了一个线程创建新,并没有阻塞当前线程。...,会等待coroutineScope中都执行完毕后,才会继续执行 挂起函数 当代码超级多时候,通常都会把这些代码提取到一个函数中。

1.2K20

Kotlin 挂起和恢复 ② ( 挂起 和 线程阻塞 对比 )

文章目录 一、挂起 和 线程阻塞 对比 1、挂起 2、线程阻塞 3、挂起和阻塞对 UI 影响 4、挂起分析 一、挂起 和 线程阻塞 对比 ---- 挂起是概念 , 只能在中使用...; 阻塞是线程中概念 , 可以在主线程和子线程中使用 ; 1、挂起 挂起 操作 : 在中使用 delay 函数 , 挂起 20 秒时间 , 然后 20 秒后更新 UI ; delay...函数是 挂起 suspend 函数 ; // 创建 GlobalScope.launch(Dispatchers.Main) { delay(20000) // 主线程更新 UI... 挂起 操作 不会出现 阻塞 UI 刷新情况 , 挂起 20 秒不影响 UI 刷新显示 ; 但是如果将主线程阻塞 , UI 不再刷新 , 会出现 ANR 崩溃异常 ; 图形化 GUI 系统中..., 会将挂起点状态保存 , 同时停止执行 , 等待挂起函数执行完毕后 , 继续执行 ; 相当于阻塞 , 不会阻塞主线程 ;

1.7K20

Kotlin | 是什么?

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

54310

Kotlin系列(一)

一.定义   最近看了一本有关kotlin书籍,对又有了不一样了解,所以准备写一个关于kotlin系列文章。   ...三.Kotlin基础设施   Kotlin实现分为两个层次: 基础设施层:标准库API,主要对提供了概念和语义上最基本支持 业务框架层:上层框架支持,也就是在基础设施层基础上再封装一层...  为了便于区分,我们将Kotlin基础设施层创建称为简单,将基于业务框架层创建称为复合,这一小节主要来讨论简单使用。...在回答这个问题之前我们先来了解一个概念:挂起点,在内部挂起函数调用处被称为挂起点,只有当挂起点处发生异步调用,当前才会被挂起,直到这个协对应continuation实例resumeWith...(6)拦截器   我们现在已经知道Kotlin可以通过调用挂起函数实现挂起,可以通过Continuation恢复调用实现恢复,还知道可以通过绑定一个上下文来设置一些数据来丰富能力,

18710

kotlin--入门

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

56310

Kotlin(一)——入门

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

1.2K20
领券