آدرس : تهران میدان فردوسی خیابان ایرانشهر بین سمیه و طالقانی مجتمع تجاری میلاد واحد 9

پشتیبانی 24 ساعته : 02188867940 – 09927674217

برای مشاهده لیست علاقه مندی ها وارد شوید!

مشاهده محصولات فروشگاه
0

هیچ محصولی در سبد خرید نیست.

فرایندهای همزمان

دسته بندی :اخبار سایت 15 مارس 2023 علیرضا بابامرادی 379
فرایندهای همزمان

فرایندهای همزمان

اگر “http://some.url.1” ابتدا نتایج خود را دریافت کند، کل لیست به یکباره به res نگاشت می شود. اگر چند هزار یا کمتر رکورد باشد، به طور کلی مشکل بزرگی نیست. اما اگر مثلاً 10 میلیون رکورد باشد، اجرای آن ممکن است کمی طول بکشد (چند ثانیه در یک لپ‌تاپ قدرتمند، بسیار بیشتر در یک دستگاه تلفن همراه، و غیره).

در حالی که چنین “فرآیندی” در حال اجرا است، هیچ چیز دیگری در صفحه نمی تواند اتفاق بیفتد، از جمله عدم پاسخ (..) تماس های دیگر، به روز رسانی UI، حتی رویدادهای کاربر مانند پیمایش، تایپ کردن، کلیک کردن روی دکمه و موارد مشابه. این خیلی دردناک است.

بنابراین، برای ایجاد یک سیستم هم‌زمان‌تر، سیستمی که دوستانه‌تر باشد و صف حلقه رویداد را درگیر نکند، می‌توانید این نتایج را در دسته‌های ناهمزمان پردازش کنید، پس از اینکه هر یک به حلقه رویداد «تسلیم» شدند تا اجازه دهید رویدادهای انتظار دیگر اتفاق بیفتند.

در اینجا یک رویکرد بسیار ساده وجود دارد:

var res = [];
// `response(..)` receives array of results from the Ajax call
function response(data) {
// let’s just do 1000 at a time
var chunk = data.splice( 0, 1000 );
// add onto existing `res` array
res = res.concat(
// make a new transformed array with all `chunk` values doubled
chunk.map( function(val){
return val * 2;

} )
);

// anything left to process?
if (data.length > 0) {
// async schedule next batch
setTimeout( function(){
response( data );
}, 0 );
}
} /
/ ajax(..) is some arbitrary Ajax function given by a library
ajax( “http://some.url.1”, response );
ajax( “http://some.url.2”, response );

ما مجموعه داده‌ها را در تکه‌های حداکثر اندازه 1000 مورد پردازش می‌کنیم.

با انجام این کار، ما از یک “فرآیند” کوتاه مدت اطمینان می‌دهیم، حتی اگر این به معنای “فرآیندهای بعدی” بیشتر باشد، زیرا درهم‌آمیزی در صف حلقه رویداد به ما سایت/اپلیکیشن (عملکردی) بسیار پاسخگوتر می‌دهد.

البته، ما ترتیب هیچ یک از این «فرایندها» را با تعامل هماهنگ نمی کنیم، بنابراین ترتیب نتایج در res قابل پیش بینی نخواهد بود. اگر نیاز به سفارش بود، باید از تکنیک‌های تعاملی مانند تکنیک‌هایی که قبلاً صحبت کردیم، یا تکنیک‌هایی که در فصل‌های بعدی این کتاب به آنها خواهیم پرداخت، استفاده کنید.

ما از setTimeout(..0) (هک) برای زمان‌بندی ناهمگام استفاده می‌کنیم، که اساساً فقط به معنای “چسب کردن این تابع در انتهای صف حلقه رویداد فعلی” است.

توجه: setTimeout(..0) از نظر فنی یک مورد را مستقیماً در صف حلقه رویداد درج نمی کند. تایمر در فرصت بعدی رویداد را درج می کند. به عنوان مثال، دو تماس بعدی setTimeout (..0) به طور دقیق تضمین نمی‌شوند که به ترتیب تماس پردازش شوند، بنابراین می‌توان شرایط مختلفی مانند جابجایی تایمر را مشاهده کرد که در آن ترتیب چنین رویدادهایی قابل پیش‌بینی نیست. در Node.js، یک رویکرد مشابه process.nextTick(..) است. علیرغم اینکه چقدر راحت (و معمولاً کارآمدتر) خواهد بود، یک راه مستقیم (حداقل هنوز) در همه محیط ها برای اطمینان از سفارش رویداد غیرهمگام وجود ندارد. این موضوع را در بخش بعدی با جزئیات بیشتری بررسی می کنیم.

علیرضا بابامرادی

راه آسان‌تری برای ارتباط با کاربران‌مان پیدا کرده‌ایم :) عضویت در کانال

مطالب زیر را حتما بخوانید:

قوانین ارسال دیدگاه در سایت

  • چنانچه دیدگاهی توهین آمیز باشد تایید نخواهد شد.
  • چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.
  • چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.
  • چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.
  • چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

لینک کوتاه:
0