美文网首页程序员
Kotlin 协程的非阻塞挂起

Kotlin 协程的非阻塞挂起

作者: YiiY34 | 来源:发表于2020-05-19 10:17 被阅读0次

类似rxjava的线程框架
可调度线程不需要回调

image.png

协程执行到中途调用suspend修饰的方法就是一个挂起操作

需要注意的是suspend只能算是一个提醒


image.png

如果你创建一个 suspend 函数但它内部不包含真正的挂起逻辑,编译器会给你一个提醒:redundant suspend modifier,告诉你这个 suspend 是多余的。

因为你这个函数实质上并没有发生挂起,那你这个 suspend 关键字只有一个效果:就是限制这个函数只能在协程里被调用,如果在非协程的代码中调用,就会编译不通过。

所以,创建一个 suspend 函数,为了让它包含真正挂起的逻辑,要在它内部直接或间接调用 Kotlin 自带的 suspend 函数,你的这个 suspend 才是有意义的。

重点了 什么是非阻塞挂起

因为根据图一协程中[假设delay(5000)没有被注释 ] Log输出3需要需要等fun1执行完毕才会执行
这里看起来明明就是阻塞的对吧

从语义上理解「非阻塞式挂起」,讲的是「非阻塞式」这个是挂起的一个特点,也就是说,协程的挂起,就是非阻塞式的,协程是不讲「阻塞式的挂起」的概念的。
我们讲「非阻塞式挂起」,其实它有几个前提:并没有限定在一个线程里说这件事,因为挂起这件事,本来就是涉及到多线程。
就像视频里讲的,阻塞不阻塞,都是针对单线程讲的,一旦切了线程,肯定是非阻塞的,你都跑到别的线程了,之前的线程就自由了,可以继续做别的事情了。
所以「非阻塞式挂起」,其实就是在讲协程在挂起的同时切线程这件事情。

ps:因为它在写法上和单线程的阻塞式是一样的。协程只是在写法上「看起来阻塞」,其实是「非阻塞」的,因为在协程里面它做了很多工作,其中有一个就是帮我们切线程。

相关文章

  • 破解 Kotlin 协程(6) - 协程挂起篇

    关键词:Kotlin 协程 协程挂起 任务挂起 suspend 非阻塞 协程的挂起最初是一个很神秘的东西,因为我们...

  • Kotlin 协程的非阻塞挂起

    类似rxjava的线程框架可调度线程不需要回调 协程执行到中途调用suspend修饰的方法就是一个挂起操作 需要注...

  • Kotlin协程

    协程是什么? 协程本质是Kotlin官方提供的线程API(本质就是一个线程框架)最基本的功能是并发非阻塞式挂起 ...

  • 八,Kotlin协程详解

    概念 Kotlin协程是一个异步框架,是建立在线程基础上轻量级的线程.协程依赖于线程,但是协程挂起时不需要阻塞线程...

  • Flow简介

    Kotlin 协程中使用挂起函数可以实现非阻塞地执行任务并将结果返回回来,但是只能返回一个计算结果。但是如果希望有...

  • Kotlin - 协程中的那些关键点

    ### 写在前面 1.协程“非阻塞式挂起” 你真的弄懂了吗? 2.协程suspend关键字到底有多神奇? 3.协程...

  • Kotlin协程挂起函数与全局协程实例分析

    Kotlin协程挂起函数与全局协程实例分析 挂起函数【suspend】 这是因为 delay 是一个特殊的 挂起函...

  • 【Kotlin&Android】协程入门到放弃(1)

    Kotlin1.1的时候介绍了协程,一种写异步的非阻塞的新方法,使用协程我们要引入kotlinx.coroutin...

  • 聊聊Kotlin 协程的「非阻塞式」

    在kotlin协程中,有个非常重要的关键字 —— suspend,这个关键字就是协程最核心的那个「非阻塞式」的「挂...

  • Kotlin(二十三)协程(非阻塞挂起和suspend关键字)

    一.概念 1.非阻塞挂起 协程中执行的任务,从协程所运行的线程剥离,所在的线程继续执行自己的任务。这个剥离也就叫做...

网友评论

    本文标题:Kotlin 协程的非阻塞挂起

    本文链接:https://www.haomeiwen.com/subject/czevohtx.html