kotlin Flow的用法2

测试下生产数据比消费数据快,Flow中的被压处理。

Kotlin 复制代码
fun simpleFlow(): Flow<Int> = flow {
        for (i in 1..5) {
            delay(200) // 生产者:每200ms生产一条数据
            Log.d("zxzx", "生产者生产了:$i")
            emit(i)
        }
    }

    private fun testFlow2() { // 测试被压(Backpressure)
        lifecycleScope.launch {
            Log.d("zxzx", "开始执行背压演示...")
            simpleFlow()
                .buffer(3) // 缓冲3个元素
                .collect { value ->
                    Log.d("zxzx", "消费数据:$value")
                    delay(1000) // 消费者:每1000ms消费一条数据
                }
            Log.d("zxzx", "所有任务完成")
            Log.d("zxzx", "虽未谱金兰,前生信有缘;\n忠勇付汉室,情义比桃园。\n匹马单枪出重围,英风锐气敌胆寒;\n一袭征袍鲜血染,当阳常志此心丹。\n子龙,子龙,世无双;\n五虎上将威名传。")
        }
    }

打印日志:

ok. buffer函数意思是可以在消费者处理数据跟不上时缓存数据。

如果不调用buffer函数缓存数据,日志如下:

不用缓存,可以看出生产速度变慢了,消费的时候才生产,因为Flow是冷流,消费时才生产。 而上面用缓存的时候,生产速度可以快于消费速度。

相关推荐
人间凡尔赛1 天前
Next.js 16 生产级实战:Cache Components + View Transitions 完整指南
开发语言·javascript·ecmascript
稚南城才子,乌衣巷风流1 天前
函数:编程中的核心概念
开发语言·前端·javascript
阿米亚波1 天前
【C++】流式数据输入处理(不完全整理)
开发语言·c++·笔记
大模型码小白1 天前
JAVA 集合框架进阶:List 与 Set 的深度解析与实战
java·开发语言·人工智能·windows·语言模型·list·ai编程
皓月斯语1 天前
【C++基础】三目运算符
开发语言·数据结构·c++
初願致夕霞1 天前
C++懒汉单例设计详解
服务器·开发语言·c++
Xzaveir1 天前
不要用一个状态表示“号码已认证”:企业号码身份的四域模型
android·人工智能
脱胎换骨-军哥1 天前
C++分布式系统设计:从通信引擎到分布式共识
开发语言·c++·分布式
(Charon)1 天前
【C++】手写 MySQL 连接池(二):同步连接的获取、加锁与释放
android
脱胎换骨-军哥1 天前
C++零成本抽象理论深度拆解:现代C++如何在不牺牲性能的前提下提供高级语法封装
java·开发语言·c++