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

相关推荐
Highcharts.js3 小时前
倒置百分比堆叠面积图表示列详解|Highcharts大气成分图表代码
开发语言·信息可视化·highcharts·图表开发·面积图·图表示例·推叠图
csdn_aspnet3 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
晨曦中的暮雨3 小时前
4.15腾讯 CSIG云服务产线 一面
java·开发语言
存在morning3 小时前
【GO语言开发实践】二 GO 并发快速上手
大数据·开发语言·golang
xiaoerbuyu12335 小时前
开源Java 邮箱 基于SpringBoot+Vue前后端分离的电子邮件
java·开发语言
sparEE6 小时前
c++值类别、右值引用和移动语义
开发语言·c++
zhangjw346 小时前
第11篇:Java Map集合详解,HashMap底层原理、哈希冲突、JDK1.8优化、遍历方式彻底吃透
java·开发语言·哈希算法
simplepeng6 小时前
我们都知道但总是忽略的5个Jetpack Compose细节
android·android jetpack
刮风那天6 小时前
Android 如何提高进程优先级避免被查杀?
android
benpaodeDD7 小时前
视频10,11,12,13——java程序的加载与执行,安装jdk
java·开发语言