همزمانی ساختاریافته
همزمانی ساختاریافته یک الگوی برنامهنویسی است که هدف آن بهبود وضوح، کیفیت و زمان توسعه یک برنامه کامپیوتری با استفاده از یک رویکرد ساختاریافته برای برنامهنویسی همزمان است .
مفهوم اصلی، کپسولهسازی رشتههای اجرایی همزمان (در اینجا شامل رشتهها و فرآیندهای هسته و سرزمین کاربر) از طریق ساختارهای جریان کنترلی است که دارای نقاط ورودی و خروجی واضح هستند و اطمینان میدهند که تمام رشتههای تولید شده قبل از خروج کامل شدهاند. چنین کپسولهسازی اجازه میدهد تا خطاهای موجود در رشتههای همزمان به محدوده اصلی ساختار کنترل منتشر شده و توسط مکانیسمهای مدیریت خطای بومی هر زبان کامپیوتری خاص مدیریت شوند. این اجازه می دهد تا جریان کنترل به راحتی توسط ساختار کد منبع علی رغم وجود همزمانی آشکار باقی بماند. برای مؤثر بودن، این مدل باید به طور مداوم در تمام سطوح برنامه اعمال شود – در غیر این صورت ممکن است رشته های همزمان نشت کنند، ازبین بروند یا خطاهای زمان اجرا به درستی منتشر نشوند.
همزمانی ساختاریافته مشابه برنامه نویسی ساخت یافته است که از ساختارهای جریان کنترلی استفاده می کند که عبارات متوالی و زیر روال ها را در بر می گیرد.
تاریخ
[ویرایش]مدل فورک-پیوستن از دهه 1960، که توسط ابزارهای چند پردازشی مانند OpenMP تجسم مییابد، نمونه اولیه سیستمی است که اطمینان میدهد تمام رشتهها قبل از خروج کامل شدهاند. با این حال، اسمیت استدلال میکند که این مدل همزمانی ساختیافته واقعی نیست، زیرا زبان برنامهنویسی از رفتار پیوستن آگاه نیست و بنابراین قادر به اعمال ایمنی نیست. [۱]
این مفهوم در سال 2016 توسط Martin Sústrik (توسعهدهنده ZeroMQ ) با C کتابخانه libdill، با گوروتینها به عنوان نقطه شروع، فرموله شد. [۲] در سال 2017 توسط Nathaniel J. Smith که یک "الگوی مهد کودک" را در پیاده سازی Python خود به نام Trio معرفی کرد، اصلاح شد. [۳] در همین حال، رومن الیزاروف به طور مستقل به همین ایده ها رسید و در حین توسعه یک کتابخانه آزمایشی کوروتین برای زبان کاتلین ، [۴] [۵] که بعدها به یک کتابخانه استاندارد تبدیل شد. [۶]
در سال 2021، سوئیفت همزمانی ساختاریافته را پذیرفت. [۷] در اواخر همان سال، پیشنویس پیشنهادی برای افزودن همزمانی ساختاریافته به جاوا منتشر شد. [۸]
تغییرات
[ویرایش]نکته اصلی تغییر این است که چگونه یک خطا در یکی از اعضای درخت رشته همزمان مدیریت می شود. پیادهسازیهای ساده فقط منتظر میمانند تا فرزندان و خواهران و برادران رشته شکستخورده قبل از انتشار خطا به دامنه والد کامل شوند. با این حال، ممکن است مدت زمان نامحدودی طول بکشد. جایگزین استفاده از یک مکانیسم لغو کلی است (معمولاً یک طرح مشارکتی که اجازه میدهد افراد ثابت برنامه مورد احترام قرار گیرند) تا موضوعات مربوط به فرزندان و خواهر و برادر را به شیوهای مصلحتآمیز خاتمه دهد.
همچنین ببینید
[ویرایش]منابع
[ویرایش]- ↑ Smith, Nathaniel J. (25 April 2018). "Notes on structured concurrency, or: Go statement considered harmful". Retrieved 1 August 2019.
- ↑ Sústrik, Martin (7 February 2016). "Structured Concurrency". Retrieved 1 August 2019.
- ↑ Smith, Nathaniel J. (10 March 2017). "Announcing Trio". Retrieved 23 September 2022.
- ↑ Elizarov, Roman (12 September 2018). "Structured concurrency". Retrieved 21 September 2019.
- ↑
{{cite AV media}}
: Empty citation (help) - ↑ "Coroutines basics: Structured concurrency". Kotlin. JetBrains. Retrieved 3 March 2022.
- ↑ McCall, John; Groff, Joe; Gregor, Doug; Malawski, Konrad. "Swift Structured Concurrency Proposal". Apple's Swift Evolution repo. GitHub. Retrieved 3 March 2022.
- ↑ Pressler, Ron. "JEP draft: Structured Concurrency (Incubator)". OpenJDK. Oracle. Retrieved 3 March 2022.
لینک های خارجی
[ویرایش]- یادداشتهایی درباره همزمانی ساختاریافته، یا: بیانیه Go مضر تلقی میشود که توسط ناتانیل جی اسمیت
- تالار گفتمان همزمانی ساختاریافته ، بحث بین رایانهای در مورد همزمانی ساختاریافته با مشارکت سوستریک، اسمیت و الیزاروف
- FOSDEM 2019: Structured Concurrency ، گفتگوی برق آسا توسط مارتین سوستریک با پیوندهایی به برخی از پیاده سازی ها