کداکسپلور | CodeExplore
8.24K subscribers
2.06K photos
366 videos
124 files
1.94K links
با کد اکسپلور یاد بگیر، لذت ببر و بروز باش ⚡️😉

👨🏻‍💻 ارتباط با ما :
@CodeExploreSup
گروه :
@CodeExplore_Gap

تبلیغات در کد اکسپلور :
@CodeExploreAds
Download Telegram
این مقاله رو هر برنامه نویسی باید بخونه و بلد باشه

برنامه نویسی همزمان

برنامه‌نویسی همزمان یا همان Concurrency یکی از جذاب‌ترین و البته حیاتی‌ترین مفهوم تو دنیای برنامه نویسیه که واقعا دید و کارایی خیلی خوبی بهمون میده

◀️برای درک این مفهوم به نظرم یه مثال از زندگی روزمره خودمون کافیه و تماما جا میوفته براتون:
تصور کنید در حال آشپزی کردنید, پیازها رو خورد میکنید و توی ماهیتابه میریزین یعنی تا وقتی که پیازها سرخ بشن, دست به سینه جلوی گاز همینجوری میمونید؟ قطعاً نه (هر کسیم که بگه آره منتظر میمونم اونو توی اخر مقاله توی یه نکته میگم) با این حال تو همون چند دقیقه ای که پیازا در حال تفت خوردنن شما به سراغ شستن ظرف‌ها یا خرد کردن گوجه‌فرنگی‌ها میرین و خودتون رو به یه کار مشخص دیگه ای مصروف میکنید.
این دقیقاً همون کاریه که برنامه‌نویسی همزمان انجام میده


یعنی مدیریت و پیش‌بردن چند کار مختلف در یک بازه زمانی، بدون اینکه منتظر تموم شدن کار قبلی بمونیم در دنیای سنتی برنامه‌نویسی، همه چیز خط به خط و پشت سر هم اجرا میشه. مثلا اگه برنامتون قرار بود فایلی رو از اینترنت دانلود کنه کل برنامه منتظر میموند تا دانلود تموم بشه و واقعا هم تایم هدر میرفت و هم خسته کننده و رو مخ بود


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


◀️یک مثال عملی و واقعی:
سیستم چت آنلاین یا همون ربات‌های پیام‌رسان فرض کن هزار نفر هم‌زمان به یه ربات مدیریت گروه پیام میدن. اگر برنامه همزمان نباشه ربات باید پیام نفر اولو بگیره پردازش کنه پاسخ بده و بعد که تموم شد سراغ نفر بعدی بره. نیعنی اینجوری باید نفر هزارم اینقدر منتظر بمونه تا کار اینا تموم بشه ولی با برنامه‌نویسی همزمان، ربات پیام نفر اول رو دریافت میکنه و در همان کسری از ثانیه‌ای که منتظر تایید سرور برا ارسال پاسخه پیام‌های نفرات بعدی رو هم تحویل میگیره. در واقع کارها به موازات هم جلو میرن و هیچ‌کس در صف طولانی معطل نمیشه


ما این کار رو توی پایتون با دوتا کلمه کلیدی async و await انجام میدیم و ماژول بیلت این asyncio که در خود پایتون موجوده و نیازی به نصب نیست
پایتون به طور پیشفرض کد هارو خط به خط میخونه ولی این ماژول رفتارش رو تغییر میده و استفاده از تایم رو بهش یاد میده و مثل یک موتور عمل میکنه


◀️یه مثال بزنیم براش:
import asyncio

async def task1():
await asyncio.sleep(2)
print(1)

async def task2():
print(2)

async def task3():
print(3)

async def main():
await asyncio.gather(task1(), task2(), task3())

asyncio.run(main())


◀️خروجی:
2
3
1


◀️توضیحات:
کدمون اگه غیر همزمان بود به تابع task1 میرسید و یه sleep میخورد و تا اون مکثه تموم نمیشد هیچ جوره نمیرفت خط بعدی ولی الان که کدمون همزمانه میاد و به همون تابع میرسه و میبینه که کارش طول میکشه میره بعدیارو اجرا میکنه و بعد هر موقع که کارش تموم شد کارش تسک اولم اجرا میشه


◀️نکته: برای تلف کردن تایم در تابع تسک اول ما اومدیم از async time استفاده کردیم و با ماژول time خود پایتون نمیشه چون asyncable نیست خود ماژول

اونیم که میگفت منتظر میمونم باید بگم که کارش غیر همزمان محسوب میشه و نیازی به همزمان کردن کد نداره حتما شخص بیکاره دیگه میتونه برسه با کاراش🤷‍♂️

#python #learn
☕️ Telegram | Website | Discord
Please open Telegram to view this post
VIEW IN TELEGRAM
10❤‍🔥16🔥31👏1