کداکسپلور | CodeExplore
7.92K subscribers
1.99K photos
326 videos
103 files
1.79K links
با کد اکسپلور یاد بگیر، لذت ببر و بروز باش ⚡️😉

سایت:
CodeExplore.ir
👨🏻‍💻 ارتباط با ما :
@CodeExploreSup
گروه :
@CodeExplore_Gap
تبلیغات در کد اکسپلور :
@CodeExploreAds
Download Telegram
اینک کتابخانه numpy یکی از معروف ترین و کاربردی ترین کتابخانه های زبان به شدت عالی پایتون😁
اما چی هست؟ اگه یادتون باشه یه نظرسنجی گذاشتیم در مورد بهبود حافظه برای متغییر اعدادیتون توی پایتون.
بله با این کتابخانه میشه به اندازه نیازتون حافظه اختصاص بدید
کاربرد numpy برای machine learning یکی از شاخه های AI و ... هست که به شدت کاربردی هست
شاید خیلی برای برنامه های ساده منطقی نیاد ازش استفاده کنید اما اگه بخوایید برنامتون وقتی سنگین میشه به مشکل نخورید بهتره فکر حافظه رو بکنید حتی اگه رمتون ۱۲۸ گیگه😕
اما بریم یه مثال خیلی ساده بزنیم
import numpy as np
import sys

arr = np.zeros((10000),np.int8)
arr2 = [0 for _ in range(10000)]

print(sys.getsizeof(arr))
print(sys.getsizeof(arr2))

output :

10112
85176

دقیقا چیشد؟ من با numpy اومدم یک array شامل ده هزار تا صفر تعریف کردم امااااااااا از نوع int8 یعنی یک بایت کلا (۸ بیت)
خوب چه فرقی کرد؟؟؟؟؟ صبر کنید عجله نکنید
بعدش میام یه آرایه عادی مثل همیشه که توی پایتون کار می کنیم تعریف می کنیم بازم با ده هزار تا صفر
بعدش میام از حافظه ای که جفتشون اشغال کردن پرینت میگیرم
جالب شد نه؟ حجم object آرایه ای که با numpy درست کردیم 10112 بایت شده و عادیش هم 85176 بایت. عجب فرقی نه؟
اما نکته مهم : آرایه عادی ما dynamic هست که یکی از صفات بارز زبان پایتونه اما توی کاربرد های خاص که فقط با اعداد ها کار داریم مخصوصا هوش مصنوعی برای سبک تر کردن پروژه باید از کتابخانه هایی استفاده کنید که کمی از dynamic بودنه دور شین تا برنامتون تکلیفش مشخص باشه
#Python #AI #Optimization #Memory
☕️ @CodeExplore
🔥124❤‍🔥1💔1
مدیریت حافظه توی Go
شاید براتون جالب باشه بدونید که هر برنامهٔ کامپیوتری معمولاً حافظه‌شو تو سه بخش اصلی نگه می‌داره:

حافظهٔ سراسری (Global): برای متغیرهایی که کل مدت اجرای برنامه هستن.
پشته (Stack): برای متغیرهای محلی و موقتی؛ سریع و خودکار تخصیص و آزاد می‌شه.
هیپ (Heap): برای داده‌هایی که عمر طولانی‌تری دارن یا بین بخش‌های مختلف برنامه به اشتراک گذاشته می‌شن؛ مدیریت‌شون کمی سخت‌تره.

زبان Go برای این‌که برنامه‌ها سبک‌تر و سریع‌تر باشن، تا جایی که می‌تونه داده‌ها رو تو پشته نگه می‌داره. این‌که یه داده تو پشته بمونه یا بره هیپ، رو بخشی از کامپایلر به اسم تحلیل فرار (Escape Analysis) تصمیم می‌گیره. این تحلیل نگاه می‌کنه اگه یه متغیر بعد از تموم شدن تابع هم باید زنده بمونه، می‌فرستدش هیپ.

تو زبان‌هایی مثل C و ++C، آزاد نکردن حافظه، دوبار آزاد کردن یا اشاره‌گرهای معلق می‌تونه دردسر بزرگی بشه. Go با داشتن جمع‌آوری‌کنندهٔ زباله (Garbage Collector) این دردسرا رو از دوش برنامه‌نویس برداشته. GCش بر پایهٔ الگوریتم Mark & Sweep کار می‌کنه و خودکار حافظهٔ بلااستفاده رو آزاد می‌کنه.

به زبون ساده:
1️⃣ توقف کوتاه‌مدت برنامه (Stop-The-World): وقتی GC شروع می‌شه، اجرای goroutineها برای مدت کوتاهی متوقف می‌شه تا وضعیت حافظه ثبت بشه.
2️⃣ علامت‌گذاری (Mark): اشیایی که هنوز در حال استفاده‌ان علامت می‌خورن.
3️⃣ پاک‌سازی (Sweep): حافظهٔ اشیای غیرقابل‌دسترس آزاد می‌شه.

یه نکتهٔ جالب دیگه اینه که کد نهایی Go شامل runtime خودش هم هست؛ یعنی وقتی یه برنامهٔ Go رو کامپایل می‌کنید، علاوه بر کد شما، اجزای زمان‌اجرای Go مثل همین GC، مدیریت پشته، زمان‌بندی goroutineها و فراخوانی‌های سیستمی هم داخل فایل باینری قرار می‌گیرن. این باعث می‌شه خیلی از قابلیت‌های مدیریت حافظه به‌صورت خودکار تو برنامه حاضر باشه.

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

#go #memory #managment
☕️ Telegram | Website | Discord
🔥6❤‍🔥2😍2