narjes Mansoori
narjes Mansoori
خواندن ۲ دقیقه·۱۰ ماه پیش

آشنایی با مفهوم Cold Flow و Hot Flow

سلام بچه ها امیدوارم که حالتون خوب باشه .بازم اومدیم با یه پست دیگه از مفاهیم مربوط به flow ها .پیشنهاد میکنم پست های دیگه مرتبط با این مبحث رو مطالعه کنید تا بتونید مفاهیم رو کامل درک کنید.

خب ببینیم Cold Flow چی هست؟

  • فقط زمانی داده‌ها را ارسال می‌کنند که گردآورنده یا collector وجود دارد.
  • اطلاعات را ذخیره نمی‌کنند.
  • نمی‌توانند چندین collector داشته باشند.
  • خب اینا از ویژگی های Cold Flow ها هستند.نگران نباشید در ادامه با مثال بیشتر توضیح میدم که کامل متوجه بشین.

در مثال زیر یکCold Flow تعریف می‌شود که اعداد ۱ تا ۵ را در فواصل یک ثانیه‌ای ارسال می‌کند. سپس دو collector برای این فلو تعریف می‌شود. اولین collector مقادیر را چاپ می‌کند و دومین collector نیز پس از ۲.۵ ثانیه شروع به جمع‌آوری مقادیر می‌کند.

val numbersColdFlow = getNumbersColdFlow()

numbersColdFlow
.collect {
println("1st Collector: $it")
}

delay(2500)

numbersColdFlow
.collect {
println("2nd Collector: $it")
}

خروجی کد بالا به صورت زیر خواهد بود

1st Collector: 1
1st Collector: 2
1st Collector: 3
1st Collector: 4
1st Collector: 5

2nd Collector: 1
2nd Collector: 2
2nd Collector: 3
2nd Collector: 4
2nd Collector: 5

ارسال خب همانطور که در خروجی بالا میبینیم به ازای هر collector فلو از ابتدا شروع به انتشار دیتاها میکند.

حالا ببینیم Hot Flow چی هست

  • داده‌ها را حتی زمانی که collector وجود ندارد، منتشر می‌کنند.
  • می‌توانند اطلاعات را ذخیره کنند.
  • می‌توانند چندین collector داشته باشند.:

در این مثال، یک Hot Flow تعریف می‌شود که اعداد ۱ تا ۵ را در فواصل یک ثانیه‌ای ارسال می‌کند. سپس دو collector برای این فلو تعریف می‌شود. اولین collector مقادیر را چاپ می‌کند و دومین collector نیز پس از ۲.۵ ثانیه شروع به جمع‌آوری مقادیر می‌کند.

val numbersHotFlow = getNumbersHotFlow()

numbersHotFlow
.collect {
println("1st Collector: $it")
}

delay(2500)

numbersHotFlow
.collect {
println("2nd Collector: $it")
}

خروجی:

1st Collector: 1
1st Collector: 2
1st Collector: 3
1st Collector: 4
1st Collector: 5

2nd Collector: 3
2nd Collector: 4
2nd Collector: 5

در فلوهای گرم، collector ها از جایی که شروع به جمع‌آوری کرده‌اند، مقادیر را دریافت می‌کنند. در مثال بالا، collector اول همه مقادیر را دریافت می‌کند، اما collector دوم فقط مقادیری را دریافت می‌کند که پس از ۲.۵ ثانیه ارسال شده‌اند، چون پس از این زمان شروع به جمع‌آوری کرده است.

همچنین می‌توانیم تنظیماتی را برای ذخیره‌سازی داده‌ها در فلوهای گرم انجام دهیم. به عنوان مثال، می‌توانیم تنظیم کنیم که فقط آخرین مقدار ارسالی ذخیره شود.

آشنایی با StateFlow و SharedFlow

Android Developer
شاید از این پست‌ها خوشتان بیاید