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

Kotlin-特殊的阻塞

阻塞是种特殊的启动方式,一般是用 runBlocking{} 扩起来一段。...这里给出结果,改用GlobalScope.launch之后,子会在一个独立的线程里运行。 runBlocking 在kotlin官网上对于这个api的解释是桥接阻塞与非阻塞的世界。...没有的话就使用默认的eventloop。EventLoop是里对阻塞型coroutine进行调度的默认调度器。runBlocking和launch的主要区别就靠EventLoop实现。...在创建完coroutine后就进入派发流程了,这部分和Kotlin-一个的生命周期中的逻辑比较相似,下面也会讲到。...这个问说明,runBLocking{}这种,它的运行逻辑是先把父放队列里,然后取出来执行,执行完毕再把子入队,再出队子,用同样的方式递归。

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

Kotlin 总结

1.简介 并不是 Kotlin 提出来的新概念,其他的一些编程语言,例如:Go、Python 等都可以在语言层面上实现,甚至是 Java,也可以通过使用扩展库间接地支持。...不过,我们学习 Kotlin 中的,一开始确实可以从线程控制的角度切入。因为在 Kotlin 中,的一个典型的使用场景就是线程控制。...2.好在哪 前面提到,launch 函数不是顶层函数,是不能直接用的,可以使用下面三种方法创建: // 方法一,使用 runBlocking 顶层函数 runBlocking { getImage...方法三是比较推荐的使用方法,我们可以通过 context 参数去管理和控制的生命周期(这里的 context 和 Android 里的不是一个东西,是一个更通用的概念,会有一个 Android 平台的封装配合使用...3.与线程 在 Kotlin 里,就是基于线程实现的一种更上层的工具 API,类似于 Java 自带的 Executor 系列 API 或者 Android 的 Handler 系列 API。

2.7K11

Kotlin---使用的异步

间的通信 间不能直接通过变量来访问数据,会导致数据原子性的问题,所以提供了一套Channel机制间传递数据。...基于的生产者\消费者 在中,可以通过produce模拟生产者生产数据。并且通过consume模拟消费者情况。...目前,在1.3.11版本的Kotlin中,produce与consume都还只是实验性的功能,没有正式release,使用时记得使用@ExperimentalCoroutinesApi标记使用的函数 runBlocking...${Thread.currentThread().name}") } coroutineContext.cancelChildren() // 取消所有子让主结束 } suspend...与线程一样,对于数据的操作无法保持原子性,所以在中,需要使用原子性的数据结构,例如AotimicInteger等,或者使用mutex.withLock,来处理数据的原子性 import kotlinx.coroutines

2.7K20

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

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

77410

Kotlin开篇

