Forwarded from Anarchonomy
از جمله «خبرهای تلخ ولی قابل انتظار» این بود که شرکت سازنده آلمانی دوربینهای الکسا، که ۸۰ درصد فیلمهایی که از بچگی تا الان دیدید رو با یکی از دوربینهاش فیلمبرداری کردهاند، در آستانه ورشکستگیه و اگه کسی پیدا بشه که بخردشون خوشحال میشن. وقتی دیگه حتی با آیفون هم میشه فیلم سینمایی ساخت، بازار دوربینی که ۵۰ هزار دلار قیمت داره محدود میشه به چندتا استودیو فیلمسازی، که اونها هم هر ده سال یکبار ممکنه خرید جدید انجام بدن. این شرکت بیزینس خودش رو با فروختن به اجارهبدهها تنظیم کرده بود و الان دیگه کسی حاضر نیست این مبالغ سنگین روزانه رو برای اجاره بده وقتی با همون پول میتونه دوربینی بخره که ۹۰ درصد همون کیفیت رو میده (چون مردم متوجه ۱۰ درصد مابقی نمیشن) و دوربین هم مال خودشه. همزمان ارتقاء سریع هوش مصنوعی داره کل موضوع فیلمبرداری رو به حاشیه میبره.
نسل ما نسل خاصی بود که هم نوار نگاتیو رو دید، هم بیمشتری شدن بهترین سنسور دیجیتال رو.
نسل ما نسل خاصی بود که هم نوار نگاتیو رو دید، هم بیمشتری شدن بهترین سنسور دیجیتال رو.
Forwarded from DevTwitter | توییت برنامه نویسی
افزونه Laravel Idea برنامه PHPStorm رایگان شده
برای توسعه راحتتر پیشنهاد میشه نصب کنید
https://blog.jetbrains.com/phpstorm/2025/07/laravel-idea-is-now-free/
@DevTwitter | <Developer One/>
برای توسعه راحتتر پیشنهاد میشه نصب کنید
https://blog.jetbrains.com/phpstorm/2025/07/laravel-idea-is-now-free/
@DevTwitter | <Developer One/>
Forwarded from امین رشیدبیگی | مهندسی نرمافزار
آسیبپذیری IDOR
آسیبپذیری IDOR یا Insecure Direct Object Reference که زیرمجموعهای از آسیبپذیریهای کنترل دسترسیه، زمانی اتفاق میافته که یه API طوری طراحی شده باشه که با استفاده از شناسههای قابل حدس، مثل یوزرنیم یا عددهای افزایشی (مثلاً 123)، امکان دسترسی به اطلاعات رو بده.
یعنی اگر من یوزر 123 هستم و به اطلاعات خودم دسترسی دارم، بتونم با تغییر عدد به 124، اطلاعات یوزر بعدی رو هم ببینم.
حالا تصور کنید این مسئله فقط برای خوندن دادهها نباشه؛ یه متد
با وجود این که خیلیهامون با این مسئله آشناییم، IDOR هنوز هم جزء آسیبپذیریهای خیلی رایج محسوب میشه و توی پروژههای زیادی دیده میشه. [+][+]
راهحل چیه؟
اولین چیزی که به ذهن میرسه استفاده از شناسههای غیرقابل پیشبینیه؛ مثلاً UUID. اینجوری دیگه مهاجم نمیتونه حدس بزنه که یوزر بعدی کیه. اما این راهحل کامل نیست.
درسته که دیگه نمیشه با یه اسکریپت ساده یا تغییر دستی آیدیها به اطلاعات بقیه رسید، ولی اگه مهاجم به یه لیست از UUIDها دسترسی پیدا کنه (مثلاً از طریق ایندکسهای دایرکتوری یا ابزارهایی مثل gau)، همچنان میتونه از API سوءاستفاده کنه. استفادهی صرف از UUID حتی ممکنه توهم امنیت ایجاد کنه و باعث شه مشکل برای مدت طولانی کشف نشه.
راه حل اصولیتر چیه؟
راهحل بهتر، اضافه کردن ولیدیشن و authorization قبل از دسترسی به اطلاعاته. اگه قراره کاربری بتونه به اطلاعاتی دسترسی داشته باشه یا تغییری روش اعمال کنه، باید توی کد بررسی کنیم که آیا کاربر احراز هویتشده مجاز به دسترسی به اون داده هست یا نه.
مثلاً اگه یوزری لاگین کرده و تلاش میکنه اطلاعاتی شخصی رو تغییر بده، مطمئن بشیم که
@aminrbg
آسیبپذیری IDOR یا Insecure Direct Object Reference که زیرمجموعهای از آسیبپذیریهای کنترل دسترسیه، زمانی اتفاق میافته که یه API طوری طراحی شده باشه که با استفاده از شناسههای قابل حدس، مثل یوزرنیم یا عددهای افزایشی (مثلاً 123)، امکان دسترسی به اطلاعات رو بده.
یعنی اگر من یوزر 123 هستم و به اطلاعات خودم دسترسی دارم، بتونم با تغییر عدد به 124، اطلاعات یوزر بعدی رو هم ببینم.
حالا تصور کنید این مسئله فقط برای خوندن دادهها نباشه؛ یه متد
update هم وجود داشته باشه که با گرفتن همون ID اطلاعات رو تغییر بده. اینجوری مهاجم نهتنها میتونه اطلاعات بقیه رو ببینه، بلکه حتی میتونه تغییرشون هم بده.با وجود این که خیلیهامون با این مسئله آشناییم، IDOR هنوز هم جزء آسیبپذیریهای خیلی رایج محسوب میشه و توی پروژههای زیادی دیده میشه. [+][+]
راهحل چیه؟
اولین چیزی که به ذهن میرسه استفاده از شناسههای غیرقابل پیشبینیه؛ مثلاً UUID. اینجوری دیگه مهاجم نمیتونه حدس بزنه که یوزر بعدی کیه. اما این راهحل کامل نیست.
درسته که دیگه نمیشه با یه اسکریپت ساده یا تغییر دستی آیدیها به اطلاعات بقیه رسید، ولی اگه مهاجم به یه لیست از UUIDها دسترسی پیدا کنه (مثلاً از طریق ایندکسهای دایرکتوری یا ابزارهایی مثل gau)، همچنان میتونه از API سوءاستفاده کنه. استفادهی صرف از UUID حتی ممکنه توهم امنیت ایجاد کنه و باعث شه مشکل برای مدت طولانی کشف نشه.
راه حل اصولیتر چیه؟
راهحل بهتر، اضافه کردن ولیدیشن و authorization قبل از دسترسی به اطلاعاته. اگه قراره کاربری بتونه به اطلاعاتی دسترسی داشته باشه یا تغییری روش اعمال کنه، باید توی کد بررسی کنیم که آیا کاربر احراز هویتشده مجاز به دسترسی به اون داده هست یا نه.
مثلاً اگه یوزری لاگین کرده و تلاش میکنه اطلاعاتی شخصی رو تغییر بده، مطمئن بشیم که
user_id اون رکورد مربوط به خودشه.@aminrbg
Forwarded from محتوای آزاد سهراب
توی گروه مشهدلاگ دیشب یک بحثی در این رابطه توی گروه بود، که حالا میخوام یک سری توضیحات بنویسم در موردش.
به صورت پیشفرض، برنامهای که لایسنس نداشته باشه (مخزنی که لایسنس نداشته باشه) به صورت پیشفرض انحصاری تلقی میشه:
توی وبسایت choosealicense که توسط گیتهاب میزبانی میشه، در صفحهای که مربوط به این موضوع هستش یک پاراگراف توضیح نوشته برای کاربر:
که میشه چندتا کار در قبال این موارد انجام داد که عبارتند از:
۱- درخواست از توسعه دهنده برای اضافه کردن لایسنس
۲- نوشتن معادل یا پیدا کردن معادل
۳- دوری کردن از اون سورسکد
در مبنای حقوقی هم، لایسنس نداشتن به این معنی نیست که با اون سورسکد شما هرکاری دوست داشتید بکنید، به صورت پیشفرض قانون کپیرایت شاملش میشه و مالک اون مخزن میتونه از شما شکایت کنه:
https://www.wipo.int/treaties/en/ip/berne/summary_berne.html
درکمال ناباوری توی ایران هم قانون حمایت از حقوق پدیدآورندگان نرمافزارهای رایانهای شامل این موارد میشه.
طبق بند ۹ اون قانون:
شما بدون اجازه مالک اون مخزن امکان استفاده از اون سورس رو ندارید.
@SohrabContents
به صورت پیشفرض، برنامهای که لایسنس نداشته باشه (مخزنی که لایسنس نداشته باشه) به صورت پیشفرض انحصاری تلقی میشه:
توی وبسایت choosealicense که توسط گیتهاب میزبانی میشه، در صفحهای که مربوط به این موضوع هستش یک پاراگراف توضیح نوشته برای کاربر:
If you find software that doesn’t have a license, that generally means you have no permission from the creators of the software to use, modify, or share the software. Although a code host such as GitHub may allow you to view and fork the code, this does not imply that you are permitted to use, modify, or share the software for any purpose.
که میشه چندتا کار در قبال این موارد انجام داد که عبارتند از:
۱- درخواست از توسعه دهنده برای اضافه کردن لایسنس
۲- نوشتن معادل یا پیدا کردن معادل
۳- دوری کردن از اون سورسکد
در مبنای حقوقی هم، لایسنس نداشتن به این معنی نیست که با اون سورسکد شما هرکاری دوست داشتید بکنید، به صورت پیشفرض قانون کپیرایت شاملش میشه و مالک اون مخزن میتونه از شما شکایت کنه:
https://www.wipo.int/treaties/en/ip/berne/summary_berne.html
درکمال ناباوری توی ایران هم قانون حمایت از حقوق پدیدآورندگان نرمافزارهای رایانهای شامل این موارد میشه.
طبق بند ۹ اون قانون:
حقوق مادی و معنوی نرمافزار به پدیدآورنده تعلق دارد. استفاده از تمام یا قسمتی از حقوق مادیموضوع قانون برای مدت ۳۰ سال یا کمتر، با قید شرط یا بدون شرط به اشخاص دیگر قابل نقل و انتقال میباشد.اشخاصی که به ترتیب فوق اجازه نشر یا عرضه یا اجرای نرمافزاری را که دیگری پدیدآورده است به دست آوردهاندمکلفند نام پدیدآورنده را نیز در نسخ عرضه شده ذکر نمایند مگر اینکه با پدیدآورنده به گونهای دیگر توافق شدهباشد.
شما بدون اجازه مالک اون مخزن امکان استفاده از اون سورس رو ندارید.
@SohrabContents
Choose a License
No License
You’re under no obligation to choose a license and it’s your right not to include one with your code or project. But please note that opting out of open source licenses doesn’t mean you’re opting out of copyright law.
Forwarded from Linuxor ?
This media is not supported in your browser
VIEW IN TELEGRAM
یه مدل جدید اومده برای Parse کردن داکیومنت و OCR.حدود 100 زبان از جمله فارسی را هم پشتیبانی میکنه. من برای یه عکس یه مقاله امتحان کردم که نتیجه خیلی عالی بود. مدل با اینکه 1.7B پارامتر داره ولی نتایج خیلی خوبه؛ با اینکه خیلی سبکه ولی نتایج در حد Gemini 2.5 Pro عمل میکنه.
تست :
dotsocr.xiaohongshu.com
سورس کد :
github.com/rednote-hilab/dots.ocr
@Linuxor ~ MehdiAllahyari
تست :
dotsocr.xiaohongshu.com
سورس کد :
github.com/rednote-hilab/dots.ocr
@Linuxor ~ MehdiAllahyari
Forwarded from Go Casts 🚀
اگه طرفدار و کاربر editorهای ترمینالی مثل vim و مشتقاتش هستید پیشنهاد میکنم حتما Helix رو امتحان کنید.
با Rust توسعه داده شده و learning curve خیلی راحت تری داره.
همیشه لیست hotkeyهای مد نظرتون جلوی چشمتونه و لازم نیست همه چیز رو حفظ کنید یا اونقدر تمرین کنید که ملکه ذهنتون بشه.
دو هفته ای میشه که محیط اصلی توسعه خودم هست و بشدت ازش راضیم.
مزیت اصلی ش نسبت به vim همینه که در یه زمان خیلی محدود میتونید روش مسلط بشید و به عنوان محیط اصلی توسعه ازش استفاده کنید.
ترکیب zellij با helix یه محیط خیلی حرفه ای و customize شده توسعه رو میتونه بهتون بده.
اگه تجربه تون با vim شکست خورده مثل من، با helix یه تلاش مجدد کنید شاید این بار موفقیت آمیز باشه...
https://helix-editor.com
@gocasts
با Rust توسعه داده شده و learning curve خیلی راحت تری داره.
همیشه لیست hotkeyهای مد نظرتون جلوی چشمتونه و لازم نیست همه چیز رو حفظ کنید یا اونقدر تمرین کنید که ملکه ذهنتون بشه.
دو هفته ای میشه که محیط اصلی توسعه خودم هست و بشدت ازش راضیم.
مزیت اصلی ش نسبت به vim همینه که در یه زمان خیلی محدود میتونید روش مسلط بشید و به عنوان محیط اصلی توسعه ازش استفاده کنید.
ترکیب zellij با helix یه محیط خیلی حرفه ای و customize شده توسعه رو میتونه بهتون بده.
اگه تجربه تون با vim شکست خورده مثل من، با helix یه تلاش مجدد کنید شاید این بار موفقیت آمیز باشه...
https://helix-editor.com
@gocasts
Forwarded from Morteza Bashsiz مرتضی باشسیز (Morteza Bashsiz)
ویدیو شماره ۱۲ - سرویس dnsdist
توی این ویدیو از سرویس dnsdist استفاده کردم و توضیح دادم که چه قابلیتهایی داره و کجاها میتونیم و باید ازش استفاده کنیم.
https://youtu.be/Vkmep7WNk5M?si=qvm4ZaSMbXmvyk-4
توی این ویدیو از سرویس dnsdist استفاده کردم و توضیح دادم که چه قابلیتهایی داره و کجاها میتونیم و باید ازش استفاده کنیم.
https://youtu.be/Vkmep7WNk5M?si=qvm4ZaSMbXmvyk-4
Forwarded from DevTwitter | توییت برنامه نویسی
یه cli ساختم برای ساخت پروژه های جاوااسکریپت
پروژه ها میتونن فول استک یا به صورت تکی بکند یا فرانت باشن
هر بار میخواستم یه پروژه ری اکت + vite بسازم میخواست یه command طولانی رو حفظ کنم برا همین اینو ساختم امیدوارم شما هم خوشتون بیاد و خوشحال میشم مشکلاتش رو توی issues گیتهاب بزارید
https://www.npmjs.com/package/booz-stack
@DevTwitter | <../>
پروژه ها میتونن فول استک یا به صورت تکی بکند یا فرانت باشن
هر بار میخواستم یه پروژه ری اکت + vite بسازم میخواست یه command طولانی رو حفظ کنم برا همین اینو ساختم امیدوارم شما هم خوشتون بیاد و خوشحال میشم مشکلاتش رو توی issues گیتهاب بزارید
https://www.npmjs.com/package/booz-stack
@DevTwitter | <../>
Forwarded from Linuxor ?
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
در راستای تاثیر ai روی افرادی که تازه شروع کردن
یکی اونایی که میبینن ai هست و موقعیت رو برای خودشون برای یادگیری غیر ممکن و بدون آینده میبینن برام خنده داره
یکی هم خنده دار تر، اونایی که میبینن ai هست خودشونو همه کاره جا میزنن:))
طرفو باهاش حرف میزنی هیچی حالیش نیست ولی همه جور پروژه ای میزنه. نمیدونم بک اند بدی میزنه فرانت بدی میزنه دواپس بدی کار میکنه دیزاین هرچیییی.
بعد وقتی داری باهاش صحبت میکنی یه کلمه در میون اینارو میشنوی:
ai
LLM
grok
gpt
4o
Gemeni
...
نه که استفاده کردن از اینا بد باشه ها...
بحث اینه که این افراد دیگه یباره بالا خونه رو دادن اجاره و اوج زحمتی که میکشن تمدید اکانت cursor یا نمیدونم copilot های مختلفه
یکی اونایی که میبینن ai هست و موقعیت رو برای خودشون برای یادگیری غیر ممکن و بدون آینده میبینن برام خنده داره
یکی هم خنده دار تر، اونایی که میبینن ai هست خودشونو همه کاره جا میزنن:))
طرفو باهاش حرف میزنی هیچی حالیش نیست ولی همه جور پروژه ای میزنه. نمیدونم بک اند بدی میزنه فرانت بدی میزنه دواپس بدی کار میکنه دیزاین هرچیییی.
بعد وقتی داری باهاش صحبت میکنی یه کلمه در میون اینارو میشنوی:
ai
LLM
grok
gpt
4o
Gemeni
...
نه که استفاده کردن از اینا بد باشه ها...
بحث اینه که این افراد دیگه یباره بالا خونه رو دادن اجاره و اوج زحمتی که میکشن تمدید اکانت cursor یا نمیدونم copilot های مختلفه
Forwarded from محتوای آزاد سهراب
Forwarded from Curious Geek ⚡️
سلام به همگی ❤️🌱
امشب هم مثل هر هفته ویس کالمون با قدرت پابرجاست.
پوزش میخوام بابت این که دیر داریم اطلاع میدیم.🥲
تو ذهنتون باشه هر هفته این برنامه رو داریم مگر قبلش اعلام کنیم که نیست.
ساعت ۹:۳۰ امشب تا ۱۲ یا حتی بیشتر(ببینیم چی میشه 😅) هیچ مشکلی هم نداره وسطش بیاید!!! هر ساعتی تونستید بیاید
موضوعات امشب خیلیی جذابن امیدوارم از دستش ندید!
🕺 "اگه بخوای یه مهارت غیرفنی یاد بگیری، چی انتخاب میکنی؟"
🎭 "نقشی که دوست داشتی توی یه فیلم بازی کنی چی بود؟"
🎮 "بازی دوران کودکی که هنوزم دلت براش تنگ میشه"
🌚 "اگه میتونستی یک روز با کسی عوض بشی، کی رو انتخاب میکردی و چرا؟"
🏝️ "اگه هیچ محدودیتی نداشتی، الان کجای دنیا بودی و چیکار میکردی؟"
🎭 "یه چیزی که از بیرون خفن به نظر میاد ولی وقتی تجربهش کردی گفتی: فقط همین بود؟!"
ویس کال در گروه The Geeks برگزار میشه، کافیه از این لینک درخواست بدید تا وال ای برای یک مصاحبه دو دقیقه ای بهتون پیام بده
🔗 t.iss.one/+FYq2IWScw69hMDA8
قانون اصلی: حرف فنی در گروه ممنوع.
🍃🙂
🆔 t.iss.one/TheGeeksCommunity
امشب هم مثل هر هفته ویس کالمون با قدرت پابرجاست.
پوزش میخوام بابت این که دیر داریم اطلاع میدیم.🥲
تو ذهنتون باشه هر هفته این برنامه رو داریم مگر قبلش اعلام کنیم که نیست.
ساعت ۹:۳۰ امشب تا ۱۲ یا حتی بیشتر(ببینیم چی میشه 😅) هیچ مشکلی هم نداره وسطش بیاید!!! هر ساعتی تونستید بیاید
موضوعات امشب خیلیی جذابن امیدوارم از دستش ندید!
🕺 "اگه بخوای یه مهارت غیرفنی یاد بگیری، چی انتخاب میکنی؟"
🎭 "نقشی که دوست داشتی توی یه فیلم بازی کنی چی بود؟"
🎮 "بازی دوران کودکی که هنوزم دلت براش تنگ میشه"
🌚 "اگه میتونستی یک روز با کسی عوض بشی، کی رو انتخاب میکردی و چرا؟"
🏝️ "اگه هیچ محدودیتی نداشتی، الان کجای دنیا بودی و چیکار میکردی؟"
🎭 "یه چیزی که از بیرون خفن به نظر میاد ولی وقتی تجربهش کردی گفتی: فقط همین بود؟!"
ویس کال در گروه The Geeks برگزار میشه، کافیه از این لینک درخواست بدید تا وال ای برای یک مصاحبه دو دقیقه ای بهتون پیام بده
🔗 t.iss.one/+FYq2IWScw69hMDA8
قانون اصلی: حرف فنی در گروه ممنوع.
🍃🙂
🆔 t.iss.one/TheGeeksCommunity
Telegram
The Geeks Family
Hirad invites you to join this group on Telegram.
Forwarded from Codino School (ایمان غفوری)
This media is not supported in your browser
VIEW IN TELEGRAM
بالاخره بعد از ۵ سال... میکروسکوپ رسید به اون حالتی که من همیشه آرزوش رو داشتم.
در نسخه جدید به محض اتمام پردازش برای یک پوشه خاص گزارش در کنسول چاپ میشه و بعد اسکن برای پوشه ی بعدی آغاز خواهد شد.
این کار در پشت صحنه با استفاده از Generator ها و کیورد yield انجام شده.
@codino
در نسخه جدید به محض اتمام پردازش برای یک پوشه خاص گزارش در کنسول چاپ میشه و بعد اسکن برای پوشه ی بعدی آغاز خواهد شد.
این کار در پشت صحنه با استفاده از Generator ها و کیورد yield انجام شده.
@codino
Forwarded from NimaCodez | خفنیجات با نیما
اگر قصدتون انتخاب کردن رشتهی کامپیوتر باشه، دوتا انتخاب دارید:
🔄 سیکل دنیای کامپیوتر به این شکله:
بررسی این رشته برای آینده:
تو خارج از ایران ما Computer Science داریم و چیزی تحت عنوان Comuter Engineering اصلا شناخته شده نیست. موقعیت علوم کامپیوتر بهتره.
مهندسی کامپیوتر فراخوان های استخدامی بیشتری رو به خودش اختصاص داده ولی جدیدا علوم کامپیوتر هم تک و توک درخواست میکنن.
حقیقتا فرقی نداره؛ اینجا بیشتر مهارتتون رو میسنجن، ولی من اگر بخوام کسی رو که میخواد رو نرمافزارم کار کنه رو استخدام کنم نه سختافزار، ترجیحم اینه کسی که علوم کامپیوتر رو «درست» خونده باشه روش کار کنه.
امسال رو خبر ندارم.
موفق باشید.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Gopher Academy
🔐 مفهوم Mutex در Go
ا
---
🧠 وضعیتهای مختلف Mutex
میتوان عملکرد آن را با وضعیتهای زیر توضیح داد:
ا
ا* Unlocked (حالت اولیه): Mutex آزاد است و هر goroutine میتواند با فراخوانی
ا* Locked: وقتی یک goroutine
ا* Waiting: در صورت تلاش همزمان چند goroutine برای گرفتن قفل، بقیه به صف انتظار اضافه میشوند.
ا* Starvation Mode: اگر یک goroutine بیش از \~۱ms نتواند قفل را بگیرد، سیستم وارد حالت گرسنگی (fair mode) شده و به ترتیب به goroutineهای قدیمیتر اجازه دسترسی میدهد ([CSDN Blog][3], [Zhihu Zhiwan][4]).
---
⚙️ عملکرد درونی Mutex
* از عملیات غیرقابل قطع (CAS) برای کنترل فیلد
* در شرایط کمرقابت ابتدا بهصورت spinning تلاش میکند تا حد ممکن بدون خوابیدن lock را بگیرد.
* در سطوح بالای رقابت، goroutineها به صف انتظار اضافه میشوند و بیدار میشوند وقتی قفل آزاد شد.
* حالت starvation زمانی فعال میشود که یک goroutine مدت طولانی در انتظار است تا از حالت FIFO استفاده شود
---
✅ نکات کاربردی و بهترین شیوهها
1. هیچ گاه Mutex را کپی نکنید؛ حتی تصادفاً**—مستقیماً باید از pointers استفاده شود
2. هیچگاه موضعی در struct آن را جاسازی (embed) نکنید، چون باعث در دسترسپذیری ناخواسته متدهای Lock/Unlock میشود
3. از
4. بخش قفلشده باید حداقل زمان ممکن طول بکشد؛ انجام عملیات بلندمدت در آن ممکن است باعث کاهش concurrency و تأخیر جدی شود.
---
⚠️ مشکلات رایج و اشتباهات متداول
* **کپی ناخواسته Mutex: حذف ایمنی synchronization و موجب رفتار نامشخص.
ا* embedding Mutex: باعث انتشار متدهای داخلی قفل به بیرون struct میشود — روش اشتباهی است
ا* Double Unlock یا Unlock بدون Lock قبلی → panic.
* عدم رعایت defer → ممکن است در صورت خطا یا exit، قفل آزاد نشود و deadlock رخ دهد.
ا* Deadlock ناشی از تداخل دو یا چند goroutine با mutexهای متفاوت و انتظار متقابل بر مبنای نظم اشتباهی بین
ا
sync.Mutex یک اصل اساسی برای کنترل دسترسی امن به منابع مشترک بین goroutineها است. این نوع قفل تضمین میکند که در هر لحظه تنها یک goroutine به بخش حیاتی از کد (critical section) دسترسی دارد ---
🧠 وضعیتهای مختلف Mutex
میتوان عملکرد آن را با وضعیتهای زیر توضیح داد:
ا
ا* Unlocked (حالت اولیه): Mutex آزاد است و هر goroutine میتواند با فراخوانی
Lock() آن را بگیرد.ا* Locked: وقتی یک goroutine
Lock() میزند، دیگران باید منتظر بمانند.ا* Waiting: در صورت تلاش همزمان چند goroutine برای گرفتن قفل، بقیه به صف انتظار اضافه میشوند.
ا* Starvation Mode: اگر یک goroutine بیش از \~۱ms نتواند قفل را بگیرد، سیستم وارد حالت گرسنگی (fair mode) شده و به ترتیب به goroutineهای قدیمیتر اجازه دسترسی میدهد ([CSDN Blog][3], [Zhihu Zhiwan][4]).
---
⚙️ عملکرد درونی Mutex
* از عملیات غیرقابل قطع (CAS) برای کنترل فیلد
state استفاده میشود.* در شرایط کمرقابت ابتدا بهصورت spinning تلاش میکند تا حد ممکن بدون خوابیدن lock را بگیرد.
* در سطوح بالای رقابت، goroutineها به صف انتظار اضافه میشوند و بیدار میشوند وقتی قفل آزاد شد.
* حالت starvation زمانی فعال میشود که یک goroutine مدت طولانی در انتظار است تا از حالت FIFO استفاده شود
---
✅ نکات کاربردی و بهترین شیوهها
1. هیچ گاه Mutex را کپی نکنید؛ حتی تصادفاً**—مستقیماً باید از pointers استفاده شود
2. هیچگاه موضعی در struct آن را جاسازی (embed) نکنید، چون باعث در دسترسپذیری ناخواسته متدهای Lock/Unlock میشود
3. از
defer m.Unlock() برای اطمینان از آزادسازی قفل حتی در صورت panic یا return زودهنگام استفاده کنید 4. بخش قفلشده باید حداقل زمان ممکن طول بکشد؛ انجام عملیات بلندمدت در آن ممکن است باعث کاهش concurrency و تأخیر جدی شود.
---
⚠️ مشکلات رایج و اشتباهات متداول
* **کپی ناخواسته Mutex: حذف ایمنی synchronization و موجب رفتار نامشخص.
ا* embedding Mutex: باعث انتشار متدهای داخلی قفل به بیرون struct میشود — روش اشتباهی است
ا* Double Unlock یا Unlock بدون Lock قبلی → panic.
* عدم رعایت defer → ممکن است در صورت خطا یا exit، قفل آزاد نشود و deadlock رخ دهد.
ا* Deadlock ناشی از تداخل دو یا چند goroutine با mutexهای متفاوت و انتظار متقابل بر مبنای نظم اشتباهی بین
Lock()ها.Forwarded from Untibody
یه گاوی از مجلس میگه «باید به مردم آموزشهایی داد که نمونه آن استفاده از آب خاکستری یا تصفیه مجدد آب مصرفی است که از سالها پیش در برخی کشورها رایج بوده است»
کم کم باید آموزش ببینیم چطوری با سر مورچه وحشی بخیه بزنیم
با جویدن و قراردادن گزنه رودخانه روی زخمهایمان از خونریزی و عفونت جلوگریری کنیم
کم کم باید آموزش ببینیم چطوری با سر مورچه وحشی بخیه بزنیم
با جویدن و قراردادن گزنه رودخانه روی زخمهایمان از خونریزی و عفونت جلوگریری کنیم
Forwarded from Linuxor ?