Forwarded from Linuxor ?
قطع کردن اینترنت جوکی بیش نیست که بیشتر منافع سیاسی یه عده رو داره تامین میکنه؛ توی هک و امنیت ایران انصافاً قویه؛ اکثر متخصصها روحیه خاورمیانهای و جنگی دارن، ولی هنوز به شکل سیستماتیک و تیممحور رشد نکردن. بیشتر استعدادها بهصورت فردی کار میکنن، اگه بشه این پتانسیل فردی رو توی چارچوبهای منسجمتر هدایت کرد، میتونه یه قدرت سایبری جدی بسازه که هم توی دفاع و هم توی حمله، سطح جهانی رو به چالش بکشه.
ولی یه انسان با وجدان میخواد که چهار تا پس گردنی بزنه به کسایی که مانع جلوی پیشرفت ایران میزارن و به فکر منافع سیاسی خودشونن.
@Linuxor
ولی یه انسان با وجدان میخواد که چهار تا پس گردنی بزنه به کسایی که مانع جلوی پیشرفت ایران میزارن و به فکر منافع سیاسی خودشونن.
@Linuxor
Forwarded from محتوای آزاد سهراب
مایکروسافت خودش بهتر میدونه که چطور ویندوز رو بسازه تا هر برنامهای با تسکاسکجولر بره توی رجیستری چیزی اضافه کنه.
ما هم که فقط لینوکس رو زرق و برقدار میکنیم و فاز داریم :)))
@SohrabContents
ما هم که فقط لینوکس رو زرق و برقدار میکنیم و فاز داریم :)))
@SohrabContents
Forwarded from 🎄 یک برنامه نویس تنبل ( MΞ)
ایرانسل اخیرا قیمت بستههای #اینترنت TD-LTE رو بالا برده و تعویض سرویسدهنده میتونه خرج اضافی رو دستتون بذاره، چون باید مودم جدید تهیه کنین. اما یه کاربر به اسم Atomic One روشی آموزش داده که باهاش میتونین مودم رو آنلاک کرده و از اینترنت بقیه اپراتورها هم استفاده کنین.
shorturl.at/GOZ95
@TheRaymondDev
shorturl.at/GOZ95
@TheRaymondDev
Forwarded from Linuxor ?
یکی از پایه ای ترین پروژه های CNN که میتونید پیدا کنید اینه؛ دسته بندی نژاد سگ ها با استفاده از یادگیری انتقالی (Transfer Learning) با مدلهای پیشآموزشدیده مثل VGG16، ResNet50 و InceptionV3
github.com/anubhavshrimal/CNN-Dog-Breed-Classifier
@Linuxor
github.com/anubhavshrimal/CNN-Dog-Breed-Classifier
@Linuxor
Forwarded from LearnPOV | لرن پی او وی
دیگه نیازی نیست مثل قدیما برای web scrapping خودتون اسکریپتای سخت بنویسید 🔥
وبسایت firecrawl.dev اینکار رو با AI براتون انجام میده✅
کافیه چند خط راجب نیازتون بهش توضیح بدید و خودش براتون سایت رو crawl میکنه و براتون خروجیش رو میفرسته
وبسایت firecrawl.dev اینکار رو با AI براتون انجام میده
کافیه چند خط راجب نیازتون بهش توضیح بدید و خودش براتون سایت رو crawl میکنه و براتون خروجیش رو میفرسته
البته که همیشه تو یسری شرایط مجبور میشیم خودمون دست به کد بشیم
#️⃣ #website #AI
🧑💻 @CoolyCode
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Linuxor ?
مک او اس داخل کانتینر داکر؛ با یه دستور یه مک اوس روی هر سیستم عاملی بالا بیارین
github.com/dockur/macos
@Linuxor
github.com/dockur/macos
@Linuxor
Forwarded from Linuxor ?
این ریپو اومده آموزش سطح پیشرفته امنیت به صورت Offensive رو جمع کرده که از بخش های مختلفی تشکیل شده :
OSWE : آزمون وب
OSEP : تست نفوذ پیشرفته
OSED : توسعه اکسپلویت در لینوکس و ویندوز
OSEE : اکسپلویت کرنل ویندوز
github.com/CyberSecurityUP/OSCE3-Complete-Guide
@Linuxor
OSWE : آزمون وب
OSEP : تست نفوذ پیشرفته
OSED : توسعه اکسپلویت در لینوکس و ویندوز
OSEE : اکسپلویت کرنل ویندوز
github.com/CyberSecurityUP/OSCE3-Complete-Guide
@Linuxor
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 شرکت ارتباطات زیرساخت:
ارتباط بین الملل برخی مسیرهای زیرساخت کشور با مشکل مواجه شده و اختلال به صورت سراسری روی بیشتر ISP های کشور اتفاق افتاده است.
#خبر
@TheRaymondDev
ارتباط بین الملل برخی مسیرهای زیرساخت کشور با مشکل مواجه شده و اختلال به صورت سراسری روی بیشتر ISP های کشور اتفاق افتاده است.
#خبر
@TheRaymondDev
Forwarded from PhiloLearn | فیلولرن
اگر شما هم مثل من یک عدد نوبی هستید که همیشه به ویکی نیاز دارید حتی در شرایط قطعی اینترنت بهتون پیشنهاد میکنم که پکیج
اگر دارید به این فکر میکنید چطور ازش استفاده باید بکنید هم من روش پیشنهاد خودم رو میگم.
اگر پایتون روی سیستمتون نصب دارید (که میدونم دارید) دستوری زیر رو بزنید:
چندی پیش فکر کنم سهراب پست کرده بود این رو ولی تو کانالش پیدا نمیکنم پست مربوطه رو
@Philolearn
arch-wiki-docs رو نصب کنید اگر آرچ دارید. البته اگر توزیع دیگه ای دارید هم میتونه براتون مفید باشه.اگر دارید به این فکر میکنید چطور ازش استفاده باید بکنید هم من روش پیشنهاد خودم رو میگم.
اگر پایتون روی سیستمتون نصب دارید (که میدونم دارید) دستوری زیر رو بزنید:
python -m http.server 8000 --directory /usr/share/doc/arch-wiki/html
چندی پیش فکر کنم سهراب پست کرده بود این رو ولی تو کانالش پیدا نمیکنم پست مربوطه رو
@Philolearn
Telegram
محتوای آزاد سهراب
لینک حمایت :)
https://daramet.com/sohrabbehdani
درباره من:
https://sohrabbehdani.ir
محتوای این کانال تحت لایسنس cc-by-sa منتشر میشوند.
https://daramet.com/sohrabbehdani
درباره من:
https://sohrabbehdani.ir
محتوای این کانال تحت لایسنس cc-by-sa منتشر میشوند.
Forwarded from PhiloLearn | فیلولرن
اگر شما هم مثل من یک عدد نوبی هستید که همیشه به ویکی نیاز دارید حتی در شرایط قطعی اینترنت بهتون پیشنهاد میکنم که پکیج
اگر دارید به این فکر میکنید چطور ازش استفاده باید بکنید هم من روش پیشنهاد خودم رو میگم.
اگر پایتون روی سیستمتون نصب دارید (که میدونم دارید) دستوری زیر رو بزنید:
چندی پیش فکر کنم سهراب پست کرده بود این رو ولی تو کانالش پیدا نمیکنم پست مربوطه رو
@Philolearn
arch-wiki-docs رو نصب کنید اگر آرچ دارید. البته اگر توزیع دیگه ای دارید هم میتونه براتون مفید باشه.اگر دارید به این فکر میکنید چطور ازش استفاده باید بکنید هم من روش پیشنهاد خودم رو میگم.
اگر پایتون روی سیستمتون نصب دارید (که میدونم دارید) دستوری زیر رو بزنید:
python -m http.server 8000 --directory /usr/share/doc/arch-wiki/html
چندی پیش فکر کنم سهراب پست کرده بود این رو ولی تو کانالش پیدا نمیکنم پست مربوطه رو
@Philolearn
Forwarded from Gopher Academy
🔵 عنوان مقاله
Cross-Compiling 10,000+ Go CLI Packages Statically
🟢 خلاصه مقاله:
مقاله به بررسی رویکرد جدید و غیرمعمول در ساخت ابزارهای خط فرمان Go به عنوان باینریهای استاتیک با استفاده از زنجیره ابزار Zig میپردازد. این روش با هدف سادهسازی استفاده از این ابزارها برای کاربرانی که زنجیره ابزار Go را نصب نکردهاند، انتخاب شدهاست. استفاده از باینریهای استاتیک باعث حذف نیاز به مدیریت وابستگیها و پیکربندیهای مرتبط با محیط Go میشود، و در نتیجه تجربه کاربری آسانتری را فراهم میآورد. این رویکرد نه تنها روند استقرار نرمافزار را سادهتر میکند بلکه دسترسی گستردهتری به ابزارهای CLI Go را برای تعداد بیشتری از کاربران فراهم میآورد.
🟣لینک مقاله:
https://golangweekly.com/link/171250/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Cross-Compiling 10,000+ Go CLI Packages Statically
🟢 خلاصه مقاله:
مقاله به بررسی رویکرد جدید و غیرمعمول در ساخت ابزارهای خط فرمان Go به عنوان باینریهای استاتیک با استفاده از زنجیره ابزار Zig میپردازد. این روش با هدف سادهسازی استفاده از این ابزارها برای کاربرانی که زنجیره ابزار Go را نصب نکردهاند، انتخاب شدهاست. استفاده از باینریهای استاتیک باعث حذف نیاز به مدیریت وابستگیها و پیکربندیهای مرتبط با محیط Go میشود، و در نتیجه تجربه کاربری آسانتری را فراهم میآورد. این رویکرد نه تنها روند استقرار نرمافزار را سادهتر میکند بلکه دسترسی گستردهتری به ابزارهای CLI Go را برای تعداد بیشتری از کاربران فراهم میآورد.
🟣لینک مقاله:
https://golangweekly.com/link/171250/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Package Forge
Cross-Compiling 10,000+ Go CLI Packages Statically
The Largest Collection of Pre-Compiled Go Static Binaries
Forwarded from Linuxor ?
قطعی شدید مجدد اینترنت در ایران
تأیید شد: دادههای زنده شبکه، اختلال عمدهای را در اتصال اینترنت در ایران نشان میدهد که گزارشهای گسترده کاربران مبنی بر مشکلات مربوط به اینترنت جهانی را تأیید میکند؛ این حادثه تنها چند هفته پس از قطع ارتباطات مخابراتی توسط مقامات در طول جنگ با اسرائیل رخ داده است
@Linuxor
تأیید شد: دادههای زنده شبکه، اختلال عمدهای را در اتصال اینترنت در ایران نشان میدهد که گزارشهای گسترده کاربران مبنی بر مشکلات مربوط به اینترنت جهانی را تأیید میکند؛ این حادثه تنها چند هفته پس از قطع ارتباطات مخابراتی توسط مقامات در طول جنگ با اسرائیل رخ داده است
@Linuxor
Forwarded from AI Labdon
✍️Alireza KiakojouriAlireza Kiakojouri
بنیانگذار تلگرام: ChatGPT فکر نمیکند، فقط حرف میزند!/ پروژهی مخفی برادران دورف چیست؟
پاول دورف به نشریه فرانسوی «لو پوئن» گفت: «مدلهای هوش مصنوعی مثل ChatGPT فکر نمیکنند. فقط مقدار زیادی متن خواندهاند و پاسخی میدهند که به نظر درست میآید. اما واقعاً نمیفهمند و ما انسانها چون زبان پیچیده را نشانه هوش میدانیم، فریب میخوریم. مدلهای زبانی فقط حرف میزنند. اما این به معنای فهمیدن یا فکر کردن نیست.»
پاول میگوید برادرش (نیکلای دورف) اکنون روی ساخت مدلی کار میکند که واقعاً بتواند منطق را درک کند، تصمیم بگیرد و دنیای واقعی را بفهمد. او مدعی است این پروژه چیزی فراتر از مدلهای زبانی فعلی است.
در حالی که غولهایی مانند OpenAI، گوگل، متا و حتی چین و روسیه در حال رقابت برای ساخت نسل بعدی هوش مصنوعی (AGI) هستند، پروژه نیکلای دورف میتواند معادلات را تغییر دهد.
اگر پروژه نیکلای موفق شود، ما شاهد تولد هوش مصنوعیای خواهیم بود که فقط «هوشمندانه صحبت نمیکند»، بلکه واقعاً میفهمد، فکر میکند و تصمیم میگیرد.
بنیانگذار تلگرام: ChatGPT فکر نمیکند، فقط حرف میزند!/ پروژهی مخفی برادران دورف چیست؟
پاول دورف به نشریه فرانسوی «لو پوئن» گفت: «مدلهای هوش مصنوعی مثل ChatGPT فکر نمیکنند. فقط مقدار زیادی متن خواندهاند و پاسخی میدهند که به نظر درست میآید. اما واقعاً نمیفهمند و ما انسانها چون زبان پیچیده را نشانه هوش میدانیم، فریب میخوریم. مدلهای زبانی فقط حرف میزنند. اما این به معنای فهمیدن یا فکر کردن نیست.»
پاول میگوید برادرش (نیکلای دورف) اکنون روی ساخت مدلی کار میکند که واقعاً بتواند منطق را درک کند، تصمیم بگیرد و دنیای واقعی را بفهمد. او مدعی است این پروژه چیزی فراتر از مدلهای زبانی فعلی است.
در حالی که غولهایی مانند OpenAI، گوگل، متا و حتی چین و روسیه در حال رقابت برای ساخت نسل بعدی هوش مصنوعی (AGI) هستند، پروژه نیکلای دورف میتواند معادلات را تغییر دهد.
اگر پروژه نیکلای موفق شود، ما شاهد تولد هوش مصنوعیای خواهیم بود که فقط «هوشمندانه صحبت نمیکند»، بلکه واقعاً میفهمد، فکر میکند و تصمیم میگیرد.
Forwarded from ASafaeirad
GitHub
[templates] A declarative JavaScript templating API · Issue #1069 · WICG/webcomponents
Related to many template, template instantiation, and DOM parts discussions (but especially #777, #682, and #704) I wonder if we should add a JavaScript-based templating API? I think JS-based templ...
Forwarded from Gopher Academy
🔵 عنوان مقاله
Depot Ships Gocache v2 for 4x Faster Go Builds
🟢 خلاصه مقاله:
مقالهی مذکور به بررسی تکنیکهای باندلینگ در محیطهای CI میپردازد که تعداد فراخوانیهای شبکهای را در پروژههای برنامهنویسی با زبان Go از هزاران به صدها مورد کاهش میدهد. این امر منجر به افزایش چشمگیر سرعت و کارایی فرآیندهای ساخت میشود و در نتیجه، زمان لازم برای تکمیل ساختها کاهش مییابد و خطاهای مرتبط با مشکلات شبکه کمتر میشود. این پیشرفت، سرعت و کارایی را در محیطهای توسعهی نرمافزاری که به CI بستگی دارند، بهبود میبخشد.
🟣لینک مقاله:
https://golangweekly.com/link/171251/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Depot Ships Gocache v2 for 4x Faster Go Builds
🟢 خلاصه مقاله:
مقالهی مذکور به بررسی تکنیکهای باندلینگ در محیطهای CI میپردازد که تعداد فراخوانیهای شبکهای را در پروژههای برنامهنویسی با زبان Go از هزاران به صدها مورد کاهش میدهد. این امر منجر به افزایش چشمگیر سرعت و کارایی فرآیندهای ساخت میشود و در نتیجه، زمان لازم برای تکمیل ساختها کاهش مییابد و خطاهای مرتبط با مشکلات شبکه کمتر میشود. این پیشرفت، سرعت و کارایی را در محیطهای توسعهی نرمافزاری که به CI بستگی دارند، بهبود میبخشد.
🟣لینک مقاله:
https://golangweekly.com/link/171251/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Depot
Now available: Gocache v2 for improved Golang build performance
We’re excited to announce Gocache v2, a major step forward in build caching for Go developers. Gocache v2 dramatically reduces build times by efficiently bundling and caching compile and test artifacts, and it’s now available in Depot Cache.
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 توی هر شغلی اگر ۱ درصد ریاضی بلد نباشید, واقعا لنگ می زنید.
نمونه شغل انبارداری یا حسابداری
من خودم ۲۳ روز کارآموز انباردار شرکت تولید لامپ LED بودم اونم چند سال پیش. وقتی جنسی که وارد انبار میشه که باید با دقت شمرده بشه و اینجوری نیست که یک جعبه جنس محتوای آن به خیال راحت بشمارید که بگی ۱۰۰ تا جنس درون جعبه هست در حالی که این جعبه کسی دیگه می شماره که میگه ۹۹ تاست در حالی که خودت ۱۰۰ تا شمردی که اینجاست که یکیش کم داره و عدد قبلی ۱۰۰ وارد سیستم حسابداری شده و کم بودن یکی از آن دچار مشکل محاسباتی آن می شود.
همین کم بودن یکیش می تونه کلی خسارت به شرکت وارد کنه و اینجاست که روی بودجه شرکت و فروش آن ثاتیر می زاره. برای همین باید ریاضیات بلد باشید و چون با اعدادهای بزرگ سروکار دارید.
اصلا ریاضیات دست کم نگیرید.
@TheRaymondDev
نمونه شغل انبارداری یا حسابداری
من خودم ۲۳ روز کارآموز انباردار شرکت تولید لامپ LED بودم اونم چند سال پیش. وقتی جنسی که وارد انبار میشه که باید با دقت شمرده بشه و اینجوری نیست که یک جعبه جنس محتوای آن به خیال راحت بشمارید که بگی ۱۰۰ تا جنس درون جعبه هست در حالی که این جعبه کسی دیگه می شماره که میگه ۹۹ تاست در حالی که خودت ۱۰۰ تا شمردی که اینجاست که یکیش کم داره و عدد قبلی ۱۰۰ وارد سیستم حسابداری شده و کم بودن یکی از آن دچار مشکل محاسباتی آن می شود.
همین کم بودن یکیش می تونه کلی خسارت به شرکت وارد کنه و اینجاست که روی بودجه شرکت و فروش آن ثاتیر می زاره. برای همین باید ریاضیات بلد باشید و چون با اعدادهای بزرگ سروکار دارید.
اصلا ریاضیات دست کم نگیرید.
@TheRaymondDev
Forwarded from Curious Geek ⚡️
👨💻مقدمه ای بر نکسوس ریپازیتوری
توی این ویدیو روی سرور ایران نکسوس نصب میکنیم با npm بهش وصل میشیم. به چالش docker registry در ایران در زمان داخلی شدن اینترنت می پردازیم و براش راهکار پیدا میکنیم.
اگه از این ویدیو خوشت اومد، حتما لایک کن و سابسکرایب یادت نره!
🔗 https://youtu.be/jOzbzyHqQAA
🆔 @Hiradsajde
توی این ویدیو روی سرور ایران نکسوس نصب میکنیم با npm بهش وصل میشیم. به چالش docker registry در ایران در زمان داخلی شدن اینترنت می پردازیم و براش راهکار پیدا میکنیم.
اگه از این ویدیو خوشت اومد، حتما لایک کن و سابسکرایب یادت نره!
🔗 https://youtu.be/jOzbzyHqQAA
🆔 @Hiradsajde
YouTube
Introduction to Nexus Repository
In this video, we'll cover the basics of what Nexus Repository is, why it's used, and how it can help you manage your software components efficiently. Whether you're working with Maven, npm, Docker, or other formats, Nexus is a powerful tool for storing,…
Forwarded from Gopher Academy
✍️Behnam Mohammadzadeh
اگر تو زبان Go عمیق شده باشین و سعی کرده باشین با نحوه عملکرد Scheduler آشنا بشین احتمالا Asynchronous Preemption به گوشتون خورده. تو این پست میخوام توضیح بدم که این اتفاق چطور میافته و نحوه عملکردش به چه شکله.
برای شروع شاید بد نباشه که بدونیم asynchronous preemption برای چی به وجود اومد و اصلا چه مشکلی رو حل میکنه؛ به همین منظور با یه مثال پیش میرم.
زمانی که GC میخواد اجرا بشه نیاز به (STW)Stop the World داره که تو این وضعیت باید همه گوروتین ها تو یه safe point متوقف بشن؛ کال شدن فانکشن یک safe point هست که گوروتین در این نقطه میتونه متوقف بشه تا GC کارش رو بدرستی انجام بده. ولی بعضی از گوروتین ها ممکنه موقع اجرا اصلا فانکشن کال نداشته باشن که به این حالت میگن tight loop.
تو این حالت گوروتین وقتی ۱۰ میلی ثانیه اجرا شد یه ترد به اسم sysmon که همیشه بصورت مستقل اجرا میشه میاد تشخیص میده که فلان گوروتین زیادی داره اجرا میشه و باید متوقف بشه تا نوبت به بقیه هم برسه و برای اینکه اون گوروتین رو متوقف کنه یه سیگنال SIGURG میفرسته.
از اونطرف یه گوروتین به اسم gSignal که هر ترد(M) یکی مخصوص خودش رو داره و میاد این سیگنالها رو دریافت و هندل میکنه .
وقتی gSignal میبینه سیگنال دریافتی از نوع SIGURG هست متوجه میشه که باید preemption اتفاق بیافته و میاد چک میکنه که آیا این اتفاق باید بیافته یا نه؟ (از لینک پایین هم میتونید این فانکشن رو ببینید)
https://lnkd.in/d-cad4-C
بعدش میاد چک کنه ببینه که اگه preempt کنیم مشکلی پیش میاد یا نه؟ پس این فانکشن رو کال میکنه
https://lnkd.in/d5HV8Sh9
دلیلش هم اینه که ممکنه این گوروتین در حال کال کردن بعضی از فانکشن های runtime باشه که نباید وسط اجرای اون فانکشن ها preemption اتفاق بیافته؛ و همچنین چک میکنه ببینه stack فضای کافی داره یا نه(چون مرحله بعد بهش نیاز داره).
حالا که به یه safe point رسیدیم میاد و کار خفن اصلی رو انجام میده.
❓همونطور که قبلا دیدیم tight loop هیچ فانکشن کالی نداره! پس چجوری باید گوروتین رو مجبور به اینکار کرد؟
✅ جواب، پوش کردن یک function call instruction به stack frame و تغییر PC هست!
این فانکشن این کار رو انجام میده:
https://lnkd.in/dcReVmHt
این فانکشن اول میاد برای یک instruction جدید داخل stack frame جا باز میکنه و بعد رجیسترهای RSP و RIP رو دستکاری میکنه تا PC به asyncPreempt تغییر کنه و بعد از اینکه اون اجرا شد کد قبلی بطور نرمال مثل گذشته به کارش ادامه بده.
لینک پست در ویرگول:
https://vrgl.ir/CLOKC
اگر تو زبان Go عمیق شده باشین و سعی کرده باشین با نحوه عملکرد Scheduler آشنا بشین احتمالا Asynchronous Preemption به گوشتون خورده. تو این پست میخوام توضیح بدم که این اتفاق چطور میافته و نحوه عملکردش به چه شکله.
برای شروع شاید بد نباشه که بدونیم asynchronous preemption برای چی به وجود اومد و اصلا چه مشکلی رو حل میکنه؛ به همین منظور با یه مثال پیش میرم.
زمانی که GC میخواد اجرا بشه نیاز به (STW)Stop the World داره که تو این وضعیت باید همه گوروتین ها تو یه safe point متوقف بشن؛ کال شدن فانکشن یک safe point هست که گوروتین در این نقطه میتونه متوقف بشه تا GC کارش رو بدرستی انجام بده. ولی بعضی از گوروتین ها ممکنه موقع اجرا اصلا فانکشن کال نداشته باشن که به این حالت میگن tight loop.
تو این حالت گوروتین وقتی ۱۰ میلی ثانیه اجرا شد یه ترد به اسم sysmon که همیشه بصورت مستقل اجرا میشه میاد تشخیص میده که فلان گوروتین زیادی داره اجرا میشه و باید متوقف بشه تا نوبت به بقیه هم برسه و برای اینکه اون گوروتین رو متوقف کنه یه سیگنال SIGURG میفرسته.
از اونطرف یه گوروتین به اسم gSignal که هر ترد(M) یکی مخصوص خودش رو داره و میاد این سیگنالها رو دریافت و هندل میکنه .
وقتی gSignal میبینه سیگنال دریافتی از نوع SIGURG هست متوجه میشه که باید preemption اتفاق بیافته و میاد چک میکنه که آیا این اتفاق باید بیافته یا نه؟ (از لینک پایین هم میتونید این فانکشن رو ببینید)
https://lnkd.in/d-cad4-C
بعدش میاد چک کنه ببینه که اگه preempt کنیم مشکلی پیش میاد یا نه؟ پس این فانکشن رو کال میکنه
https://lnkd.in/d5HV8Sh9
دلیلش هم اینه که ممکنه این گوروتین در حال کال کردن بعضی از فانکشن های runtime باشه که نباید وسط اجرای اون فانکشن ها preemption اتفاق بیافته؛ و همچنین چک میکنه ببینه stack فضای کافی داره یا نه(چون مرحله بعد بهش نیاز داره).
حالا که به یه safe point رسیدیم میاد و کار خفن اصلی رو انجام میده.
❓همونطور که قبلا دیدیم tight loop هیچ فانکشن کالی نداره! پس چجوری باید گوروتین رو مجبور به اینکار کرد؟
✅ جواب، پوش کردن یک function call instruction به stack frame و تغییر PC هست!
این فانکشن این کار رو انجام میده:
https://lnkd.in/dcReVmHt
این فانکشن اول میاد برای یک instruction جدید داخل stack frame جا باز میکنه و بعد رجیسترهای RSP و RIP رو دستکاری میکنه تا PC به asyncPreempt تغییر کنه و بعد از اینکه اون اجرا شد کد قبلی بطور نرمال مثل گذشته به کارش ادامه بده.
لینک پست در ویرگول:
https://vrgl.ir/CLOKC
lnkd.in
LinkedIn
This link will take you to a page that’s not on LinkedIn
Forwarded from Gopher Academy
اصطلاح STW یا Stop The World یکی از مفاهیم مهم در پیادهسازی Garbage Collector (GC) در زبانهایی مثل Go، Java و… هست. در ادامه با جزییات کامل بهش میپردازیم:
---
✅ تعریف STW (Stop The World)
> به زبان ساده: GC میگه «همه وایسید! من باید حافظه رو مرتب کنم».
---
📦 چرا GC نیاز به STW داره؟
Garbage Collector برای اینکه بتونه حافظهی بدون استفاده رو شناسایی و آزاد کنه، باید بدونه که:
* چه آبجکتهایی در حال حاضر در دسترس هستن (reachable)
* چه آبجکتهایی دیگه استفاده نمیشن (unreachable)
برای اینکه بتونه این بررسی رو دقیق انجام بده، باید:
* بررسی کنه که stack و heap در هر گوروتین در چه حالتی هستن
* مطمئن باشه که گوروتینها در نقطهای امن (safe point) قرار دارن، یعنی وسط نوشتن یا تغییر دادهای نیستن که باعث اشتباه در تحلیل بشه.
---
🧩 Safe Point یعنی چی؟
Safe point به جایی از اجرای کد گفته میشه که:
* وضعیت حافظه کاملاً قابل پیشبینیه
* گوروتین در حال اجرای عملیات بحرانی نیست
* GC میتونه بدون نگرانی از race condition، وضعیت حافظه رو بررسی و اصلاح کنه
مثلاً:
* موقع فراخوانی تابع
* موقع خروج از تابع
* قبل یا بعد از تخصیص حافظه
---
⚙️ فرآیند STW چطوری کار میکنه در Go؟
1. GC تصمیم میگیره که وقت پاکسازی حافظهست.
2. سیگنالی به تمام گوروتینها میده که باید به safe point برن.
3. وقتی همه گوروتینها به safe point رسیدن، برنامه وارد حالت STW میشه:
* هیچ کدی (حتی گوروتینها) اجرا نمیشن
4. GC با خیال راحت تحلیل حافظه (mark and sweep یا mark and compact) انجام میده.
5. بعد از اتمام کار GC، گوروتینها ادامهی اجرای خودشون رو از سر میگیرن.
---
🕐 STW در Go چقدر طول میکشه؟
در نسخههای جدید Go (مثلاً Go 1.18 به بعد):
* STW بسیار کوتاهه (در حد microsecond)
* Go از تکنیکهای پیشرفته مثل concurrent GC استفاده میکنه تا اکثر مراحل GC همزمان با اجرای برنامه انجام بشن
* فقط بخشهایی مثل شروع و پایان GC نیاز به STW دارن
---
🎯 چرا STW ممکنه مشکلساز بشه؟
اگر STW طولانی بشه:
* زمان پاسخدهی (latency) سیستم زیاد میشه
* در اپلیکیشنهای real-time یا interactive مثل گیم یا APIهای حساس، این تاخیر ممکنه قابلتحمل نباشه
* در برنامههای بزرگ با حافظه زیاد، ممکنه pauseها محسوس بشن
---
✅ تعریف STW (Stop The World)
STW به وضعیتی در اجرای برنامه گفته میشه که اجرای تمام گوروتینها (یا تردها) متوقف میشن تا Garbage Collector بتونه کار خودش رو انجام بده.> به زبان ساده: GC میگه «همه وایسید! من باید حافظه رو مرتب کنم».
---
📦 چرا GC نیاز به STW داره؟
Garbage Collector برای اینکه بتونه حافظهی بدون استفاده رو شناسایی و آزاد کنه، باید بدونه که:
* چه آبجکتهایی در حال حاضر در دسترس هستن (reachable)
* چه آبجکتهایی دیگه استفاده نمیشن (unreachable)
برای اینکه بتونه این بررسی رو دقیق انجام بده، باید:
* بررسی کنه که stack و heap در هر گوروتین در چه حالتی هستن
* مطمئن باشه که گوروتینها در نقطهای امن (safe point) قرار دارن، یعنی وسط نوشتن یا تغییر دادهای نیستن که باعث اشتباه در تحلیل بشه.
---
🧩 Safe Point یعنی چی؟
Safe point به جایی از اجرای کد گفته میشه که:
* وضعیت حافظه کاملاً قابل پیشبینیه
* گوروتین در حال اجرای عملیات بحرانی نیست
* GC میتونه بدون نگرانی از race condition، وضعیت حافظه رو بررسی و اصلاح کنه
مثلاً:
* موقع فراخوانی تابع
* موقع خروج از تابع
* قبل یا بعد از تخصیص حافظه
---
⚙️ فرآیند STW چطوری کار میکنه در Go؟
1. GC تصمیم میگیره که وقت پاکسازی حافظهست.
2. سیگنالی به تمام گوروتینها میده که باید به safe point برن.
3. وقتی همه گوروتینها به safe point رسیدن، برنامه وارد حالت STW میشه:
* هیچ کدی (حتی گوروتینها) اجرا نمیشن
4. GC با خیال راحت تحلیل حافظه (mark and sweep یا mark and compact) انجام میده.
5. بعد از اتمام کار GC، گوروتینها ادامهی اجرای خودشون رو از سر میگیرن.
---
🕐 STW در Go چقدر طول میکشه؟
در نسخههای جدید Go (مثلاً Go 1.18 به بعد):
* STW بسیار کوتاهه (در حد microsecond)
* Go از تکنیکهای پیشرفته مثل concurrent GC استفاده میکنه تا اکثر مراحل GC همزمان با اجرای برنامه انجام بشن
* فقط بخشهایی مثل شروع و پایان GC نیاز به STW دارن
---
🎯 چرا STW ممکنه مشکلساز بشه؟
اگر STW طولانی بشه:
* زمان پاسخدهی (latency) سیستم زیاد میشه
* در اپلیکیشنهای real-time یا interactive مثل گیم یا APIهای حساس، این تاخیر ممکنه قابلتحمل نباشه
* در برنامههای بزرگ با حافظه زیاد، ممکنه pauseها محسوس بشن