Forwarded from a pessimistic researcher (Kc)
بعد دو سال کار کردن، امشب، یعنی جمعه ساعت ۸:۳۰ که هیچ خبری در این کشور کار نمیکنه :) یکی ایمیل زد که ما داریم برای یه مقاله از ابزار شما استفاده میکنیم و به نظرمون یه باگی داره. باگ در کسری از ثانیه حل شد و من خوشحال از اینکه بالاخره JMC از وضعیت چرا هیچ خری بهش توجه نمیکنه، به وضعیت بالاخره یه عزیزی بهش توجه کرد تغییر کرد :)
GitHub
GitHub - mpi-sws-rse/jmc: jmc: Java Model Checker
jmc: Java Model Checker. Contribute to mpi-sws-rse/jmc development by creating an account on GitHub.
Forwarded from a pessimistic researcher (Kc)
حدس بزنید کی رفته اخیرا ریپوی JMC رو توی گیتهاب star کرده؟ :)
همون که چند وقت پیش توی کانال داشتم پتهاش رو میریختم روی آب :) آدمی که پشت مدل چکر CONFORMANCE هستش :) بله با افتخار :)
همون که چند وقت پیش توی کانال داشتم پتهاش رو میریختم روی آب :) آدمی که پشت مدل چکر CONFORMANCE هستش :) بله با افتخار :)
Forwarded from محتوای آزاد سهراب (Sohrab)
بعضی رفتارها توی بعضی گروهها، رفتارهای جالبی نیست.
من امشب اکثر گروههام رو خارج شدم، همینطور هم که اینجا نوشته بودم، تلگرام مناسب این مدل چیزها نیست.
اگر علاقمند به #نرمافزارآزاد ، #برنامهنویسی یا هرچیزی مرتبط با کامپیوتر هستید میتونید توی فروم پارچ فعالیت کنید، به شرطی که توی تاپیک درست پست بذارید.
https://forum.parchlinux.com
اگر هم از پارچ و من خوشتون نمیاد، میتونید بیاید توی fsiran فعالیت کنید:
https://fsiran.org
اینکه بخوام بنویسم که یک جامعه پویا و فعال خواهیم داشت، متاسفانه دروغی بیش نیست چون وضعیت کشور مانعش میشه، ولی هرکسی درحدی که توی توانش هست میتونه در گسترش و یا تشکیل یک جامعه جدید سهیم باشه، از فعالیت نترسید، از پاسخ دادن توی فروم ها هم نترسید، بالاخره از یکجا باید شروع بشه دیگه ؟
@SohrabContents
من امشب اکثر گروههام رو خارج شدم، همینطور هم که اینجا نوشته بودم، تلگرام مناسب این مدل چیزها نیست.
اگر علاقمند به #نرمافزارآزاد ، #برنامهنویسی یا هرچیزی مرتبط با کامپیوتر هستید میتونید توی فروم پارچ فعالیت کنید، به شرطی که توی تاپیک درست پست بذارید.
https://forum.parchlinux.com
اگر هم از پارچ و من خوشتون نمیاد، میتونید بیاید توی fsiran فعالیت کنید:
https://fsiran.org
اینکه بخوام بنویسم که یک جامعه پویا و فعال خواهیم داشت، متاسفانه دروغی بیش نیست چون وضعیت کشور مانعش میشه، ولی هرکسی درحدی که توی توانش هست میتونه در گسترش و یا تشکیل یک جامعه جدید سهیم باشه، از فعالیت نترسید، از پاسخ دادن توی فروم ها هم نترسید، بالاخره از یکجا باید شروع بشه دیگه ؟
@SohrabContents
Forwarded from PhiloLearn | فیلولرن
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 مکانسیم ماشه فعال شد.
شواری امنیت با ۴ رای موافق، ۲ رای ممتنع و ۹ رای مخالف قطعنامه پیشنهادی چین و روسیه برای تعویق تحریمهای ایران را رد کرد.
#منهای_برنامه_نویسی
@TheRaymondDev
شواری امنیت با ۴ رای موافق، ۲ رای ممتنع و ۹ رای مخالف قطعنامه پیشنهادی چین و روسیه برای تعویق تحریمهای ایران را رد کرد.
#منهای_برنامه_نویسی
@TheRaymondDev
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 در مکانسیم ماشه, بخش اصلی تحریم ها مربوط به حوزه های تسلیحاتی و هستهای خواهد بود، همراه با ممنوعیت سفر افراد تحریمشده و مسدود شدن دارایی های آنان.
در عین حال، گزارشهایی درباره امضای قراردادهای ایران با روسیه، چین و حتی هند و چندین کشور منتشر شده که نشان میدهد همکاریهای اقتصادی، هستهای و حتی نظامی همچنان ادامه دارد و صادرات نفت ایران نیز با مشکل جدی مواجه نیست.
در حوزه مالی، این کشورها میتوانند از مکانیزمهای پرداخت جایگزین مانند استفاده از ارزهای محلی (یوآن، روبل) یا روشهای تهاتر کالا به جای سیستمهای دلاری برای تجارت با ایران بهره بگیرند.
با این حال، ایراد اصلی اینجاست که اقتصاد ایران بهطور فزاینده ای به شرق وابسته خواهد شد و عملاً هیچ همکاری اقتصادی معناداری با اروپا نخواهد داشت.
#منهای_برنامه_نویسی
@TheRaymondDev
در عین حال، گزارشهایی درباره امضای قراردادهای ایران با روسیه، چین و حتی هند و چندین کشور منتشر شده که نشان میدهد همکاریهای اقتصادی، هستهای و حتی نظامی همچنان ادامه دارد و صادرات نفت ایران نیز با مشکل جدی مواجه نیست.
در حوزه مالی، این کشورها میتوانند از مکانیزمهای پرداخت جایگزین مانند استفاده از ارزهای محلی (یوآن، روبل) یا روشهای تهاتر کالا به جای سیستمهای دلاری برای تجارت با ایران بهره بگیرند.
با این حال، ایراد اصلی اینجاست که اقتصاد ایران بهطور فزاینده ای به شرق وابسته خواهد شد و عملاً هیچ همکاری اقتصادی معناداری با اروپا نخواهد داشت.
#منهای_برنامه_نویسی
@TheRaymondDev
Reuters
Iran sanctions snapback offers Chinese oil buyers a lucrative boost
The looming revival of international sanctions on Iran is unlikely to curtail Tehran’s vital oil exports but could benefit Chinese refiners, offering them access to a larger share of discounted Iranian crude.
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
پوشش خبر منهای برنامه نویسی چطور بود؟
به روز رسانی : به دلیل افزایش مخالفت ها خبرهای منهای برنامه نویسی کنسل شد و فقط خبرهای تکنولوژی می زاریم.
@TheRaymondDev
به روز رسانی : به دلیل افزایش مخالفت ها خبرهای منهای برنامه نویسی کنسل شد و فقط خبرهای تکنولوژی می زاریم.
@TheRaymondDev
Forwarded from دستاوردهای یادگیری عمیق(InTec)
چندین بار اومدم از تجربم روی راهاندازی
ولی واقعاً انگیزهای نیست!
بقول صاحب شرکت؛
چیزی که متوجه شدم:
سفارشها ۱ روز قبل جنگ انجام شده؛
بعد جنگ شده و کلی عقب افتاد
در نهایت هر قطعه از یک راهی وارد شده (جهت دور زدن تحریم مثل اینکه)
بعد از جنگ یک سری قراردادهاشون لغو شده
الان هم توی این شرایط یک سری دیگر ...
H200 بگم و Sync کردن و تستهای مختلف که چندروز درگیرش بودم.ولی واقعاً انگیزهای نیست!
بقول صاحب شرکت؛
آقا من ۱۸ میلیارد پول اینارو دادم ولی با این وضعیت دیگه پول متخصص ندارم بدم!
چیزی که متوجه شدم:
سفارشها ۱ روز قبل جنگ انجام شده؛
بعد جنگ شده و کلی عقب افتاد
در نهایت هر قطعه از یک راهی وارد شده (جهت دور زدن تحریم مثل اینکه)
بعد از جنگ یک سری قراردادهاشون لغو شده
الان هم توی این شرایط یک سری دیگر ...
Forwarded from کانال مهرداد لینوکس
📄 دستور mkdir در لینوکس
✅ دستور mkdir (make directory) در Linux برای ساختن دایرکتوری استفاده میشه
اپشنهای متداول:
🔥 ترفندهای ترکیبی و حرفهای:
🔥 برای اسکریپتنویسی خیلی کاربردیه، مثلا ساخت ساختار پروژه😎:
✨ عالیه تا اینجا آمدی 💐 به نظرت کار دستور زیر چیه ؟ و کاربردش چیه؟
#دیوار_لینوکس
@MehrdadLinuxchannel
#Linux #لینوکس
#linux_command
✅ دستور mkdir (make directory) در Linux برای ساختن دایرکتوری استفاده میشه
اپشنهای متداول:
mkdir test ساخت دایرکتوری
mkdir dir1 dir2 dir3 چند دایرکتوری
mkdir -p a/b/c پوشههای تو در تو
mkdir -m 700 private دسترسی خاص
mkdir -v newdir با گزارش
🔥 ترفندهای ترکیبی و حرفهای:
mkdir project_{A,B,C} → ساخت با الگو
mkdir release_{01..12} → پوشههای شمارهدار ۰۱ تا ۱۲
mkdir "$(date +%Y-%m-%d)" → نام تاریخ امروز
mkdir "$(whoami)_data" → اسم کاربر فعلی
mkdir new && cd $_ → ساخت پوشه و ورود🔥 برای اسکریپتنویسی خیلی کاربردیه، مثلا ساخت ساختار پروژه😎:
mkdir -p project/{src/{lib,tests},docs,bin}✨ عالیه تا اینجا آمدی 💐 به نظرت کار دستور زیر چیه ؟ و کاربردش چیه؟
TMPDIR=$(mktemp -d /tmp/mydir.XXXXXX)
#دیوار_لینوکس
@MehrdadLinuxchannel
#Linux #لینوکس
#linux_command
Forwarded from Gopher Academy
🔵 عنوان مقاله
Go's Support for Valgrind Instrumentation
🟢 خلاصه مقاله:
این مقاله درباره پشتیبانی آزمایشی Go از Valgrind است؛ چارچوبی که با ابزارهایی مانند Memcheck، Helgrind، DRD، Cachegrind، Callgrind و Massif برای پروفایلینگ و یافتن خطاهای حافظه و همزمانی بهکار میرود. با این پشتیبانی، برنامههای Go میتوانند به شکل عمیقتری پایش شوند—بهویژه در مرزهای cgo—و علاوه بر ابزارهای داخلی مانند pprof و race detector، گزینههای تشخیصی بیشتری در اختیار دارند. بااینحال، به دلیل سربار اجرایی بالا و ماهیت آزمایشی، نتایج ممکن است شامل خطا یا مثبت کاذب باشد و بهتر است با بیلدهای دیباگ و بارهای کاری کنترلشده استفاده شود. این قابلیت مکمل ابزارهای بومی Go است و جایگزین آنها محسوب نمیشود.
#Go #Valgrind #Instrumentation #Profiling #MemoryLeaks #Concurrency #Performance #Debugging
🟣لینک مقاله:
https://golangweekly.com/link/174628/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Go's Support for Valgrind Instrumentation
🟢 خلاصه مقاله:
این مقاله درباره پشتیبانی آزمایشی Go از Valgrind است؛ چارچوبی که با ابزارهایی مانند Memcheck، Helgrind، DRD، Cachegrind، Callgrind و Massif برای پروفایلینگ و یافتن خطاهای حافظه و همزمانی بهکار میرود. با این پشتیبانی، برنامههای Go میتوانند به شکل عمیقتری پایش شوند—بهویژه در مرزهای cgo—و علاوه بر ابزارهای داخلی مانند pprof و race detector، گزینههای تشخیصی بیشتری در اختیار دارند. بااینحال، به دلیل سربار اجرایی بالا و ماهیت آزمایشی، نتایج ممکن است شامل خطا یا مثبت کاذب باشد و بهتر است با بیلدهای دیباگ و بارهای کاری کنترلشده استفاده شود. این قابلیت مکمل ابزارهای بومی Go است و جایگزین آنها محسوب نمیشود.
#Go #Valgrind #Instrumentation #Profiling #MemoryLeaks #Concurrency #Performance #Debugging
🟣لینک مقاله:
https://golangweekly.com/link/174628/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from DevTwitter | توییت برنامه نویسی
ورژن جدید جاوااسکریپت ECMAScript 2026 یه متود جدید به اسم try به Promise اضافه کرده
باهاش میتونید یه تابع sync رو با ظاهر async اجرا کنید و فرقش با حالت then اینه که این همون لحظه اجرا میشه اما then اجرا رو به میکروتسک بعدی منتقل میکنه، یعنی کمی تأخیر داره.
@DevTwitter | <Nimo/>
باهاش میتونید یه تابع sync رو با ظاهر async اجرا کنید و فرقش با حالت then اینه که این همون لحظه اجرا میشه اما then اجرا رو به میکروتسک بعدی منتقل میکنه، یعنی کمی تأخیر داره.
@DevTwitter | <Nimo/>
Forwarded from IRCF | اینترنت آزاد برای همه
#فیلترینگ
وزارت ارشاد با صدور یک دستورالعمل، اقدام به مسدودسازی وبسایتهای رسمی و سامانههای فروش ۲۵ شرکت فعال در حوزه مواد غذایی صادراتمحور کرده. شرق گزارش داده که این تصمیم بهدلیل تبلیغ این شرکتها در ماهواره اتخاذ شده!
همینطور ارائه دهنده پکتلاس که ابزاری برای سنجش کیفیت و پایداری اینترنت هست، گفته "سایتشون بیدلیل روی اینترنت ثابت و همراه درحال مسدود شدن هست".
🔍 ircf.space
@ircfspace
وزارت ارشاد با صدور یک دستورالعمل، اقدام به مسدودسازی وبسایتهای رسمی و سامانههای فروش ۲۵ شرکت فعال در حوزه مواد غذایی صادراتمحور کرده. شرق گزارش داده که این تصمیم بهدلیل تبلیغ این شرکتها در ماهواره اتخاذ شده!
همینطور ارائه دهنده پکتلاس که ابزاری برای سنجش کیفیت و پایداری اینترنت هست، گفته "سایتشون بیدلیل روی اینترنت ثابت و همراه درحال مسدود شدن هست".
🔍 ircf.space
@ircfspace
Forwarded from DevTwitter | توییت برنامه نویسی
قصه غمانگیز هوش مصنوعی در ایران
ردههای بالای سازمانی دستور میدن که هوش مصنوعی رو وارد سازمان کنید.
ردههای میانی هم میان یه مشت داکیومنت از ته انبار ورمیدارن میارن میگن بیاید برای ما چتبات بسازید.
نه فکری...نه حساب کتابی...نه نیازسنجی...هیچی
@DevTwitter | <Reza Jafari/>
ردههای بالای سازمانی دستور میدن که هوش مصنوعی رو وارد سازمان کنید.
ردههای میانی هم میان یه مشت داکیومنت از ته انبار ورمیدارن میارن میگن بیاید برای ما چتبات بسازید.
نه فکری...نه حساب کتابی...نه نیازسنجی...هیچی
@DevTwitter | <Reza Jafari/>
Forwarded from Reza Jafari
درک و مدیریت دادههای گمشده: MCAR، MAR و MNAR به زبان ساده
وقتی با دادهها سروکار داریم، همیشه احتمال وجود مقادیر گمشده یا missing data هست. این مقادیر خالی اگر به درستی مدیریت نشن، میتونن کل نتیجه تحلیل یا مدلسازی رو تحت تأثیر بذارن. برای اینکه بفهمیم چطور باید با این مشکل برخورد کنیم، اول لازمه بدونیم دادهها به چه شکلی گم شدن. معمولاً سه نوع اصلی وجود داره: MCAR، MAR و MNAR.
در حالت MCAR (Missing Completely At Random)، احتمال گم شدن یک مقدار هیچ ربطی به مقدار خودش یا سایر دادهها نداره. به عبارت دیگه، کاملاً تصادفی رخ میده. مثلاً فرض کن یک پرسشنامه پستی فرستادی و بعضی برگهها به خاطر مشکلات پست به دستت نمیرسه. یا یک سنسور هواشناسی به دلیل قطعی برق بعضی لحظهها دادهای ثبت نمیکنه. اینها مثالهای کلاسیک MCAR هستن چون نبود داده هیچ ارتباطی با خود مقدار نداره. اگر دادهها واقعاً MCAR باشن، حتی حذف ردیفهای ناقص هم معمولاً باعث ایجاد سوگیری در نتایج نمیشه.
اما در حالت MAR (Missing At Random)، گم شدن داده به متغیرهای قابل مشاهده وابسته است، نه به خود مقدار گمشده. مثلاً در یک نظرسنجی، افراد کمسنوسال کمتر حاضر میشن درآمدشون رو اعلام کنن. این یعنی نبود داده به سن وابسته است، ولی نه به مقدار واقعی درآمد. یا در پروندههای پزشکی، افراد مسنتر ممکنه بعضی اندازهگیریها رو جا بندازن، اما این نبود داده بیشتر به سنشون مربوط میشه تا خود مقدار فشار خون. این حالت خیلی رایجه و خوشبختانه میشه با روشهایی مثل multiple imputation یا مدلسازی مبتنی بر متغیرهای دیگه مدیریتش کرد.
سختترین حالت، MNAR (Missing Not At Random) هست. اینجا گم شدن داده مستقیماً به مقدار خودش بستگی داره. مثلاً کسانی که درآمد خیلی بالا دارن ممکنه بهعمد جواب نشن چون نمیخوان افشا بشه. یا افراد با وزن بالا ممکنه تصمیم بگیرن وزنشون رو گزارش نکنن. در این حالت، نبود داده به خود متغیر وابسته است و نمیشه صرفاً با بقیه اطلاعات توضیحش داد. همین باعث میشه روشهای معمول مثل حذف یا ایمپوت ساده، سوگیری جدی ایجاد کنن. برای مواجهه با MNAR معمولاً باید از مدلهای پیچیدهتر، تحلیل حساسیت یا فرضیههای اضافه استفاده کنیم.
نکته مهم اینه که تشخیص دقیق نوع missingness خیلی دشواره، چون عملاً ما به داده گمشده دسترسی نداریم. معمولاً باید با ترکیبی از منطق، دانش حوزه کاری و بررسی الگوها تصمیم بگیریم. حتی ممکنه در یک ستون، بعضی مقادیر به صورت MAR و بعضی به صورت MNAR گم شده باشن. همچنین با اضافه کردن متغیرهای کمکی مرتبط میشه بعضی از دادههای MNAR رو به MAR نزدیک کرد و مدیریت بهتری داشت. در نهایت انتخاب روش برخورد باید متناسب با شرایط داده و تحلیل باشه: برای MCAR روشهای ساده جواب میدن، برای MAR باید از مدلسازی و imputation استفاده کرد، و برای MNAR به ابزارهای پیشرفتهتر نیاز داریم.
🔤 🔤 🔤 🔤 🔤 🔤 🔤
🥇 اهورا اولین اپراتور هوش مصنوعی راهبردی ایران در حوزه ارائه خدمات و سرویسهای زیرساخت هوش مصنوعی
🌐 لینک ارتباط با اهورا
@reza_jafari_ai
وقتی با دادهها سروکار داریم، همیشه احتمال وجود مقادیر گمشده یا missing data هست. این مقادیر خالی اگر به درستی مدیریت نشن، میتونن کل نتیجه تحلیل یا مدلسازی رو تحت تأثیر بذارن. برای اینکه بفهمیم چطور باید با این مشکل برخورد کنیم، اول لازمه بدونیم دادهها به چه شکلی گم شدن. معمولاً سه نوع اصلی وجود داره: MCAR، MAR و MNAR.
در حالت MCAR (Missing Completely At Random)، احتمال گم شدن یک مقدار هیچ ربطی به مقدار خودش یا سایر دادهها نداره. به عبارت دیگه، کاملاً تصادفی رخ میده. مثلاً فرض کن یک پرسشنامه پستی فرستادی و بعضی برگهها به خاطر مشکلات پست به دستت نمیرسه. یا یک سنسور هواشناسی به دلیل قطعی برق بعضی لحظهها دادهای ثبت نمیکنه. اینها مثالهای کلاسیک MCAR هستن چون نبود داده هیچ ارتباطی با خود مقدار نداره. اگر دادهها واقعاً MCAR باشن، حتی حذف ردیفهای ناقص هم معمولاً باعث ایجاد سوگیری در نتایج نمیشه.
اما در حالت MAR (Missing At Random)، گم شدن داده به متغیرهای قابل مشاهده وابسته است، نه به خود مقدار گمشده. مثلاً در یک نظرسنجی، افراد کمسنوسال کمتر حاضر میشن درآمدشون رو اعلام کنن. این یعنی نبود داده به سن وابسته است، ولی نه به مقدار واقعی درآمد. یا در پروندههای پزشکی، افراد مسنتر ممکنه بعضی اندازهگیریها رو جا بندازن، اما این نبود داده بیشتر به سنشون مربوط میشه تا خود مقدار فشار خون. این حالت خیلی رایجه و خوشبختانه میشه با روشهایی مثل multiple imputation یا مدلسازی مبتنی بر متغیرهای دیگه مدیریتش کرد.
سختترین حالت، MNAR (Missing Not At Random) هست. اینجا گم شدن داده مستقیماً به مقدار خودش بستگی داره. مثلاً کسانی که درآمد خیلی بالا دارن ممکنه بهعمد جواب نشن چون نمیخوان افشا بشه. یا افراد با وزن بالا ممکنه تصمیم بگیرن وزنشون رو گزارش نکنن. در این حالت، نبود داده به خود متغیر وابسته است و نمیشه صرفاً با بقیه اطلاعات توضیحش داد. همین باعث میشه روشهای معمول مثل حذف یا ایمپوت ساده، سوگیری جدی ایجاد کنن. برای مواجهه با MNAR معمولاً باید از مدلهای پیچیدهتر، تحلیل حساسیت یا فرضیههای اضافه استفاده کنیم.
نکته مهم اینه که تشخیص دقیق نوع missingness خیلی دشواره، چون عملاً ما به داده گمشده دسترسی نداریم. معمولاً باید با ترکیبی از منطق، دانش حوزه کاری و بررسی الگوها تصمیم بگیریم. حتی ممکنه در یک ستون، بعضی مقادیر به صورت MAR و بعضی به صورت MNAR گم شده باشن. همچنین با اضافه کردن متغیرهای کمکی مرتبط میشه بعضی از دادههای MNAR رو به MAR نزدیک کرد و مدیریت بهتری داشت. در نهایت انتخاب روش برخورد باید متناسب با شرایط داده و تحلیل باشه: برای MCAR روشهای ساده جواب میدن، برای MAR باید از مدلسازی و imputation استفاده کرد، و برای MNAR به ابزارهای پیشرفتهتر نیاز داریم.
@reza_jafari_ai
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Gopher Academy
🔹 Introduction – Memory Allocation in Go
مدیریت حافظه بخش حیاتی هر زبان برنامهنویسی است و Go هم از این قاعده مستثنی نیست. سرعت و کارایی برنامههای Go به شدت وابسته به نحوه تخصیص و مدیریت حافظه است.
هرچند Go با APIهای سادهای مثل
* بفهمیم چگونه runtime بازدهی بالایی دارد،
* نقاط ضعف و گلوگاههای احتمالی را شناسایی کنیم.
در این سری قرار است:
* با اجزای اصلی memory allocator در Go آشنا شویم،
* نحوه مدیریت حافظه برای اشیاء کوچک، متوسط و بزرگ را ببینیم،
* مدیریت stack در کنار heap را بررسی کنیم،
* و در نهایت با مطالعه case studyها**، تأثیر عملی این استراتژیها را در برنامههای واقعی درک کنیم.
قبل از ورود به جزئیات، بهتر است مفاهیم پایهای **Virtual Memory در سیستمعامل مرور شود.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
مدیریت حافظه بخش حیاتی هر زبان برنامهنویسی است و Go هم از این قاعده مستثنی نیست. سرعت و کارایی برنامههای Go به شدت وابسته به نحوه تخصیص و مدیریت حافظه است.
هرچند Go با APIهای سادهای مثل
new(T), &T{} و make پیچیدگیها را از دید برنامهنویس پنهان میکند، اما درک سازوکار پشت پرده به ما کمک میکند:* بفهمیم چگونه runtime بازدهی بالایی دارد،
* نقاط ضعف و گلوگاههای احتمالی را شناسایی کنیم.
در این سری قرار است:
* با اجزای اصلی memory allocator در Go آشنا شویم،
* نحوه مدیریت حافظه برای اشیاء کوچک، متوسط و بزرگ را ببینیم،
* مدیریت stack در کنار heap را بررسی کنیم،
* و در نهایت با مطالعه case studyها**، تأثیر عملی این استراتژیها را در برنامههای واقعی درک کنیم.
قبل از ورود به جزئیات، بهتر است مفاهیم پایهای **Virtual Memory در سیستمعامل مرور شود.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from Gopher Academy
🔹 Go’s View of Virtual Memory
یک برنامه Go در اصل یک پردازش فضای کاربر (user-space process) است و همان چیدمان استاندارد حافظه مجازی (Stack, Heap, BSS, Data) را دارد.
در Stack، Go از استک خاصی به نام g0 stack استفاده میکند که به نخ اصلی runtime (m0) متصل است.
متغیرهای global که مقدار اولیه دارند در بخش Data ذخیره میشوند، و متغیرهای global بدون مقدار اولیه در بخش BSS قرار میگیرند.
بر خلاف زبانهای سنتی مثل C که از Heap زیر program break استفاده میکنند، Go این Heap سنتی را برای اشیای خود به کار نمیبرد.
به جای آن، Go برای تخصیص حافظه اشیای heap و استک گوروتینها از memory-mapped segments استفاده میکند.
از اینجا به بعد، وقتی از "heap" در Go صحبت میکنیم، منظور همان بخش memory-mapped است (و نه heap سنتی زیر program break).
👉 به زبان ساده: Go یک heap اختصاصی روی memory-mapped segments میسازد و مدیریت حافظه را خودش انجام میدهد، نه اینکه از heap پیشفرض سیستم عامل استفاده کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
یک برنامه Go در اصل یک پردازش فضای کاربر (user-space process) است و همان چیدمان استاندارد حافظه مجازی (Stack, Heap, BSS, Data) را دارد.
در Stack، Go از استک خاصی به نام g0 stack استفاده میکند که به نخ اصلی runtime (m0) متصل است.
متغیرهای global که مقدار اولیه دارند در بخش Data ذخیره میشوند، و متغیرهای global بدون مقدار اولیه در بخش BSS قرار میگیرند.
بر خلاف زبانهای سنتی مثل C که از Heap زیر program break استفاده میکنند، Go این Heap سنتی را برای اشیای خود به کار نمیبرد.
به جای آن، Go برای تخصیص حافظه اشیای heap و استک گوروتینها از memory-mapped segments استفاده میکند.
از اینجا به بعد، وقتی از "heap" در Go صحبت میکنیم، منظور همان بخش memory-mapped است (و نه heap سنتی زیر program break).
👉 به زبان ساده: Go یک heap اختصاصی روی memory-mapped segments میسازد و مدیریت حافظه را خودش انجام میدهد، نه اینکه از heap پیشفرض سیستم عامل استفاده کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from Gopher Academy
برای مدیریت بهینهی حافظه، Go حافظهی تخصیصدادهشده از طریق memory mapping را به واحدهای سلسلهمراتبی تقسیم میکند:
ساختار حافظه:
Arena (۶۴MB)
بزرگترین واحد تخصیص در Go.
هر Arena فضایی به اندازهی ثابت ۶۴MB دارد.
اGo سعی میکند Arenaها رو پشتسر هم قرار بده، ولی همیشه تضمین نمیشه (به خاطر رفتار mmap).
Page (۸KB)
هر Arena به صفحات (Page) تقسیم میشود.
سایز هر Page: ۸KB.
این Pageها با Pageهای سیستمعامل (معمولاً ۴KB) متفاوت هستند.
تخصیص اشیاء:
اگر اندازهی شیء کوچکتر از ۸KB باشد → چندین شیء در یک Page جا میگیرند.
اگر اندازهی شیء دقیقاً ۸KB باشد → کل Page را اشغال میکند.
اگر اندازهی شیء بزرگتر از ۸KB باشد → روی چند Page گسترده میشود.
اGoroutine Stack
استک هر goroutine در همین Pageها نگهداری میشود.
هر استک در ابتدا فقط ۲KB است.
بنابراین یک Page (۸KB) میتواند تا ۴ goroutine stack را در خود جا دهد.
به زبان ساده:
اGo حافظه را اول به Arena (۶۴MB) تقسیم میکند، سپس هر Arena را به Page (۸KB) میشکند و این Pageها برای اشیاء مختلف یا استک goroutineها استفاده میشوند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
ساختار حافظه:
Arena (۶۴MB)
بزرگترین واحد تخصیص در Go.
هر Arena فضایی به اندازهی ثابت ۶۴MB دارد.
اGo سعی میکند Arenaها رو پشتسر هم قرار بده، ولی همیشه تضمین نمیشه (به خاطر رفتار mmap).
Page (۸KB)
هر Arena به صفحات (Page) تقسیم میشود.
سایز هر Page: ۸KB.
این Pageها با Pageهای سیستمعامل (معمولاً ۴KB) متفاوت هستند.
تخصیص اشیاء:
اگر اندازهی شیء کوچکتر از ۸KB باشد → چندین شیء در یک Page جا میگیرند.
اگر اندازهی شیء دقیقاً ۸KB باشد → کل Page را اشغال میکند.
اگر اندازهی شیء بزرگتر از ۸KB باشد → روی چند Page گسترده میشود.
اGoroutine Stack
استک هر goroutine در همین Pageها نگهداری میشود.
هر استک در ابتدا فقط ۲KB است.
بنابراین یک Page (۸KB) میتواند تا ۴ goroutine stack را در خود جا دهد.
به زبان ساده:
اGo حافظه را اول به Arena (۶۴MB) تقسیم میکند، سپس هر Arena را به Page (۸KB) میشکند و این Pageها برای اشیاء مختلف یا استک goroutineها استفاده میشوند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy