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

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

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

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

Kotlin 】Flow 异步流 ⑥ ( 调用 Flow#launchIn 函数指定流收集 | 通过取消流收集所在取消流 )

文章目录 一、调用 Flow#launchIn 函数指定流收集 1、指定流收集 2、Flow#launchIn 函数原型 3、代码示例 二、通过取消流收集所在取消流 一、调用 Flow..., 开始 收集元素 , 按照顺序逐个处理产生事件 ( 元素 ) ; 调用 Flow#launchIn 函数 , 传入 作用域 作为参数 , 可以 指定 收集 Flow 流元素 ; 在上一篇博客...【Kotlin 】Flow 异步流 ⑤ 中 , 调用 Flow#flowOn 函数 , 可以 指定 Flow 流发射元素 ; Flow#launchIn 函数返回值是 Job 对象 ,...是 任务对象 , 可调用 Job#cancel 函数取消该任务 ; 2、Flow#launchIn 函数原型 Flow#launchIn 函数原型 : /** * 终端流操作符,在[作用域]中...runBlocking 主 , 需要调用 join 等待执行完毕 } } /** * 使用 flow 构建器 Flow 异步流 *

72620

Kotlin 总结

c.suspend suspend是 Kotlin 最核心关键,几乎所有介绍 Kotlin 文章和演讲都会提到它。它中文意思是「暂停」或者「可挂起」。...所以我们想要自己写一个挂起函数,仅仅只加上 suspend 关键是不行,还需要函数内部直接或间接地调用Kotlin 框架自带 suspend 函数才行。 3.suspend 意义?...挂起操作 —— 也就是切线程,依赖是挂起函数里面的实际代码,而不是这个关键。 所以这个关键,只是一个提醒。 还记得刚才我们尝试自定义挂起函数方法吗?...因为你这个函数实质上并没有发生挂起,那你这个 suspend 关键只有一个效果:就是限制这个函数只能在里被调用,如果在非代码中调用,就会编译不通过。...四、总结 就是切线程; 挂起就是可以自动切回来切线程; 挂起阻塞式指的是它能用看起来阻塞代码写出非阻塞操作,就这么简单。 参考: 1,Kotlin 用力瞥一眼 - 学不会

2.6K11

爱奇艺网络编写高并发应用实践

; • 当套接满⾜可读或可写条件时,事件引擎设置套接对应事件状态并返回给调⽤者; • 调⽤者根据套接事件状态分别『回调』对应处理过程; • 对于⼤部分基于 TCP ⽹络应⽤,数据读写往往不是...在网络库中,内部有一个缺省IO调度,其负责处理与网络IO相关调度过程,故称之为IO调度: 每⼀个⽹络连接绑定⼀个套接字句柄,该套接绑定⼀个协; 当对⽹络套接进⾏读或写发生阻塞时...,将该套接添加⾄ IO 调度事件引擎中并设置读写事件,然后将该挂起;这样所有处于读写等待状态⽹络都被挂起,且与之关联⽹络套接均由 IO 调度事件引擎统⼀监控管理; 当某些⽹络套接满...⾜可读或可写条件时,IO 调度事件引擎返回这些套接状态,IO 调度找到与这些套接绑定对象,然后将这些追加至调度队列中,使其依次运⾏; IO 事件内部本身是由系统事件引擎...当套接所绑定因IO 可读被唤醒时,假设不取消该套接读事件,则该被某个线程『拿⾛』后,恰巧该套接又收到新数据,内核会再次触发事件引擎,调度器被唤醒,此时调度器也许就不知该如何处理了

79610

网络传输测速 - TCP聊天+传输文件服务器服务器套接v2.4 - socket文件传送测速

TCP聊天+传输文件服务器服务器套接v2.4 所有版本记录: v1.0 : TCP聊天服务器套接|PyQt5+socket(TCP端口映射+端口放行)+logging+Thread(含日志...,html)+anaconda打包32位exe(3.4万)|python高阶 v1.1 : python TCP套接服务器v1.1-新增服务端命令功能及修改bug(socket+PyQt5) v1.2...- PyQt5 server服务端来临 v1.8 : python TCP服务器v1.8 - PyQt5登录界面美化+淡入淡出 v1.9 : socketTCP文件+信息传递 - TCP聊天文件服务器...v1.9 - 划时代版本更新(4.6万) v2.0 : TCP聊天文件服务器v2.0 - 重大bug修复+PyQt5文件传输可视化 v2.1 : TCP聊天文件服务器v2.1 - 服务端线程管理...(threading.enumerate) v2.2 : TCP聊天文件服务器v2.2 - 服务端客户端套接解决分包/粘包问题 - SocketQueue继承以及减少冗余 v2.3 : gzip使用

3.7K10

Kotlin 实现原理解析

是一种程序组件,它可以挂起(suspend)和恢复(resume),而不会阻塞线程。Kotlin通过 suspend 关键来标记可以挂起函数。...在挂起函数内部,可以调用其他挂起函数,这使得可以执行长时间操作而不会阻塞线程。挂起函数通过使用suspend关键来标记,这告诉编译器该函数需要特殊处理。...挂起函数执行可以被调度器中断和恢复,其调用会被编译器转换为接受一个额外参数函数调用,这个参数是 Continuation 类型对象。...调度器是上下文一部分,可以在启动时指定,dispatch 方法负责将执行调度到适当线程。。调度器使得可以适应不同执行需求,提高了应用程序性能和响应性。...通过这些机制,Kotlin 能够在不阻塞线程情况下挂起和恢复执行,从而实现高效并发编程。

39010

爱奇艺网络编写高并发应用实践

2.1、⽹络⾮阻塞编程      下⾯给出了⾮阻塞⽹络编程常⻅设计⽅式:      • 使⽤操作系统提供多路复⽤事件引擎 API(select/poll/epoll/kqueue etc),将⽹络套接...⽹络读写事件注册到事件引擎中;      • 当套接满⾜可读或可写条件时,事件引擎设置套接对应事件状态并返回给调⽤者;      • 调⽤者根据套接事件状态分别『回调』对应处理过程;   ...:      每⼀个⽹络连接绑定⼀个套接字句柄,该套接绑定⼀个协;      当对⽹络套接进⾏读或写发生阻塞时,将该套接添加⾄ IO 调度事件引擎中并设置读写事件,然后将该挂起;这样所有处于读写等待状态...⽹络都被挂起,且与之关联⽹络套接均由 IO 调度事件引擎统⼀监控管理;      当某些⽹络套接满⾜可读或可写条件时,IO 调度事件引擎返回这些套接状态,IO 调度找到与这些套接绑定对象...⾏合并处理,主要是因为 libfiber 调度过程是单线程模式,如果想要在多线程调度器中合并中间态事件操作则要难很多:在多线程调度过程中,当套接所绑定因IO 可读被唤醒时,假设不取消该套接读事件

64120

Python异步: 什么是异步? (2)

模块和语言变化共同促进了支持基于并发、非阻塞 I/O 和异步编程 Python 程序开发。让我们仔细看看 asyncio 这两个方面,从语言变化开始。1....# define a coroutineasync def custom_coro():# ...调用函数会创建一个对象,这是一个新类。它不执行函数。......相反,执行 for 循环调用将挂起并在内部等待迭代器产生每个可等待对象。异步上下文管理器是可以等待进入和退出方法上下文管理器。“async with”表达式用于创建和使用异步上下文管理器。...调用将在进入上下文管理器块之前挂起并等待上下文管理器,在离开上下文管理器块时也是如此。这些是为支持而对 Python 语言进行主要更改总结。2....异步模块“asyncio”模块提供函数和对象,用于使用异步编程范例开发基于程序。具体来说,它支持带有子进程(用于执行命令)和流(用于 TCP 套接编程)阻塞 I/O。

1.2K20

Python异步: 什么是异步? (2)

模块和语言变化共同促进了支持基于并发、非阻塞 I/O 和异步编程 Python 程序开发。 让我们仔细看看 asyncio 这两个方面,从语言变化开始。 1....调用函数会创建一个对象,这是一个新类。它不执行函数。...相反,执行 for 循环调用将挂起并在内部等待迭代器产生每个可等待对象。 异步上下文管理器是可以等待进入和退出方法上下文管理器。“async with”表达式用于创建和使用异步上下文管理器。...调用将在进入上下文管理器块之前挂起并等待上下文管理器,在离开上下文管理器块时也是如此。 这些是为支持而对 Python 语言进行主要更改总结。 2....异步模块 “asyncio”模块提供函数和对象,用于使用异步编程范例开发基于程序。具体来说,它支持带有子进程(用于执行命令)和流(用于 TCP 套接编程)阻塞 I/O。

93720

Kotlin 学习笔记(四)—— 基础知识,面试官最爱了~

2. suspend 关键 先来看看 suspend 关键,好像老是在代码中碰到它。按照它字面意思,就是“挂起”意思,确实比较形象,因为被它修饰方法,是可以被挂起。...suspend 关键本身没有挂起作用,需要在方法内部直接或者间接地调用 Kotlin 框架中 suspend 函数才可以。...所以,suspend 关键更多是给调用者一个提示,提示调用者被它修饰方法是个耗时方法,需要在或者其他 suspend 函数中处理,限制这个方法只能在或其他 suspend 函数中被调用。...public suspend fun join():挂起这个协直到它完成,如果 job 处于 New 状态,此方法也可启动;此方法可被取消;当调用方法被取消或已完成,此方法会抛出 CancellationException...runBlocking: T:启动一个最外层,即顶级,没有父。它启动阻塞,执行完之后才能继续往下执行,这是它特点,从它方法名也可以看出来。

1.4K30

Python异步: 什么时候使用异步?(3)

是另一个并发单元,就像线程和进程一样。基于线程并发由线程模块提供,并由底层操作系统支持。它适用于阻塞 I/O 任务,例如从文件、套接和设备读取和写入。...它们适用于具有子进程和套接阻塞 I/O,但是,阻塞 I/O 和 CPU 绑定任务可以在幕后使用线程和进程以模拟非阻塞方式使用。最后一点是微妙而关键。...它是一种替代、有趣、强大并发方法,不同于基于线程和基于进程并发。仅这一点就可能成为在项目中采用它理由。另一个关键方面是它们是轻量级。它们比线程更轻量级。...异步编程通常意味着全力以赴并围绕异步函数调用和任务概念设计程序。虽然还有其他方法可以实现异步编程元素,但 Python 中完整异步编程需要使用和 asyncio 模块。...添加 Python 中 asyncio 模块专门用于向 Python 标准库添加对子进程(例如在操作系统上执行命令)和流(例如 TCP 套接编程)阻塞 I/O 支持。

1.1K20

Python异步: 什么时候使用异步?(3)

是另一个并发单元,就像线程和进程一样。 基于线程并发由线程模块提供,并由底层操作系统支持。它适用于阻塞 I/O 任务,例如从文件、套接和设备读取和写入。...它们适用于具有子进程和套接阻塞 I/O,但是,阻塞 I/O 和 CPU 绑定任务可以在幕后使用线程和进程以模拟非阻塞方式使用。 最后一点是微妙而关键。...它是一种替代、有趣、强大并发方法,不同于基于线程和基于进程并发。仅这一点就可能成为在项目中采用它理由。另一个关键方面是它们是轻量级。 它们比线程更轻量级。...异步编程通常意味着全力以赴并围绕异步函数调用和任务概念设计程序。虽然还有其他方法可以实现异步编程元素,但 Python 中完整异步编程需要使用和 asyncio 模块。...添加 Python 中 asyncio 模块专门用于向 Python 标准库添加对子进程(例如在操作系统上执行命令)和流(例如 TCP 套接编程)阻塞 I/O 支持。

92420

饿了么资深Android工程师带你领略Kotlin力量

第一个是可控制,不同于线程能做到可被控制发起子任务;第二个是轻量级,非常小、占用资源比线程还少,在JVM平台上它本质就是一次方法调用;第三个是语法糖,目前能够使用语言都提供了很好语法糖支持...setText方法launch中有一个UI参数,这是Kotlin提供对象,表示在UI线程中启动,同时被中断以后恢复也是在UI线程中。...因此Kotlin库提供了一个关键suspend,表示挂起指出该方法是一个方法不是直接运行在UI线程中。...上图代码中当网络请求被执行完之后会得到一个Call对象,通过调用await方法就能够获取到请求返回值。 ? 这是扩展方法具体实现,整个函数只有一个函数体,内部启动了一个。...这里回调时候又进一步调用接口continuationresume方法和resumeWithException方法

2.3K51

深入分析 Java、Kotlin、Go 线程和协

目的 特点 原理 Java、Kotlin、Go 线程与 Kotlin 使用「线程」代码 使用「代码 Go Java Kilim 框架 Java...比如Golang里 go关键其实就是负责开启一个Fiber,让func逻辑跑在上面。 由于暂停完全由程序控制,发生在用户态上;而线程阻塞状态是由操作系统内核来进行切换,发生在内核态上。...633265-20201211165837001-1582226810.jpg 当A调用暂停方法或被阻塞时,A会进入到挂起队列,调度器会调用等待队列中其它抢占线程A执行。...详细语法可以查看 Kotlin 官方网站:https://www.kotlincn.net/docs/reference/coroutines/basics.html 其中关键 launch 是开启了一个...,关键 suspend 是挂起一个,而不会阻塞

76230

深入分析 Java、Kotlin、Go 线程和协

目的 特点 原理 Java、Kotlin、Go 线程与 Kotlin 使用「线程」代码 使用「代码 Go Java Kilim 框架 Java...比如Golang里 go关键其实就是负责开启一个Fiber,让func逻辑跑在上面。 由于暂停完全由程序控制,发生在用户态上;而线程阻塞状态是由操作系统内核来进行切换,发生在内核态上。...当A调用暂停方法或被阻塞时,A会进入到挂起队列,调度器会调用等待队列中其它抢占线程A执行。...详细语法可以查看 Kotlin 官方网站:https://www.kotlincn.net/docs/reference/coroutines/basics.html 其中关键 launch 是开启了一个...,关键 suspend 是挂起一个,而不会阻塞

30410

深入分析 Java、Kotlin、Go 线程和协

目的 特点 原理 Java、Kotlin、Go 线程与 Kotlin 使用「线程」代码 使用「代码 Go Java Kilim...比如Golang里 go关键其实就是负责开启一个Fiber,让func逻辑跑在上面。 由于暂停完全由程序控制,发生在用户态上;而线程阻塞状态是由操作系统内核来进行切换,发生在内核态上。...当A调用暂停方法或被阻塞时,A会进入到挂起队列,调度器会调用等待队列中其它抢占线程A执行。...详细语法可以查看 Kotlin 官方网站:https://www.kotlincn.net/docs/reference/coroutines/basics.html 其中关键 launch 是开启了一个...,关键 suspend 是挂起一个,而不会阻塞

1K31

为什么建议大家加快拥抱Kotlin,说点不一样

方便性能优化这一点主要得益于Kotlin,可以看看之前介绍文章:Android面试题之Kotlin一文搞定 和 Kotlin上下文和异常处理帮我们很好解决了一个问题,就是App...可以看作是轻量级线程,它们可以在线程中运行,但与传统线程不同,是非阻塞、低开销,可以极大程度地提高并发任务执行效率。Kotlin 解决传统 Java 线程管理问题1....Kotlin 是轻量级,可以在同一个线程中创建成千上万个,极大地减少了内存消耗。内存占用远小于传统线程。3....Kotlin 支持挂起函数(suspend functions),在等待期间释放线程资源,不会阻塞线程。使用 suspend 关键进行非阻塞操作,使得程序资源利用率更高。...同时,Kotlin 通过其轻量级、高效并发、简洁 API 设计、低内存开销和强大异常处理能力,解决了传统 Java 中线程创建和管理复杂度、高资源消耗、阻塞操作导致资源浪费、以及异常处理复杂度高问题

6100

【翻译】深入 Kotlin

【翻译】深入 Kotlin 2017-10-26 by Liuqingwen | Tags: Kotlin 翻译 | Hits ? 一、前言 翻译好文章也是一种学习方法!...用这个关键标记函数能够暂停一个执行,且不会阻塞当前线程。...调用 Job 类 join() 方法将暂停它所包含运行。 async{} 通过使用 async 函数你可以达到和 launch 一样效果,唯一一个非常重要差别是:它有返回值。...在 C# 中 async 和 await 都是关键 在 C# 中 async 函数只能返回一个 Task 实例或者返回空 如果你仔细观察这个例子,你会看到在 Kotlin 中, launch{}...通过使用 CoroutineStart.LAZY 这个值,可以让只在开发者显式调用返回 Deferred 实例或者 Job 实例 await() 方法或者 join() 方法才开始运行。

1.4K10
领券