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

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

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

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

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

تعامل همزمانی

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

تعامل همزمانی

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

این کد شکسته را در نظر بگیرید:

var a;
function foo(x) {
a = x * 2;
baz();
} f
unction bar(x) {
a = x / 2;
baz();

} f
unction baz() {
console.log( a );
} /
/ ajax(..) is some arbitrary Ajax function given by a library
ajax( “http://some.url.1”, foo );
ajax( “http://some.url.2”, bar );

هر کدام (foo() یا bar()) آخرین بار اجرا شود نه تنها مقدار اختصاص داده شده را از دیگری بازنویسی می کند، بلکه فراخوانی به baz() را نیز کپی می کند (احتمالاً نامطلوب).

بنابراین، می‌توانیم تعامل را با یک چفت ساده هماهنگ کنیم تا فقط اولین مورد را از بین ببریم:

var a;
function foo(x) {
if (!a) {
a = x * 2;
baz();
}
} f
unction bar(x) {
if (!a) {
a = x / 2;
baz();
}
} f
unction baz() {
console.log( a );
} /
/ ajax(..) is some arbitrary Ajax function given by a library
ajax( “http://some.url.1”, foo );
ajax( “http://some.url.2”, bar );

 

شرط if (!a) فقط به اولین مورد از foo() یا bar() اجازه عبور می دهد و فراخوانی دوم (و در واقع هر بعدی) صرفا نادیده گرفته می شود. فقط هیچ فضیلتی در مقام دوم بودن وجود ندارد!

توجه: در تمام این سناریوها، ما از متغیرهای سراسری برای اهداف تصویرسازی ساده استفاده کرده‌ایم، اما هیچ چیزی در مورد استدلال ما در اینجا وجود ندارد که به آن نیاز داشته باشد. تا زمانی که توابع مورد نظر بتوانند به متغیرها (از طریق scope) دسترسی داشته باشند، همانطور که در نظر گرفته شده است کار خواهند کرد. تکیه بر متغیرهای دارای دامنه واژگانی (به عنوان Scope & Closures سری این کتاب مراجعه کنید)، و در واقع متغیرهای سراسری مانند این مثال‌ها، یکی از نکات منفی آشکار این اشکال هماهنگی همزمانی است. همانطور که از چند فصل بعدی می گذریم، راه های هماهنگی دیگری را خواهیم دید که از این نظر بسیار تمیزتر هستند.

مشارکت

یکی دیگر از بیان هماهنگی همزمانی «همراهی تعاونی» نام دارد. در اینجا، تمرکز چندان روی تعامل از طریق اشتراک گذاری ارزش در حوزه ها نیست (اگرچه بدیهی است که هنوز مجاز است!). هدف این است که یک “فرآیند” طولانی مدت

را انجام دهیم و آن را به مراحل یا دسته تقسیم کنیم تا سایر “فرآیندهای” همزمان فرصتی برای تداخل عملیات خود در صف حلقه رویداد داشته باشند.

 

به عنوان مثال، یک کنترل کننده پاسخ Ajax را در نظر بگیرید که برای تبدیل مقادیر باید فهرست طولانی از نتایج را اجرا کند. برای کوتاه نگه داشتن کد از Array#map(..) استفاده می کنیم:

var res = [];
// `response(..)` receives array of results from the Ajax call
function response(data) {
// add onto existing `res` array

res = res.concat(
// make a new transformed array with all `data` values doubled
data.map( function(val){
return val * 2;
} )
);
}

// ajax(..) is some arbitrary Ajax function given by a library
ajax( “http://some.url.1”, response );
ajax( “http://some.url.2”, response );

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

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

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

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

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

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

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

لینک کوتاه:
0