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

Kotlin-特殊的阻塞

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

2.3K20

Kotlin 总结

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

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

Kotlin开篇

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

85020

破解 Kotlin (5) - 取消篇

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

1.7K50

破解 Kotlin (2) - 启动篇

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

94730

破解 Kotlin (6) - 挂起篇

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

1.1K30

破解 Kotlin (3) - 调度篇

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

71620

Kotlin系列(二)

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

20410

【翻译】深入 Kotlin

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

1.4K10

Kotlin | 是什么?

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

53510

Kotlin系列(一)

一.的定义   最近看了一本有关kotlin的书籍,对又有了不一样的了解,所以准备写一个关于kotlin系列的文章。   ...三.Kotlin的基础设施   Kotlin实现分为两个层次: 基础设施层:标准库的API,主要对提供了概念和语义上最基本的支持 业务框架层:的上层框架支持,也就是在基础设施层的基础上再封装一层...  为了便于区分,我们将Kotlin的基础设施层创建的称为简单,将基于业务框架层创建的称为复合,这一小节主要来讨论简单的使用。...(4)函数的挂起   我们已经知道使用suspend关键字可以声明一个挂起函数,挂起函数只能在体内或其他挂起函数中调用。这样一来,整个kotlin语言体系就可以分为两派:普通函数和挂起函数。...(6)的拦截器   我们现在已经知道Kotlin可以通过调用挂起函数实现挂起,可以通过Continuation的恢复调用实现恢复,还知道可以通过绑定一个上下文来设置一些数据来丰富的能力,

16710

kotlin--入门

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

55210

Kotlin(一)——入门

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

1.2K20

Kotlin系列(三)

1.前言   前面两节,我们运用了kotlin提供的简单去实现了一套更易用的复合,这些基本上是以官方框架为范本进行设计和实现的。...虽然我们还没有直接接触kotlin官方框架,但对它的绝大多数功能已经了如指掌了。...本节,我们来探讨一下官方框架的更多功能,并将其运用到实际的生产当中,在这里,我以在Android中使用kotlin官方框架为例进行讲述。...2.launch函数启动一个   在Android开发中,我们一般将的作用域和Android组件的lifeCycle绑定在一起,这样,当组件销毁的时候,的作用域就会取消,也就销毁了,这样不会造成内存泄漏...5.的超时取消   kotlin官方框架为我们提供了一个withTimeout()函数用于执行超时取消设置,这个api的定义如下: public suspend fun withTimeout

20010

笔记 | 初探Kotlin

如何理解 是一种不同于进程和线程的存在,其本质是一种函数,同一线程中的多个协是串行执行的,但为了理解仍然需要三者一起对比。...进程、线程、三者的上下文切换对比: 进程 线程 切换者 操作系统 操作系统 用户(编程者/应用程序) 切换时机 根据操作系统自己的切换策略,用户不感知 根据操作系统自己的切换策略,用户不感知...,可以知道的应用场景是I/O密集型任务,而非计算密集型任务。...info: 我认为关于的全部,最佳参考为Google官方编写的文章: 谷歌开发者:在 Android 开发中使用 | 背景介绍 在安卓开发中使用 Kotlin 1.3版本中开始引入了一种全新处理并发的方式...在 Kotlin 中,所有都必须在调度器中运行,即使它们是在主线程上运行也是如此。suspend并不代表后台执行,在哪里执行由调度器决定。可以自行暂停,而调度器负责将其恢复。

50820

Kotlin知识累计

一、什么是 说明:仅限于 JVM和Android上,就是一个类似安卓handler和java中线程池的一种线程框架,只是对线程高级封装的API,的本质还是线程——=漂亮的多线程。...挂起函数必须要带suspend修饰,但不是说被suspend修饰的函数就是线程切换的点,而是这个挂起函数有直接或间接的调用kotlin内自带的挂起函数来实现挂起,从而才实现线程的切换;suspend...修饰只是提醒kotlin这一块是一个耗时操作,避免卡顿。...2.这里有别于一个内创建多个子去挂起,内的单个子挂起了会去执行其他子,务必不要搞混了。withContext挂起的是内部包裹的代码块,阻塞当前运行withContext的。...6、Flow流:是冷流,就是 Kotlin 与响应式编程模型结合的产物,你会发现它与 RxJava 非常像,用于替代RxJava。

12810

Kotlin 底层实现 ① ( Kotlin 分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 基础设施层标准库 Api 实现 )

文章目录 一、Kotlin 分层架构 二、使用 Kotlin 基础设施层标准库 Api 实现 一、Kotlin 分层架构 ---- Kotlin 分层架构 : 在 Kotlin 中..., 分为两层 ; 基础设施层 : Kotlin 提供了 标准库 Api , 为提供 概念 , 语义 支持 , 是 实现的基础 ; Kotlin 的底层支持 ; 基础 Api ;...业务框架层 : Kotlin 的 上层框架 , 使用方便 ; 在之前博客中使用的 GlobalScope 类 , launch 函数 , delay 挂起函数 等都属于 业务框架层 , 都是 Kotlin... 的上层实现 ; 在 基础 Api 的基础上 进行了一层封装 , 形成了方便开发者使用的框架 ; 基础设施层 : 基础设施层 的 基础 Api 定义在 kotlin.coroutines.*...: 上述 基础设施层 的 基础 Api 定义在 kotlin.coroutines.* 包下 ; import kotlin.coroutines.* 业务框架层 : 如果调用 常见的 Api

74910
领券