انواع حالات برنامه نویسی در پارادایم Concurrent Programming

Please login to bookmark Close

در بخش قبل با پارادایم‌های Concurrent Programming و Sequential Programming آشنا شدیدیم و مزایا و معایب هر یک را بررسی کردیم. در این بخش می‌خواهیم انواع حالات برنامه‌نویسی در پارادایم Concurrent Programming را بررسی کنیم و تفاوت‌ها و مزایا و معایت هر یک را درک کنیم.

واژه‌نامه

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

CPU bound task

تسکی که محاسبه آن بیشتر وابسته به عملیات ریاضی است که توسط CPU انجام می‌شود. مانند پردازش تصویر، پردازش متن، پردازش صدا، پردازش‌های محاسباتی مربوط به ماشین لرنینگ و …

IO bound task

تسکی که محاسبه آن کمتر به محاسبات ریاضی وابسته است و بیشتر از نوع نوشتن و خواندن روی حافظه است. برخی از این نوع تسک‌ها شامل خواندن و نوشتن در دیتابیس، کپی کردن، دانلود کردن،‌ آپلود کردن فایل و … می‌شوند.

پردازشگر

CPU ها گاهی تک هسته‌ای هستند و گاهی چند هسته‌ای. در این بخش برای سهولت بیشتر، به صورت کلی به همه انواع آن پردازشگر می‌گوییم.

مقدمه

در پارادایم Concurrent Programming، برنامه‌ها به دو دسته زیر تقسیم می‌شوند.

  • Parallel – موازی
  • Concurrent – همزمان یا همروند

برنامه‌نویسی در هر یک از این دو دسته، تکنیک خاص خود را می‌طلبد. برای برنامه‌نویسی موازی از تکنیک multiprocessing و برای برنامه‌نویسی همزمان (همروند) از تکنیک‌های multithreading و asynchronous programming استفاده می‌شود.

نمایش انواع برنامه‌نویسی همروند و متوالی به تفکیک سبک کدنویسی آن‌ها

تصویر بالا نشان می‌دهد که:

  • برای Multiprocessing Programming از ماژول های multiprocessing و concurrent.future می‌توان استفاده کرد.
  • برای Multithreaded Programming از ماژول های threading و _thread می‌توان استفاده کرد.
  • برای Asynchronous Programming از ماژول asyncio می‌توان استفاده کرد.

در ادامه این دوره، این ماژول ها را به شما خواهم آموخت و در هر کدام عمیق خواهیم شد.

parallel چیست؟

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

شکل ۱ – اجرای موازی ۳ تسک به روش parallel

تصویر بالا اجرای ۳ تسک به صورت همزمان را نشان می‌دهد. همانطور که مشخص است برای انجام هر کدام از آن‌ها، هیچیک متوقف نمی‌شود.

برای اینکه بتوانید برنامه هایی بنویسید که تسک ها را با این روش انجام دهد باید از تکنیک multiprocessing استفاده کنید. همچنین در نسخه ۳.۱۳ پایتون، اجرای موازی تسک ها با استفاده از تکنیک multithreading نیز فراهم شده است که بعدا بیشتر به آن خواهیم پرداخت.

concurrent چیست؟

در پایتون به معنی اجرای چند تسک به صورت همزمان با ایجاد وقفه بین آن‌ها است.

شکل ۲ – اجرای همزمان ۳ تسک در نوع concurrent

در تصویر بالا:

  • ابتدا CPU تسک اول را اجرا می‌کند.
  • پس از اینکه ۳۰٪ از تسک اول را اجرا کرد یک تسک مهم‌تر می‌رسد.
  • وضعیت تسک اول در حافظه CPU ذخیره می‌شود.
  • CPU تسک دوم را اجرا می‌کند.
  • و…

در واقع در هر لحظه فقط یک تسک انجام می‌شود. در این لحظه سایر تسک‌ها متوقف هستند.

در این نوع برنامه‌نویسی از تکنیک multithreading و asynchronous programming استفاده می‌شود.

تکنیک multiprocessing

تنها تکنیکی است که به ما امکان اجرای موازی برنامه‌ها را روی چند پردازنده را می‌دهد. مناسب تسک‌های CPU Bound است.

برای برنامه‌نویسی با این تکنیک می‌توان از ماژول multiprocessing یا concurrent.fufures استفاده کرد.

