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

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

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

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

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

صف حلقه رویداد

دسته بندی :اخبار سایت 15 مارس 2023 علیرضا بابامرادی 103
صف حلقه رویداد

صف حلقه رویداد

onscroll, request 1 <— Process 1 starts
onscroll, request 2
response 1 <— Process 2 starts
onscroll, request 3
response 2
response 3
onscroll, request 4
onscroll, request 5
onscroll, request 6
response 4
onscroll, request 7 <— Process 1 finishes
response 6
response 5
response 7 <— Process 2 finishes

 

“فرآیند 1” و “فرآیند 2” به طور همزمان اجرا می شوند (موازی در سطح کار)، اما رویدادهای فردی آنها به صورت متوالی در صف حلقه رویداد اجرا می شوند.

به هر حال، توجه کنید که چگونه پاسخ 6 و پاسخ 5 از نظم مورد انتظار خارج شدند؟

حلقه رویداد تک رشته ای یکی از بیان های همزمانی است (مطمئنا موارد دیگری نیز وجود دارد که بعداً به آنها خواهیم پرداخت)

 

بدون تعامل

 

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

مثلا:

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

 

foo() و bar() دو “فرایند” همزمان هستند، و مشخص نیست که با کدام ترتیب شلیک می شوند. اما ما برنامه را طوری ساخته ایم که مهم نیست به چه ترتیبی شلیک می کنند، زیرا آنها به طور مستقل و به عنوان عمل می کنند. چنین نیازی به تعامل ندارند.

این یک اشکال “شرایط مسابقه” نیست، زیرا بدون در نظر گرفتن ترتیب، کد همیشه به درستی کار می کند.

اثر متقابل

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

در اینجا یک مثال ساده از دو “فرآیند” همزمان وجود دارد که به دلیل سفارش ضمنی که فقط گاهی اوقات شکسته می شود، با هم تعامل دارند:

var res = [];
function response(data) {
res.push( data );
} /
/ ajax(..) is some arbitrary Ajax function given by a library
ajax( “http://some.url.1”, response );
ajax( “http://some.url.2”, response );

“فرآیندهای” همزمان دو فراخوانی ()response هستند که برای رسیدگی به پاسخ های Ajax ساخته می شوند. آنها می توانند به ترتیب اول اتفاق بیفتند

بیایید فرض کنیم رفتار مورد انتظار این است که res[0] نتایج تماس “http://some.url.1” و res[1] نتایج “http://some.url.2” را داشته باشد. زنگ زدن. گاهی اوقات اینطور خواهد بود، اما گاهی اوقات بسته به اینکه کدام تماس اول تمام شود، آنها برگردانده می شوند. احتمال بسیار خوبی وجود دارد که این عدم قطعیت یک اشکال “شرایط نژادی” باشد

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

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

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

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

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

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

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

لینک کوتاه:
0