نخ موازی
نخ موازی
در حالی که کل محتویات later() به عنوان یک ورودی صف حلقه رویداد در نظر گرفته می شود، وقتی به رشته ای فکر می کنیم که این کد روی آن اجرا می شود، در واقع ممکن است ده ها عملیات سطح پایین مختلف وجود داشته باشد. به عنوان مثال، پاسخ = پاسخ * 2 نیاز دارد ابتدا مقدار فعلی پاسخ را بارگذاری کنید، سپس 2 را در جایی قرار دهید، سپس ضرب را انجام دهید، سپس نتیجه را بگیرید و آن را در پاسخ ذخیره کنید.
در یک محیط تک رشته ای، واقعاً مهم نیست که موارد موجود در صف thread، عملیات سطح پایین باشند، زیرا هیچ چیز نمی تواند thread را قطع کند. اما اگر یک سیستم موازی دارید که در آن دو رشته مختلف در یک برنامه کار می کنند، به احتمال زیاد می توانید رفتار غیرقابل پیش بینی داشته باشید
در رفتار تک رشته ای جاوا اسکریپت، اگر foo() قبل از bar() اجرا شود، نتیجه این است که a دارای 42 است، اما اگر bar() قبل از foo() اجرا شود، نتیجه a 41 خواهد بود.
اگر رویدادهای JS که دادههای مشابهی را به اشتراک میگذارند به صورت موازی اجرا شوند، مشکلات بسیار ظریفتر خواهند بود. این دو لیست از وظایف شبه کد را به عنوان رشته هایی در نظر بگیرید که به ترتیب می توانند کد را در foo() و bar() اجرا کنند و در نظر بگیرید که چه چیزی
اگر دقیقاً همزمان در حال اجرا باشند اتفاق میافتد
نتیجه در a 21 خواهد بود.
بنابراین، برنامهنویسی رشتهای بسیار مشکل است، زیرا اگر اقدامات خاصی برای جلوگیری از وقوع این نوع وقفه/تداخل انجام ندهید، میتوانید رفتاری بسیار شگفتانگیز و غیر قطعی داشته باشید که اغلب منجر به سردرد میشود.
جاوا اسکریپت هرگز دادهها را در بین رشتهها به اشتراک نمیگذارد، به این معنی که سطح عدم قطعیت نگران کننده نیست. اما این بدان معنا نیست که JS همیشه قطعی است. قبلاً به یاد داشته باشید، جایی که ترتیب نسبی foo() و bar() دو نتیجه متفاوت (41 یا 42) ایجاد می کند؟
توجه: ممکن است هنوز واضح نباشد، اما همه غیر جبرگرایی بد نیستند.
گاهی بی ربط و گاهی عمدی است.
نتیجه در a 21 خواهد بود.
بنابراین، برنامهنویسی رشتهای بسیار مشکل است، زیرا اگر اقدامات خاصی برای جلوگیری از وقوع این نوع وقفه/تداخل انجام ندهید، میتوانید رفتاری بسیار شگفتانگیز و غیر قطعی داشته باشید که اغلب منجر به سردرد میشود.
جاوا اسکریپت هرگز دادهها را در بین رشتهها به اشتراک نمیگذارد، به این معنی که سطح عدم قطعیت نگران کننده نیست. اما این بدان معنا نیست که JS همیشه قطعی است. قبلاً به یاد داشته باشید، جایی که ترتیب نسبی foo() و bar() دو نتیجه متفاوت (41 یا 42) ایجاد می کند؟
توجه: ممکن است هنوز واضح نباشد، اما همه غیر جبرگرایی بد نیستند. گاهی بی ربط و گاهی عمدی است
حال، بیایید بگوییم که این دو موضوع واقعاً به صورت موازی در حال اجرا هستند. احتمالاً می توانید مشکل را تشخیص دهید، درست است؟ آنها از مکان های حافظه مشترک X و Y برای مراحل موقت خود استفاده می کنند.
اگر مراحل به این صورت اتفاق بیفتد، نتیجه نهایی در a چیست؟
قوانین ارسال دیدگاه در سایت