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

Kotlin 底层实现 ③ ( 结构化并发 | MainScope 作用 | 取消协作用 | Activity 实现 CoroutineScope 作用接口 )

作用 : GlobalScope : 该作用 进程级别的 , 与应用进程同级 , 即使 Activity 被销毁 , 任务也可以继续执行 ; MainScope : 该 作用仅在 Activty...一个 函数 , 其返回值类型为 CoroutineScope 作用 ; 这是使用了设计模式中的 工厂模式 , 生产一个 作用 实例对象 ; 之后的 操作都要定义在该作用域中 ;... 作用的扩展函数 , 其后的代码块参数就是 作用 , 在其中执行任务 ; public fun CoroutineScope.launch( context: CoroutineContext...任务调度器 , 执行挂起函数 , 系统会自动分配一个 任务调度器 ; 二、取消 MainScope 作用 ---- 调用 MainScope 作用 的 cancel 函数 , 即可取...消该 作用 , 同时 该作用内的任务不管是否执行完毕 都一并取消 , 该函数 CoroutineScope 的扩展函数 ; /** * 取消这个范围,包括它的作业和它的所有子任务

1.2K10

Kotlin 异常处理 ② ( SupervisorJob | supervisorScope 作用构建器函数 )

文章目录 一、SupervisorJob 二、supervisorScope 作用构建器函数 在上一篇博客介绍了 异常处理 【Kotlin 异常处理 ① ( 根异常处理...; SupervisorJob 实现 : 创建 SupervisorJob , 需要先 创建一个 作用 , 在 CoroutineScope 构造函数 中 传入 SupervisorJob...作用 调用 launch 构建器函数 , 即可 创建 SupervisorJob , 这些可以自己处理异常 , 不会向父传递异常 ; 代码示例 : // 先创建 Supervisor...作用 // 在该作用下创建的都是 SupervisorJob val supervisorScope = CoroutineScope(SupervisorJob()) // 通过 Supervisor...作用构建器函数 ---- 使用 supervisorScope 作用构建器函数 , 可以直接创建一个 SupervisorScope 作用 , 在该作用域中定义的 , 都是 SupervisorJob

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

Kotlin 启动 ⑤ ( 作用构建器 | runBlocking 函数 | coroutineScope 函数 | supervisorScope 函数 )

函数 ) 1、作用构建器概念 2、coroutineScope 作用构建器 示例 3、supervisorScope 作用构建器 示例 一、结构化并发 ---- 在 【Kotlin...底层实现 ② ( 调度器 | 任务泄漏 | 结构化并发 ) 【Kotlin 底层实现 ③ ( 结构化并发 | MainScope 作用 | 取消协作用 | Activity...实现 CoroutineScope 作用接口 ) 【Kotlin 底层实现 ④ ( 结构化并发 | viewModelScope 作用示例 ) 博客中介绍了 结构化并发 ; 结构化并发的作用...; 二、作用构建器 ( runBlocking 函数 | coroutineScope 函数 ) ---- 结构化并发 通过 作用 CoroutineScope 管理任务 ; 作用...构建器 结构化并发 的重要组成部分 ; 常用的 作用构建器 有 coroutineScope 和 runBlocking ; runBlocking 普通函数 , 可以在 普通的代码位置使用

49230

Kotlin 底层实现 ④ ( 结构化并发 | viewModelScope 作用示例 )

文章目录 一、viewModelScope 作用作用 二、viewModelScope 作用示例 常见的 CoroutineScope 作用 : GlobalScope : 该作用 进程级别的..., 与应用进程同级 , 即使 Activity 被销毁 , 任务也可以继续执行 ; MainScope : 该 作用仅在 Activty 中 , 如果 Activity 被销毁 , 则 在 onDestory...Activity 中使用 , 与 Activity 生命周期绑定 ; 一、viewModelScope 作用作用 ---- viewModelScope 作用 需要绑定 ViewModel 生命周期..., 在特定界面中 , 如可旋转屏幕的 Activity 界面中 , 如果使用 MainScope 作用 , 当屏幕旋转时 , 就会在 onDestory 生命周期函数中 取消协作用 , 此时相关的临时数据都被取消了...; 当旋转 Activity 界面时 , 会调用当前 Activity 的 onDestory 生命周期函数 , 自然对应的作用也会被取消 , 因此引入 viewModelScope 作用 ,

92620

Kotlin 取消 ① ( 作用取消 | 作用取消 | 通过抛出异常取消协 | Job#cancel 函数 | 自定义异常取消协 )

文章目录 一、取消 二、作用取消 三、作用取消 四、通过抛出异常取消协 1、Job#cancel 函数 2、默认异常取消协 3、自定义异常取消协 一、取消 ----...取消 : 取消协作用 : 取消 作用 会将该作用域中的 所有 子 一同取消 ; 取消子 : 子 的取消 不会影响 同一层级的 兄弟的执行 ; 通过抛出异常取消协 : 取消通常会通过...函数 ; 二、作用取消 ---- 创建 作用 CoroutineScope 实例对象 , 传入 调度器 : // 创建作用 val coroutineScope = CoroutineScope...; 然后 , 在作用域中 创建两个子 ; 最后 , 取消协作用 , 同时该作用内的两个子也一并被取消了 ; package kim.hsl.coroutine import android.os.Bundle...:31:51.937 I job1 子执行完毕 10:31:51.938 I job0 子执行完毕 三、作用取消 ---- 单独取消 作用 中的 子 , 作用

86620

Kotlin | 什么

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

56610

什么

,又称微线程,纤。英文名Coroutine。 的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。...子程序调用总是一个入口,一次返回,调用顺序明确的。而的调用和子程序不同。 看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。...,在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A,结果可能: 1 2 x y 3 z 但是在A中没有调用B的,所以的调用比函数调用理解起来要难一些。...看起来A、B的执行有点像多线程,但的特点在于是一个线程执行,那和多线程比,有何优势? 最大的优势就是极高的执行效率。...因为一个线程执行,那怎么利用多核CPU呢?最简单的方法多进程+,既充分利用多核,又充分发挥的高效率,可获得极高的性能。

72240

什么

(Coroutines)一种比线程更加轻量级的存在。完全由程序所控制(在用户态执行),带来的好处性能大幅度的提升。...一个线程内的多个协的运行串行的,这点和多进程(多线程)在多核CPU上执行时不同的。 多进程(多线程)在多核CPU上可以并行的。当线程内的某一个运行时,其它必须挂起。...因此只有不够的,无法解决问题的。还需要异步来配合。 因此,实际上我们可以把可以看做一种用户级线程的实现。...+异步才能发挥出的最大作用 的使用 计算型的操作,利用来回切换执行,没有任何意义,来回切换并保存状态 反倒会降低性能。...不是什么银弹,要注意使用场景。

10.1K31

Kotlin 简介 ( 概念 | 作用 | 创建 Android 工程并进行相关配置开发 | 异步任务与对比 )

文章目录 一、概念 二、作用 三、创建 Android 工程并进行相关配置 1、创建 Android 工程 2、配置环境 3、布局文件 4、异步任务代码示例 5、代码示例 6、完整代码示例...四、异步任务与对比 一、概念 ---- Coroutine Kotlin 语言 中新出现的概念 , 在 Java 语言中没有 ; 基于 线程 的 , 轻量级 线程 ;...二、作用 ---- 主要作用如下 : 处理耗时任务 : 耗时任务 通常需要 阻塞主线程 , 线程量级太重 , 耗时任务 推荐在中执行 ; 保证主线程安全 : 从主线程中 安全地调用可能会挂起的函数...语言 , Android Studio 会自动添加 Kotlin 语言支持 ; 2、配置环境 在 AndroidManifest.xml 清单文件 中 , 添加网络权限 : <uses-permission...GlobalScope.launch { // Dispatchers.IO 任务调度器, 用于执行耗时操作

3.4K20

【科普】什么

可能你会说,携谁不知道啊,不就是哪个用来订机票订酒店的软件么,这有什么好学的!这样的话你就错了,此非彼携,可不要傻傻分不清楚喽! 什么进程和线程 01 进程是什么 ?...02 线程又是什么 ? 线程从属于进程,程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程,线程拥有自己的栈空间。 线程具有五种状态: ?...什么 官方定义如下: A coroutine is a function that can suspend its execution (yield) until the given given...注意,这里要划一个重点,一种“伪多线程”,始终记得这一点,可以帮助我们来理解会这个概念。...缺点: 无法利用多核资源:的本质个单线程,它不能同时将 单个CPU 的多个核用上,需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非cpu密集型应用。

1.5K20

漫画:什么

————— 第二天 ————— ———————————— 什么进程和线程 有一定基础的小伙伴们肯定都知道进程和线程。 进程是什么呢?...什么 ,英文Coroutines,一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协。...代码中创建了一个叫做consumer的,并且在主线程中生产数据,中消费数据。 其中 yield python当中的语法。...当执行到yield关键字时,会暂停在那一行,等到主线程调用send方法发送了数据,才会接到数据继续执行。 但是,yield让暂停,和线程的阻塞有本质区别的。...的暂停完全由程序控制,线程的阻塞状态由操作系统内核来进行切换。 因此,的开销远远小于线程的开销。 的应用 有哪些编程语言应用到了呢?

32210

什么_什么时候使用和线程

大家好,又见面了,我你们的朋友全栈君。 先搞清楚,什么。 你可能已经听过『进程』和『线程』这两个概念。...你想下,前面几种情况自然没有什么话可说,但是如果在阻塞等待,是不是就浪费了。 其实阻塞的话我们的程序还有其他可执行的地方可以执行,不一定要傻傻的等! 所以就有了线程。...,有几个特点: 协同,因为由程序员自己写的调度策略,其通过协作而不是抢占来进行切换 在用户态完成创建,切换和销毁 ⚠️ 从编程角度上看,的思想本质上就是控制流的主动让出(yield)和恢复(resume...所以,yield就是yield,下次谁再说yield,我肯定把你xxxx。 PHP 前面介绍的时候说了,需要程序员自己去编写调度机制,下面我们来看这个机制怎么写。...$gen->valid() || $isReturnValue) { if ($stack->isEmpty()) { return; } // 如果gen已经执行完毕,或者遇到子需要返回值给主去处理

68020

什么和线程的区别

非常适合实现更熟悉的程序组件,如协作任务、异常、事件循环、迭代器、无限列表和管道。简而言之:(Goroutines)一种轻量级的并发编程模型,由编程语言或运行时环境管理,用于执行并发任务。...从一定程度来讲,可以说是“用同步的语义解决异步问题”,即业务逻辑看起来同步的,但实际上并不阻塞当前线程(一般靠事件循环处理来分发消息)。...go 示例代码下面一个使用 Go 协作的示例,这个示例展示了如何使用 sync.WaitGroup 和 channel 来实现程之间的协作:package mainimport ("fmt""sync...: Received", val)}}()wg.Wait() // 等待所有 worker 完成}和线程的区别属于用户级线程,线程属于内核级线程,线程的创建、上下文切换远比消耗更大。...属于非抢占式,不会被其它所抢占,而是由开发者自己调度;线程属于抢占式,受到操作系统调度。的编码相比与多线程的编码更加复杂,但是大多数场景下更适合大并发任务。

11720

java作用-什么JavaScript作用作用链?

作用作用链也是面试中出镜率很高的问题之一java作用java作用,同时也是中最重要的基础概念之一。   ...今天我们将通过最简单实际的代码来展示函数作用和全局作用,在下篇文章中,我们将介绍块级作用和暂时性死区。   ...作用基本知识   简单来说,作用就是用来规定变量的作用范围的,在任何语言当中都会有作用的概念,在ES6以前,只有函数作用和全局作用,ES6之后又增加块级作用。   ...函数作用和全局作用   函数作用非常简单,比如,执行下面的foo函数,变量a在函数foo的作用内,所以在函数内可以正常的访问该变量,输出bar    function foo()...,就会就近首先在函数内查找变量是否声明赋值,如果函数内无法找到该变量,就跳出当前函数作用,到上层作用域中进行查找,这里的上层作用可能也是一个函数作用,也可能全局作用

1.9K20

什么进程?线程?

阅读量: 29 本文从操作系统原理出发结合代码实践讲解了以下内容: 什么进程,线程和协? 它们之间的关系是什么? 为什么说Python中的多线程伪多线程?...组织好的代码流程, 需要线程来承载运行, 线程的资源, 但不会直接使用线程, 直接利用的执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程,...UI线程, 或新建新; 线程的资源。...,然后进行上下文切换,而在用户态由调度器完成,不需要陷入内核,这代价就小了(重要的); 为什么说Python中的多线程伪多线程?...因此说“Python的多线程鸡肋”有道理的。 但是,就如同单个cpu采用并发的方式一样,能否认它的作用吗? 对于cpu密集型的线程来说,GIL确实影响很大。对于IO密集型,影响很小。

1.1K20

破解 Kotlin 番外篇(1) - 什么被称为『轻量级线程』?

Kotlin从 v1.1 开始公测(Experimental) 到现在,已经算是非常成熟了,但大家对它的看法却一直存在各种疑问,为什么呢?...因为即便我们把 Kotlin 丢掉,单纯这个东西本身就已经长时间让大家感到疑惑了,不信的话可以单独搜一下或者 Coroutine,甚至连 Lua 之父在提到为什么鲜见于早期语言实现,就是因为这概念没有一个清晰的界定...在这两个平台上跑,Kotlin其实都是单线程的,又怎么讲个线程框架呢? 说到这儿可能又有人有疑问了,单线程要能做什么呢?这个前端同学可能会比较有感触,谁跟你们说的异步一定要多线程。。...默认的调度器 Main,并且这个 Main 会根据各自平台选择一个合适的事件循环,这样更能体现 Kotlin 在不同平台的一致性,例如对于 Android 来说 Main 就是 UI 线程上的事件循环...,对于 Swing 同样 Swing 的 UI 事件循环,只要是有事件循环的平台就默认基于这个循环来一个调度器,没有默认事件循环的也好办,Kotlin 本身就有 runBlocking 嘛,对于普通

1.9K20

继续Rxjava还是该试试Kotlin

0.前言 以前一直Kotlin作为实验性的一个库,前些日子发现1.3版本的kotlin relese了,所以就找时间研究了一下,本来早就想写这篇文章了,但是因为离职换工作的原因,迟迟未能动笔,...1.什么 1.1定义 我第一次接触在python的教程里,这里拿来用来解释一下:子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B...1.2和线程的关系 和线程,都能用来实现异步调用,但是这两者之间有本质区别的 (1)编译器级别的,线程系统级别的。的切换由程序来控制的,线程的切换由操作系统来控制的。...(2)协作式的,线程抢占式的。由程序来控制什么时候进行切换的,而线程有操作系统来决定线程之间的切换的。 (3)一个线程可以包含多个协。...关于还有一些其他的创建和使用方法,有兴趣的可以去看看官方教程。 3.Rxjava VS 相对RxJava有什么优点呢?

3.7K10

资源混淆如何影响到Kotlin

导言 随着kotlin的使用,也慢慢在我们工程中被开始被使用起来,但在我们工程中却遇到了一个问题,经过资源混淆处理之后的apk包,却不如期工作。...那么两者到底有什么关联呢,资源混淆又是如何影响到的使用的,通过阅读本篇你会马上知晓。...现在先不急着马上解决它,让我们看看为啥这几个文件的丢失就会导致上面那段代码工作不正常呢。既然有demo,那我们单步调试进去看看吧。...上面例子中调用了async函数,通过源码可以知道,如果start参数用的默认的情况下,那么最后都会走到startCoroutineCancellable函数,而这个函数内部会调用runSafely,内部所有的异常都会被这个函数...那么这里的MainDispatcher是什么呢?原来在调用withContext来切换线程的时候,会用到类MainCoroutineDispatcher。

2K33

什么Python变量作用

在程序中定义一个变量时,这个变量作用范围的,变量的作用范围被称为它的作用。 根据定义变量的位置,变量分为两种: 局部变量:在函数中定义的变量,包括参数,都被称为局部变量。...这是什么原因呢?这正是由于程序在 test() 函数中增加了“name=’孙悟空’”一行代码造成的。 Python 语法规定,在函数内部对不存在的变量赋值时,默认就是重新定义新的局部变量。...知识点扩展: python3 之 变量作用 作用: 指命名空间可直接访问的python程序的文本区域,这里的 ‘可直接访问’ 意味着:对名称的引用(非限定),会尝试在命名空间中查找名称; L:local...,局部作用,即函数中定义的变量; E:enclosing,嵌套的父级函数的局部作用,即包含此函数的上级函数的局部作用,但不是全局的; G:globa,全局变量,就是模块级别定义的变量; B:built-in...,内建作用,系统固定模块里面的变量,比如:int,bytearray等 到此这篇关于什么Python变量作用的文章就介绍到这了,更多相关Python变量作用详解内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持

66020

什么作用插槽?插槽与作用插槽的区别

,而不是在子组件里面 作用插槽渲染在子组件里面 1.插槽slot 在渲染父组件的时候,会将插槽中的先渲染。...(插槽的作用为父组件,插槽中HTML模板显示不显示、以及怎样显示由父组件来决定) 有name的父组件通过html模板上的slot属性关联具名插槽。没有slot属性的html模板默认关联匿名插槽。...2.作用插槽slot-scope 作用插槽在解析的时候,不会作为组件的孩子节点。会解析成函数,当子组件渲染时,会调用此函数进行渲染。...或者可以说成作用插槽子组件可以在slot标签上绑定属性值,在父组件可以拿到子组件的数据,通过子组件绑定数据传递给父组件。...// 作用插槽渲染在当前组件的内部,不是在父组件中 四、源码 1.initRender(初始化render,构建vm.

93730
领券