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是冷流,消费时才生产。 而上面用缓存的时候,生产速度可以快于消费速度。

相关推荐
C^h2 小时前
c++ string
开发语言·c++
raindayinrain2 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
驰骋工作流2 小时前
流程时效考核的表结构:从待办时限到 WF_CH 考核结果驰骋BPM驰骋低代码低代码工作流引擎
android·低代码·rxjava
学逆向的2 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao2 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
学逆向的3 小时前
C 局部静态变量
c语言·开发语言·网络安全
大都督会赢的4 小时前
C++第一节课
开发语言·c++
“AI国潮设计-小江”4 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
小王C语言4 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt
传奇开心果编程4 小时前
【Flutter踩坑排雷】第7课:巨型 build 函数坑|全部 UI 写在同一个 build,维护难、隐性异常
android·flutter·ios·移动开发·跨平台·dart·声明式ui