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 天前
使用 `dlopen` 动态加载 `.so` 文件
开发语言·c++·算法
wellc1 天前
java进阶知识点
java·开发语言
听风吹等浪起1 天前
用Python和Pygame从零实现坦克大战
开发语言·python·pygame
灰色小旋风1 天前
力扣合并K个升序链表C++
java·开发语言
_MyFavorite_1 天前
JAVA重点基础、进阶知识及易错点总结(28)接口默认方法与静态方法
java·开发语言·windows
取码网1 天前
最新在线留言板系统PHP源码
开发语言·php
环黄金线HHJX.1 天前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
不写八个1 天前
PHP教程006:ThinkPHP项目入门
开发语言·php
_MyFavorite_1 天前
JAVA重点基础、进阶知识及易错点总结(31)设计模式基础(单例、工厂)
java·开发语言·设计模式
A.A呐1 天前
【C++第二十三章】C++11
开发语言·c++