امروز سه شنبه ، ۱۴۰۱/۰۳/۰۳
بدان

Async IO در کجا متناسب است؟ | Where Does Async IO Fit In?

Async IO در کجا متناسب است؟

همزمانی و موازی بودن موضوعات گسترده ای هستند که نمی توان به راحتی از آنها عبور کرد.

در حالی که این مقاله بر روی async IO و پیاده سازی آن در پایتون متمرکز است ، ارزش آن را دارد که یک دقیقه زمان مقایسه async IO را با همتایان خود بگذارید تا در مورد چگونگی قرارگیری IY در پازل بزرگتر ، گاهی سرگیجه آور ، استفاده کنید.

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

پردازش چندگانه ابزاری برای ایجاد موازی سازی است و مستلزم گسترش کارها بر روی واحدهای پردازش مرکزی رایانه (CPU ها یا هسته ها) است.

پردازش چندگانه برای وظایف متصل به پردازنده مناسب است: محکم به حلقه ها و محاسبات ریاضی معمولاً در این گروه قرار می گیریم.

همزمانی اصطلاحی کمی گسترده تر از موازی کاری است.

این نشان می دهد که چندین کار می توانند به صورت همپوشانی اجرا شوند.

(گفته ای وجود دارد که همزمانی به معنای موازی کاری نیست.) Threading یک مدل اجرای همزمان است که به موجب آن چندین رشته به نوبت وظایف را اجرا می کنند.

یک فرآیند می تواند شامل چندین موضوع باشد.

پایتون به لطف GIL رابطه پیچیده ای با اتصال دارد ، اما این از حوصله این مقاله نیست.

آنچه در مورد نخ کردن مهم است این است که بهتر است برای کارهای وابسته به IO.

در حالی که یک وظیفه متصل به پردازنده با هسته های رایانه ای که از ابتدا تا انتها به سختی کار می کنند مشخص می شود ، یک کار وابسته به IO تحت تأثیر انتظارهای ورودی / خروجی برای تکمیل است.

برای بیان مطالب بالا ، همزمانی شامل چند پردازش (ایده آل برای کارهای متصل به CPU) و رشته (مناسب برای کارهای وابسته به IO) است.

پردازش چندگانه نوعی موازی کاری است که موازی کاری یک نوع خاص (زیرمجموعه) همزمانی است.

کتابخانه استاندارد پایتون از طریق پردازش چندگانه ، اتصال موضوعی و همزمان پشتیبانی طولانی مدت از هر دو مورد را ارائه داده است.

بسته های آتی

اکنون وقت آن است که یک عضو جدید را وارد ترکیب کنید.

طی چند سال گذشته ، یک طراحی جداگانه به طور جامع تری در CPython تعبیه شده است: IO ناهمزمان ، از طریق بسته asyncio کتابخانه استاندارد و async جدید و در انتظار کلمات کلیدی زبان.

برای اینکه واضح باشد ، async IO مفهومی تازه اختراع نشده نیست و در سایر زبانها و محیط های زمان اجرا مانند Go ، C # یا Scala وجود داشته یا در حال ساخت است.

بسته asyncio توسط اسناد Python به عنوان یک کتابخانه برای نوشتن کد همزمان محاسبه می شود.

با این حال ، async IO رشته ای نیست و همچنین چند پردازشی نیست.

بالای هر یک از اینها ساخته نشده است.

در واقع ، async IO یک طرح تک رشته ای و تک فرآیندی است: از چند وظیفه ای تعاونی استفاده می کند ، اصطلاحی که در پایان این آموزش به کار خواهید برد.

به عبارت دیگر گفته شده است که async IO علی رغم استفاده از یک رشته در یک فرآیند ، احساس همزمانی ایجاد می کند.

Coroutines (ویژگی اصلی async IO) می تواند همزمان برنامه ریزی شود ، اما ذاتاً همزمان نیستند.

برای تکرار ، async IO سبک برنامه نویسی همزمان است ، اما موازی نیست.

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

این یک اصطلاح دیگر باقی می گذارد.

ناهمگام بودن چیزی به چه معناست؟ این یک تعریف دقیق نیست ، اما برای اهداف ما در اینجا ، می توانم به دو ویژگی فکر کنم:

روالهای ناهمزمان قادر به "مکث" هنگام انتظار برای نتیجه نهایی خود هستند و اجازه می دهند سایر روال ها در این بین اجرا شوند.

کد ناهمزمان ، از طریق مکانیزم فوق ، اجرای همزمان را تسهیل می کند.

به عبارت دیگر ، کد ناهمزمان به نظر می رسد و احساس همزمانی دارد.

در اینجا یک نمودار برای جمع آوری همه آن آورده شده است.

اصطلاحات سفید نمایانگر مفاهیم هستند و اصطلاحات سبز نشان دهنده روشهایی هستند که در آنها پیاده سازی یا اثر می شوند:

من در اینجا در مقایسه بین مدل های برنامه نویسی همزمان متوقف می شوم.

این آموزش بر روی زیر مonلفه async IO ، نحوه استفاده از آن و API های اطراف آن متمرکز شده است.

برای کاوش کامل موضوع در مقابل پردازش چندگانه در برابر IO async ، در اینجا مکث کرده و مروری بر بررسی همزمانی جیم اندرسون در پایتون را داشته باشید.

جیم بسیار خنده دارتر از من است و در جلسات بیشتر از من برای بوت نشست.