فرض کنید سیستم ایمیل مارکتینگ شما قرار است یک میلیون کاربر را در حافظه لود کند و سپس برای همهی آنها ایمیل ارسال کند. از زمانی که شما این کاربرها را از دیتابیس لود میکنید هزینه بالایی بابت کوئری سنگین متحمل میشوید و همچنین بعد از لود کردن هم نگهداری این تعداد در حافظه باعث اشغال شدن مقدار زیادی از حافظه میشود. (هر چند عملیات با موفقیت انجام میشود ولی بهینه نیست!)
از طرفی هم اگر بخواهید مثلا هزار تا هزار تا این داده ها را لود و ارسال کنید، سرعت عملیات پایین میآید.
بهینه ترین روش ایجاد سیستمی است که همانند چرخه تولید به مصرف عمل کند. یعنی مصرف کننده داده صرفا دادههایی را از یک صف تعریف شده میگیرد و قسمت تولید کننده داده هم با استراتژی خاصی دادهها را تولید (از دیتابیس لود میکند) و داخل صف قرار میدهد و هر موقع کارش به اتمام رسید به مصرف کننده اعلام میکند تا دیگر منتظر صف نماند.
در اینجا چالشهای زیادی مطرح میشود که در System.Threading.Channels این چالشها مد نظر قرار گرفته شده است که برنامه نویس میتواند بر روی چنل (صف) داده قرار دهد (Write) و یا در جای دیگری از دادههای صف استفاده کند (Read).
افزودن داده بر روی چنل
await channel.Writer.WriteAsync(item);خواندن داده از چنل
channel.Reader.ReadAllAsync()توضیحات تکمیلی را اینجا بخوانید:
https://virgool.io/@hamedhajiloo96/system-threading-channels-z1kx0mctp7gp
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.
#حامد_حاجیلو (http://bit.ly/2IVjfYD)
کانال تلگرام:
@SoftwarePhilosophy
________