هم زمان

ساخت وبلاگ

کلاس نوع برای انواع داده های Async که قابل لغو هستند و همزمان می توان شروع کرد.

بنابراین این کلاس نوع اجازه می دهد تا بر روی انواع داده ها چکیده شود:

  • جبر Async را با تمام محدودیت های خود پیاده سازی کنید.
  • می تواند منطق را برای لغو فراهم کند ، که در شرایط مسابقه به منظور آزاد کردن منابع اولیه (در سازنده همزمان آن) استفاده می شود.

با توجه به این محدودیت ها ، این کلاس نوع همچنین می تواند یک عملیات همزمان را توصیف کند.

بدون پختن فسخ ، ما نتوانستیم این کار را انجام دهیم.

وارد كردنcats. effect. async, فیبر, لغو شده> ویژگی هم زمان[F[_]]تمدید کردن درز[F] <دنباله شروع[A] (FA:F[A]): F[فیبر[F, A]] دنباله مسابقه[A, B] (LH:F[A] ، RH:F[B]): F[هر یک[A, B]] دنباله مسابقه[A, B] (LH:F[A] ، RH:F[B]): F[هر یک[(A, فیبر[F, B]), (فیبر[F, A], B)]] دنباله لغو پذیر[A] (ک: (هر یک[قابل پرتاب, A] => واحد) => لغو شده[F]): F[A]> 
  • این کلاس نوع با شروع و توسط RacePair تعریف می شود
  • مسابقه از Racepair گرفته شده است
  • Cancelable از Asyncf و از Bracketcase گرفته شده است ، اما انتظار می رود در موارد برای اهداف بهینه سازی نادیده گرفته شود

امضای در معرض همزمان سازنده همزمان این است:

(هر یک[قابل پرتاب, A] => واحد) => لغو شده[F] 

Canceltoken [f] صرفاً نام مستعار f [واحد] است و برای نشان دادن یک عمل لغو استفاده می شود که سیگنال را به تولید کننده ارسال می کند ، که ممکن است آن را مشاهده کند و روند ناهمزمان را لغو کند.

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

(A => واحد) => واحد 

اما بسیاری از اوقات انتزاع های ساخته شده برای مقابله با کارهای ناهمزمان نیز می تواند راهی برای لغو چنین فرآیندهایی فراهم کند ، در شرایط مسابقه به منظور پاکسازی منابع اولیه استفاده شود ، بنابراین یک تعریف بسیار اساسی و جانبی از فرآیندهای ناهمزمان که می توانند لغو شوندخواهد بود:

(A => واحد) => لغو پذیر 

این تقریباً امضای Settimeout JavaScript است که "شناسه کار" را بازگرداند که می تواند برای لغو آن استفاده شود. یا از Java's SchedledExtRouserService. Schedule ، که یک برنامه ریزی شده جاوا را بازگرداند که دارای یک عمل . cancel () بر روی آن است.

به همین ترتیب ، برای انواع داده های همزمان ، ما می توانیم منطق لغو را ارائه دهیم ، که می تواند در شرایط مسابقه برای لغو پردازش در حال انجام ایجاد شود ، فقط این که نشانه های لغو همزمان همزمان عملی است که در یک canceltoken به حالت تعلیق در می آید ، که چیزی بیشتر نیستاز F [واحد]. io. cancelable را ببینید.

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

دنباله خواب(D:پیدایش): F[واحد] 

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

برای درک این معنی ، در نظر بگیرید که در مورد خواب ما همانطور که در بالا توضیح داده شد ، در مورد لغو ، ما به راهی برای سیگنال دادن به برنامه ریزی شده برنامه ریزی شده برای برنامه ریزی شده برای حذف برنامه ریزی شده از صف داخلی وظایف برنامه ریزی شده خود نیاز داریم. "اجرا. بنابراین ، بدون نوع داده لغو ، یک امضای ایمن باید یک نشانه لغو را برگرداند ، بنابراین به نظر می رسد:

دنباله خواب(D:پیدایش): F[(F[واحد], F[واحد])] 

این عملکرد در حال بازگشت یک Tuple است ، با یک F [واحد] برای انتظار برای تکمیل خواب ما و یک F [واحد] دوم برای لغو محاسبات برنامه ریزی شده در صورت نیاز به آن. این در واقع شکل API فیبر است. و این دقیقاً همان چیزی است که عملیات همزمان باز می گردد.

تفاوت بین یک نوع داده همزمان و موردی که فقط async است در این است که می توانید از هر f [a] به یک فیبر [فیبر [f ، a]] بروید تا در شرایط مسابقه شرکت کنید و در صورت بروز نیاز می تواند لغو شود، به منظور ایجاد زودرس انتشار منابع اختصاص یافته.

بنابراین یک نوع داده همزمان می تواند با خیال راحت در شرایط مسابقه شرکت کند ، در حالی که یک نوع داده که فقط Async است بدون افشای و وادار کردن کاربر به کار با نشانه های لغو نمی تواند. یک نوع داده Async نمی تواند به عنوان مثال یک عملیات شروع که ایمن است ، در معرض دید قرار دهد.

استراتژی‌های اسکالپ...
ما را در سایت استراتژی‌های اسکالپ دنبال می کنید

برچسب : نویسنده : جعفر بدیعی بازدید : <-PostHit-> تاريخ : شنبه 21 مرداد 1402 ساعت: 1:30