Kotlin》均基于Kotlinx-coroutines 1.3.70 新开个坑,专门讲kotlin。聊程之前先说一下具体聊的是的什么内容。 · 是什么? · 什么时候用?...· 的核心是什么? · kotlin和其他语言的有什么异同? kotlin的出现其实比kotlin语言还晚一点。在当前这个版本,甚至都还处于一个不稳定的迭代版本中。...到目前为止都还没进入kotlin的标准库,它是一个独立的依赖库,叫 Kotlinx。对于想在开发中使用的人来说,需要在依赖里加入kotlinx-core依赖。...在Kotlin使用非常方便, import kotlinx.coroutines.* fun main() { GlobalScope.launch { // 在后台启动一个新的并继续...这个问题涉及到Kotlin的Scope,调度,也是的实现核心逻辑 Kotlin不是第一个提出的 实际上在Kotlin之前就有不少语言实践了这个概念。比如python,golang。

87320

破解 Kotlin (2) - 启动篇

本文将为大家详细介绍的几种启动模式之间的不同,当然,我不打算现在就开始深入源码剖析原理,大家只需要记住这些规则就能很好的使用了。 1....在 Kotlin 当中,启动模式是一个枚举: public enum class CoroutineStart { DEFAULT, LAZY, @ExperimentalCoroutinesApi...在 Nodejs 中,Kotlin 的默认调度器则并没有实现线程的切换,输出结果也会略有不同,这样似乎更符合 JavaScript 的执行逻辑。 更多调度器的话题,我们后续还会进一步讨论。...所以这个所谓的”需要“,其实是一个很有趣的措辞,后面你还会看到我们也可以通过 await 表达对 Deferred 的需要。...DefaultDispatcher-worker-1 @coroutine#1] 3 22:00:31:916 [DefaultDispatcher-worker-1 @coroutine#1] 5 方括号当中是线程名,我们发现执行时会修改线程名让自己显得颇有存在感

96230

破解 Kotlin (5) - 取消篇

关键词:Kotlin 取消 任务停止 的任务的取消需要靠内部调用的协作支持,这就类似于我们线程中断以及对中断状态的响应一样。 1. 线程的中断 我们先从大家熟悉的话题讲起。...再谈 Retrofit 的扩展 4.1 Jake Wharton 的 Adapter 存在的问题 我在破解 Kotlin - 入门篇(https://www.bennyhuo.com/2019...(t) 将异常再抛回来了。...) ,大家也可以直接添加依赖进行使用: compile 'ru.gildor.coroutines:kotlin-coroutines-retrofit:1.1.0' 这个框架代码量很少,但经过各路 Kotlin...最后我们还分析了一下 Retrofit 的扩展的一些问题和解决方法,这个例子也进一步可以引发我们对作用域以及如何将现有程序化的思考。

1.7K50

破解 Kotlin (6) - 挂起篇

关键词:Kotlin 挂起 任务挂起 suspend 非阻塞 的挂起最初是一个很神秘的东西,因为我们总是用线程的概念去思考,所以我们只能想到阻塞。不阻塞的挂起到底是怎么回事呢?...,为了做到这一点,我们用 Java 仿写一下这段逻辑: 注意,下面的代码逻辑上并不能做到十分严谨,不应该出现在生产当中,仅供学习理解使用。...就是 Kotlin 编译之后产生的字节码。...体的执行就是一个状态机,每一次遇到挂起函数,都是一次状态转移,就像我们前面例子中的 label 不断的自增实现状态流转一样 如果能够把这两点认识清楚,那么相信你在学习其他概念的时候就都将不再是问题了...小结 不同以往,我们从这一篇开始毫无保留的为大家尝试揭示背后的逻辑,也许一时间可能有些难懂,不过不要紧,你可以使用一段时间之后再来阅读这些内容,相信一定会豁然开朗的。

1.1K30

破解 Kotlin (3) - 调度篇

关键词:Kotlin 异步编程 上一篇我们知道了启动的几种模式,也通过示例认识了 launch 启动使用方法,本文将延续这些内容从调度的角度进一步为大家揭示的奥义。 ? 1....对比前面的 RxJava 的做法,你会发现这段代码其实很容易理解,你甚至会发现使用场景与 RxJava 竟是如此的相似。...Kotlin 设计者也特别害怕大家注意不到这一点,还特地废弃了两个 API 并且开了一个 issue 说我们要重做这套 API,这两个可怜的家伙是谁呢?...如果大家在代码中使用锁之类的并发工具就反而增加了代码的复杂度,对此我的建议是大家在编写代码时尽量避免对外部作用域的可变变量进行引用,尽量使用参数传递而非对全局变量进行引用。...上一篇文章我们提到了 suspend main 会启动一个,我们示例中的都是它的子,可是这个最外层的到底是怎么的呢?

73320

【翻译】深入 Kotlin

【翻译】深入 Kotlin 2017-10-26 by Liuqingwen | Tags: Kotlin 翻译 | Hits ? 一、前言 翻译好的文章也是一种学习方法!...我将会指导你使用相关的基本示例,并观察背后到底发生了什么。 为什么像这种解决方案非常有必要? 在现代应用程序开发中,处理多线程任务是不可避免的工作。...一边在 UI 上显示花哨的加载动画一边等待网络请求就是一个简单的例子,这不得不使用异步代码解决。...解决方案 3 : Coroutines 这是我们使用实现的代码的模样: button.setOnClickListener { launch(UI){ val userString...那么让我们来看看具体怎样使用命令式的风格写出类似的异步代码吧! 如何使用基于一种新的函数类型,叫做挂起函数。我们可以在函数名称前使用一种新的语言关键字 suspend 标记。

1.4K10

Kotlin系列(一)

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

19710

Kotlin | 是什么?

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

55410

Kotlin系列(二)

在进行业务开发时,我们通常会基于官方的框架(kotlinx.coroutines)运用Kotlin优化异步逻辑,不过这个框架过于庞大和复杂,如果直接接触它容易被劝退。...所以,为了我们在后续的学习中游刃有余,在使用官方给出的复合时能够胸有成竹,我们暂且抛开它,按照它的思路实现一个轻量版的框架。...} val result=deferred.await() println(result)//将会打印"使用async启动" } 4.的调度   截至目前,我们已经大致用程序勾勒出一个比较完善的复合了...需要调度的位置就是挂起点的位置,当执行到挂起点的位置时,如果产生了异步行为,就会在这个挂起点挂起,只有在挂起点正真挂起时,我们才有机会实现调度,而实现调度器需要使用的拦截器。...IO 调度器使用一个专门的线程池,允许执行大量的 IO 操作而不阻塞线程 无限制调度器(Dispatchers.Unconfined):允许在调用挂起函数的线程中继续执行,直到第一个挂起点。

22710

笔记 | 初探Kotlin

info: 我认为关于的全部,最佳参考为Google官方编写的文章: 谷歌开发者:在 Android 开发中使用 | 背景介绍 在安卓开发中使用 Kotlin 1.3版本中开始引入了一种全新处理并发的方式...:,可以在 Android 平台上使用简化异步执行的代码,主要用来解决两个问题: 处理耗时任务 (Long running tasks),这种任务常常会阻塞住主线程; 保证主线程安全 (Main-safety...在 Kotlin 中,所有都必须在调度器中运行,即使它们是在主线程上运行也是如此。suspend并不代表后台执行,在哪里执行由调度器决定。可以自行暂停,而调度器负责将其恢复。...Kotlin提供了以下三种调度器并罗列了其使用场景: 调度器名称 运行线程 使用场景 适用案例1 适用案例2 适用案例3 Dispatchers.Main Android上的主线程 用来处理UI交互和一些轻量级任务...由于 withContext本身就是一个suspend函数,它会使用保证主线程安全。

53320

Kotlin系列(三)

1.前言   前面两节,我们运用了kotlin提供的简单去实现了一套更易用的复合,这些基本上是以官方框架为范本进行设计和实现的。...虽然我们还没有直接接触kotlin官方框架,但对它的绝大多数功能已经了如指掌了。...本节,我们探讨一下官方框架的更多功能,并将其运用到实际的生产当中,在这里,我以在Android中使用kotlin官方框架为例进行讲述。...在ViewModel中,我们可以直接使用viewModelScope这个作用域去创建,在Activity/Fragment这些拥有生命周期的组件中,我们可以使用lifecycleScope去创建...5.的超时取消   kotlin官方框架为我们提供了一个withTimeout()函数用于执行超时取消设置,这个api的定义如下: public suspend fun withTimeout

23010
领券