موارد استفاده:

  • محاسبات پیچیده و سنگین: مانند تحلیل داده‌های بزرگ، پردازش تصویر و ویدیو، یا کارهای علمی و عددی.
  • کارهای مستقل از یکدیگر: جایی که وظایف مختلف نیازی به اشتراک‌گذاری حافظه ندارند.

مثال – مامان مهربون

یک مامان مهربون در حالی که با یک دست مایع شیرینی را هم می‌زند، با دست دیگر می‌تواند فرزندش را در آغوش بگیرد و نیز همزمان با تلفن صحبت کند. در این مثال مامان به صورت موازی هر ۳ کار را انجام می‌دهد.

تکنیک multithreading

این تکنیک به ما امکان اجرای برنامه روی چندین thread را می‌دهد. برنامه‌هایی که با این تکنیک نوشته می‌شوند به صورت همزمان (نه موازی!) اجرا می‌شوند.

این تکنیک مناسب تسک‌هایی است که به صورت معتدل، هم CPU Bound هستند و هم IO Bound

موارد استفاده:

  • کارهای ورودی/خروجی: مانند خواندن/نوشتن فایل، عملیات شبکه، یا دسترسی به پایگاه داده.
  • وظایف موازی که نیاز به اشتراک‌گذاری حافظه دارند: مانند به‌روزرسانی رابط کاربری.

مثال – برگزاری مهمانی

فرض کنید دوستان خود را برای یک دورهمی به صرف شام برای فردا شب دعوت کرده‌اید. باید امروز سالاد، ژله و شام را درست کنید. بدین منظور، یک ظرف آب روی اجاق‌گاز قرار می‌دهید تا وقتی به جوش آمد از آن برای درست کردن ژله استفاده کنید. یک ظرف آب دیگر روی اجاق‌گاز قرار می‌دهید که وقتی به جوش آمد برای پخت غذا از آن استفاده کنید. در این حین کاهوها را نیز براش شستشو آماده می‌کنید.

در این مثال شما به صورت همزمان (نه موازی!) مشغول انجام چند کار هستید.

تکنیک Asynchronous Programming

برنامه‌هایی که با این تکنیک توسعه می‌یابند، تنها روی یک thread اجرا می‌شوند. به عبارت دیگر، برنامه‌های async همگی single-thread هستند. به همین دلیل اصلا برای انجام تسک‌های CPU Bound مناسب نیستند.

موارد استفاده:

  • عملیات ورودی/خروجی غیر مسدودکننده: مانند درخواست‌های شبکه، عملیات فایل‌های غیرهمزمان، و غیره.
  • تعداد زیادی وظیفه که به صورت همزمان اجرا می‌شوند: مانند سرویس‌های وب، ربات‌های چت، یا برنامه‌های Real-Time.

مثال – رسیدگی به امور روزمره

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

در این مثال این شخص ۳ کار را به صورت همزمان شروع کرده است اما انجام این کارها آنقدر زمان می‌برد که در این بین می‌تواند به کارهای دیگری مشغول شود.

خلاصه

پارادایمconcurrent programmingconcurrent programmingconcurrent programming
نوعparallelconcurrentconcurrent
تکنیکmultiprocessingmultithreadingasynchronous programming
نیاز به RAM و Networkکممتوسطزیاد
نیاز به CPUزیادمتوسطکم
تعداد CPUچندیکیک
تعداد Threadچندچندیک
نحوه اجرای تسکاجرای موازی چند تسکاجرای همزمان چند تسکاجرای همزمان تعداد زیادی از تسک‌های سبک
ماژول‌هاconcurrent.futures
multiprocessing
cuncorrent.futures
multithreading
_thread
asyncio
مقایسه تکنیک‌های برنامه‌نویسی در پارادایم concurrent programming
Please login to bookmark Close
پیشرفت شما در «دوره آموزش کانکارنسی در پایتون» (10%)
نظرات

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

10%
پیشرفت
فهرست مطالب

تمرین

این قسمت تمرین ندارد!

پاسخ تمرین ها

هنوز برای تمرین‌های این قسمت پاسخی ثبت نشده است!

اشتراک گذاری

چرا بهتره از فیلترشکن استفاده کنید؟

من همه ویدئو ها و پادکست های کُدباز رو توی یوتیوب و ساندکلود و پلتفرم هایی آپلود می‌کنم که اغلب فیلتر هستند.

اغلب آموزش‌ها ویدئو و پادکست دارند. پس اگر می‌خواهید از محتوای سایت بیشترین استفاده رو ببرید نیاز به فیلتر شکن دارید.

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

تنظیمات

انتخاب زبان
تغییر تم