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

相关推荐
飞Link15 小时前
告别盲目找Bug:深度解析 TSTD 异常检测中的预测模型(Python 实战版)
开发语言·python·算法·bug
1.14(java)15 小时前
Spring-boot快速上手
java·开发语言·javaee
记忆多16 小时前
c++名字空间 函数模版 左右值
开发语言·c++·算法
2401_8898846616 小时前
高性能计算通信库
开发语言·c++·算法
是梦终空11618 小时前
C++中的职责链模式变体
开发语言·c++·算法
mjhcsp18 小时前
C++遗传算法(Genetic Algorithm,GA):进化式全局优化的核心解析
开发语言·c++
燕山罗成19 小时前
JAVA多线程基础
java·开发语言
Yvonne爱编码19 小时前
JAVA数据结构 DAY7-二叉树
java·开发语言·数据结构
En^_^Joy20 小时前
JavaScript入门指南:从零到精通
开发语言·javascript
冰语竹20 小时前
Android学习之相对布局
android