Pull و Push.
حتمن تا حالا خیلی این دو مفهوم رو شنیدی. دست کم در مورد Push که خیلی خیلی باید به گوشت خورده باشه. درسته؟
تفاوت pull و push چیه؟
با چند تا مثال داستان رو برات روشن میکنم. موافقی؟
مثال اول
وقتی که یه api یا یه وب سرویس (rest api) رو کال میکنی که یه سری اطلاعات بهت برگردونه داره pull اتفاق میوفته یا push؟
دو تا واحد این وسط درگیر هستن. یکی اون کسی که میخواد اطلاعات رو بگیره و دیگری اونی که میخواد اطلاعات رو بده. خب اینجا اونی که میخواد اطلاعات رو بگیره داره درخواست میزنه و یه جورایی داره اطلاعات رو از فرستنده pull یا واکشی میکنه. در واقع فرستنده سر جای خودش نشسته و میگه هر موقع چیزی خواستی بیا ازم بگیر و یا pull کن.
پس اینجا داریم pull میکنیم و چیزی به سمتمون push نمیشه.
مثال دوم
حالا اگه ارتباطمون با سرور از طریق Socket باشه چی؟
اینجا pull هست یا Push؟
اینجا دیگه داره push اتفاق میوفته و فرستنده داره یه اطلاعاتی رو به سمت گیرنده push میکنه و بهش میگه بیا اینا رو بگیر و کاری که میخوای رو باهاش بکن.
مثال سوم
وقتی که یه فانکشن یا متد رو کال میکنی و یه سری ورودی بهش میدی و اونم یه چیزی رو محاسبه میکنه و یه مقداری رو بهت ریترن میکنه, داری pull میکنی یا داره به سمتت یه چیزی push میشه؟
اگه اینجا هم دو واحد مختلف در نظر بگیریم. یکی گیرنده یا کسی که به دیتای محاسبه شده نیاز داره و یکی فرستنده, مسلم هست که واحد گیرنده اختیار عمل رو بدست داره و داره فانکشن مورد نظرش رو کال میکنه و بهش میگه فلان چیز رو محاسبه کن و بهم بده.
پس اینجا هم داریم از pull استفاده میکنیم. اون فانکشنه به اصطلاح passive هست و تشسته اونجا و میگه هر وقت چیزی خواستی کالم کن و دیتا رو ازم بگیر. پس واحدی که به دیتا نیاز داره active هست و داره فانکشن رو کال میکنه و دیتا رو ازش pull میکنه و واحدی که دیتا رو تولید میکنه یعنی اون فانکشن passive هست.
مثال چهارم
حالا اگه یه دونه Future داشته باشیم چی؟
یه فانکشن یا یه متد داریم که یه دونه Future برمیگردونه. ما اونو کال میکنیم و پشتش یه await میگذاریم و میریم پی کارمون و هر موقع که جوابش اومد کدهای بعد await اجرا میشن.
از کدوم مدله؟
Push يا Pull؟
من میگم Push هست. چون اون فانکشنه هست که به حالت active در اومده و اختیار عمل دستش اومده.
به طور کلی مساله سر active یا passive بودن هست!!!
Active or Passive
یه چیزی داریم به اسم data که قراره بین دو واحد مختلف رد و بدل بشه. یکی از این واحد ها قراره از دیتا استفاده کنه و دیگری تولید کننده ی دیتا هست. اگر اون واحدی که میخواد دیتا رو استفاده کنه active باشه و واحد تولید کننده passive باشه با pull model روبرو هستیم و در مقابل اگه واحد تولید کننده ی دیتا active باشه و واحد مصرف کننده passive باشه با push model روبرو هستیم.
توی مثال اول مصرف کننده هست که اختیار عمل کامل دستش هست و تصمیم میگیره که چه زمانی API رو کال کنه و بنابراین Active هست و با Pull Model طرف هستیم.
توی مثال دوم یا Socket این تولید کننده ی دیتا هست که اختیار عمل رو دستش میگیره و تصیمم میگیره که چه زمانی دیتا رو ارسال کنه و درنتیجه به حالت Active در میاد و بنابراین یه Push model داریم.
توی مثال سوم و کال کردن یه فانکشن, این مصرف کننده هست که دوباره به حالت Active در میاد و اختیار عمل این رو داره که چه زمانی فانکشن رو کال کنه و اطلاعات رو ازش واکشی کنه و بنابراین یه Pull Model رو داریم.
توی مثال چهارم و فانکشن Future, داریم اختیار عمل رو به فانکشن یا تولید کننده ی دیتا میدیم و اون اختیار این رو داره که هر وقت دلش خواست Future رو resolve کنه و در نتیجه به حالت Active در میاد و یه Push Model داریم.
مثال پنجم
حالا اگه یه generator function داشته باشیم. تکلیف چیه؟
با generator function ها توی دارت آشنا نیستی؟
ای وای برمن!!!

نحوه ی استفادش ازش چطوریه؟

یا میتونیم به شکل زیر هم استفاده کنیم:

اینجا بنظرت Pull Model داریم یا Push Model؟
مشخصه که اختیار عمل اینکه کی دیتا رو دریافت کنیم با فانکشن main یا مصرف کننده دیتا هست و اون با کال کردن متد moveNext میاد و iterator رو یه قدم به جلو میبره و دیتای بعدی رو ازش میگیره. پس مصرف کننده active هست و درنتیجه Pull Model داریم.
مثال ششم
حالا اگه یه Stream داشته باشیم چی؟
Pull يا Push؟
توی این حالت Push Model هست. چرا؟
پس:
- یک فانکشن sync از نوع pull model هست و یه تک مقدار تولید میکنه.
- یه فانکشن future ار نوع push model هست و یه تک مقدار تولید میکنه.
- یه sync generator unction از نوع pull model هست و یه کالکشن تولید میکنه.
- یه stream و یا یه async generator function از نوع push model هست و یه کالکشن از دیتا ها رو تولید میکنه.
حالا این ها چه ربطی به Animation ها داره؟
توی قسمت های بعدی میبینیم… .
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.