💥 درباره 3 تا از پراستفاده ترین دیتابیس ها به صورت خلاصه بدونیم:
▎MySQL
ایدهآل برای برنامههایی که به پرسوجوهای پیچیده، تراکنشها و یکپارچگی داده نیاز دارند. معمولاً در برنامههای وب، پلتفرمهای تجارت الکترونیک و سیستمهای مدیریت محتوا استفاده میشود.
به طور کلی برای عملیات خواندن سنگین خوب است. برای تراکنشها و پیوندها بهینهسازی شده است.
مقیاسپذیری عمودی رایج است (اضافه کردن منابع بیشتر به یک سرور واحد)، اما مقیاسپذیری افقی (شاردینگ) با برخی پیچیدگیها ممکن است.
دیتابیس MySQL معمولاً از حافظه برای کش کردن، بافر کردن و مدیریت اتصالات استفاده میکند. موتور ذخیرهسازی InnoDB (پیشفرض) از یک استخر بافر برای کش کردن دادهها و ایندکسها استفاده میکند که میتوان آن را بر اساس حافظه موجود سیستم پیکربندی کرد. MySQL به طور کلی در استفاده از حافظه کارآمد است، اما پیکربندی نادرست (مانند تعداد زیاد اتصالات یا اندازههای بافر ناکافی) میتواند منجر به مصرف بیش از حد حافظه شود.
▎MongoDB
بهترین گزینه برای برنامههایی با ساختارهای داده متغیر، تجزیه و تحلیل در زمان واقعی و دادههای کلان. معمولاً در مدیریت محتوا، برنامههای IoT و برنامههای موبایل کاربرد دارد.
عالی برای عملیات خواندن/نوشتن با حجم بالا و میتواند مجموعههای داده بزرگ را به طور مؤثر مدیریت کند. عملکرد ممکن است بر اساس استراتژیهای ایندکسگذاری متفاوت باشد.
از ابتدا برای مقیاسپذیری افقی (شاردینگ) طراحی شده است که توزیع دادهها در چندین سرور را آسانتر میکند.
دیتابیس MongoDB از حافظه برای کش کردن دادهها و ایندکسها در RAM استفاده میکند. این سیستم از رویکرد فایل نقشهبرداری شده در حافظه استفاده میکند، به این معنی که از ویژگیهای حافظه مجازی سیستم عامل برای مدیریت دادهها بهره میبرد.
موتور ذخیرهسازی WiredTiger (پیشفرض) از یک کش داخلی استفاده میکند که میتواند با پارامتر storage.wiredTiger.engineConfig.cacheSizeGB پیکربندی شود.
مصرف حافظه MongoDB ممکن است به دلیل ساختار مستند محور و نیاز به بارگذاری کل مستندات در حافظه برای عملیات بالاتر باشد. با این حال، این سیستم به طور مؤثر حافظه را برای برنامههای با توان خروجی بالا مدیریت میکند.
▎PostgreSQL
مناسب برای برنامههایی که به پرسوجوهای پیچیده و یکپارچگی داده نیاز دارند. معمولاً در سیستمهای مالی، برنامههای جغرافیایی و هر سناریویی که به روابط پیچیده داده نیاز دارد، استفاده میشود.
عملکرد عالی برای هر دو عملیات خواندن و نوشتن. از تکنیکهای پیشرفته ایندکسگذاری و بهینهسازی پرسوجو پشتیبانی میکند.
از هر دو مقیاسپذیری عمودی و افقی پشتیبانی میکند (با ابزارهایی مانند Citus برای شاردینگ).
دیتابیس PostgreSQL از چندین ناحیه حافظه استفاده میکند، از جمله بافرهای مشترک (برای کش کردن دادهها)، work_mem (برای مرتبسازی و جدولهای هش) و maintenance_work_mem (برای عملیات نگهداری مانند پاکسازی). PostgreSQL به خاطر استفاده کارآمد از حافظه شناخته شده است، به ویژه در پردازش پرسوجوهای پیچیده. با این حال، مانند MySQL، پیکربندی نادرست میتواند منجر به مصرف بیش از حد حافظه شود.
❓ شما کدوم دیتابیس رو توی پروژه هاتون انتخاب میکنید ( غیر از Sqlite ) ؟
پ.ن: از chatgpt پرسیدم، گفتم با شماهم به اشتراک بزارم.
▎MySQL
ایدهآل برای برنامههایی که به پرسوجوهای پیچیده، تراکنشها و یکپارچگی داده نیاز دارند. معمولاً در برنامههای وب، پلتفرمهای تجارت الکترونیک و سیستمهای مدیریت محتوا استفاده میشود.
به طور کلی برای عملیات خواندن سنگین خوب است. برای تراکنشها و پیوندها بهینهسازی شده است.
مقیاسپذیری عمودی رایج است (اضافه کردن منابع بیشتر به یک سرور واحد)، اما مقیاسپذیری افقی (شاردینگ) با برخی پیچیدگیها ممکن است.
دیتابیس MySQL معمولاً از حافظه برای کش کردن، بافر کردن و مدیریت اتصالات استفاده میکند. موتور ذخیرهسازی InnoDB (پیشفرض) از یک استخر بافر برای کش کردن دادهها و ایندکسها استفاده میکند که میتوان آن را بر اساس حافظه موجود سیستم پیکربندی کرد. MySQL به طور کلی در استفاده از حافظه کارآمد است، اما پیکربندی نادرست (مانند تعداد زیاد اتصالات یا اندازههای بافر ناکافی) میتواند منجر به مصرف بیش از حد حافظه شود.
▎MongoDB
بهترین گزینه برای برنامههایی با ساختارهای داده متغیر، تجزیه و تحلیل در زمان واقعی و دادههای کلان. معمولاً در مدیریت محتوا، برنامههای IoT و برنامههای موبایل کاربرد دارد.
عالی برای عملیات خواندن/نوشتن با حجم بالا و میتواند مجموعههای داده بزرگ را به طور مؤثر مدیریت کند. عملکرد ممکن است بر اساس استراتژیهای ایندکسگذاری متفاوت باشد.
از ابتدا برای مقیاسپذیری افقی (شاردینگ) طراحی شده است که توزیع دادهها در چندین سرور را آسانتر میکند.
دیتابیس MongoDB از حافظه برای کش کردن دادهها و ایندکسها در RAM استفاده میکند. این سیستم از رویکرد فایل نقشهبرداری شده در حافظه استفاده میکند، به این معنی که از ویژگیهای حافظه مجازی سیستم عامل برای مدیریت دادهها بهره میبرد.
موتور ذخیرهسازی WiredTiger (پیشفرض) از یک کش داخلی استفاده میکند که میتواند با پارامتر storage.wiredTiger.engineConfig.cacheSizeGB پیکربندی شود.
مصرف حافظه MongoDB ممکن است به دلیل ساختار مستند محور و نیاز به بارگذاری کل مستندات در حافظه برای عملیات بالاتر باشد. با این حال، این سیستم به طور مؤثر حافظه را برای برنامههای با توان خروجی بالا مدیریت میکند.
▎PostgreSQL
مناسب برای برنامههایی که به پرسوجوهای پیچیده و یکپارچگی داده نیاز دارند. معمولاً در سیستمهای مالی، برنامههای جغرافیایی و هر سناریویی که به روابط پیچیده داده نیاز دارد، استفاده میشود.
عملکرد عالی برای هر دو عملیات خواندن و نوشتن. از تکنیکهای پیشرفته ایندکسگذاری و بهینهسازی پرسوجو پشتیبانی میکند.
از هر دو مقیاسپذیری عمودی و افقی پشتیبانی میکند (با ابزارهایی مانند Citus برای شاردینگ).
دیتابیس PostgreSQL از چندین ناحیه حافظه استفاده میکند، از جمله بافرهای مشترک (برای کش کردن دادهها)، work_mem (برای مرتبسازی و جدولهای هش) و maintenance_work_mem (برای عملیات نگهداری مانند پاکسازی). PostgreSQL به خاطر استفاده کارآمد از حافظه شناخته شده است، به ویژه در پردازش پرسوجوهای پیچیده. با این حال، مانند MySQL، پیکربندی نادرست میتواند منجر به مصرف بیش از حد حافظه شود.
❓ شما کدوم دیتابیس رو توی پروژه هاتون انتخاب میکنید ( غیر از Sqlite ) ؟
پ.ن: از chatgpt پرسیدم، گفتم با شماهم به اشتراک بزارم.
❤8🔥2
دوستان این چند وقت که کم پیدام منو عفو کنین، درگیر دانشگاهم، اوکی بشه پرقدرت میام
👍9❤4🔥4
مصرف مموری MySQL رو کاهش بده
امروز یچیزی کشف کردم.
مای اسکوال یه بخشی داره به اسم performance schema، که حالت دیفالت فعاله.
از این بخش برای ثبت و مانیتورینگ اطلاعات و پرفورمنس دیتابیس استفاده میکنه، تا شما بتونین با استفاده از این اطلاعات، دیتابیستون رو سرعت ببخشین.
شما میتونین این بخش رو غیر فعال کنین؛ خب چرا؟ وقتی ازش استفاده نمیکنین، بهتره غیرفعالش کنین، چون نزدیک ۱۶۰ مگابایت مصرف مموری داره و باعث کاهش سرعت ( به چشم نمیاد ) میشه...
حالا چجوری؟
داخل فایل کانفینگ مای اسکوال
معمولا با ادرس:
/etc/mysql/my.cnf
این خط رو اضافه کنین:
و یه بار خاموش روشنش کنین:
و لذت ببرید ...
امروز یچیزی کشف کردم.
مای اسکوال یه بخشی داره به اسم performance schema، که حالت دیفالت فعاله.
از این بخش برای ثبت و مانیتورینگ اطلاعات و پرفورمنس دیتابیس استفاده میکنه، تا شما بتونین با استفاده از این اطلاعات، دیتابیستون رو سرعت ببخشین.
شما میتونین این بخش رو غیر فعال کنین؛ خب چرا؟ وقتی ازش استفاده نمیکنین، بهتره غیرفعالش کنین، چون نزدیک ۱۶۰ مگابایت مصرف مموری داره و باعث کاهش سرعت ( به چشم نمیاد ) میشه...
حالا چجوری؟
داخل فایل کانفینگ مای اسکوال
معمولا با ادرس:
/etc/mysql/my.cnf
این خط رو اضافه کنین:
performance_schema = OFF
و یه بار خاموش روشنش کنین:
systemctl restart mysql
و لذت ببرید ...
👍15❤2
قیمت گذاری در مارکتینگ یا Pricing models
این پست مربوط به قیمت گذاری پروژه هاتون نیست.
همونطور که میدونید ( یا خواهید فهمید ) برنامه نویسی، فقط به خود برنامه نویسی ختم نمیشه؛ چون رسما نمیشه از برنامه نویسی درآمد خوبی داشت، بلکه از محصول برنامه نویسی هستش که درآمد بدست میاد ( برای درک بهتر، بخوانید ).
💥 پس بحث مارکتینگ میاد وسط برای ارائه محصولات و درآمد بیشتر؛
❔ خب حالا تاحالا فکر کردید هزینه های داخل محصولات خودمون ( همون «خرید درون-برنامهای» ) رو چجوری قیمت گذاری یا طراحی کنیم که مارکتینگ بهتری داشته باشیم؟
▎Cost-plus pricing
این همون روش معمولی هستش که مغازه دارا استفاده میکنن. اگه برای ارائه چیزی 20 دلار هزینه کردید، 25 دلار بفروشید تا 5 دلار سود کنید.
▎Penetration pricing
این روش وقتی هستش که شما کمترین قیمت ممکن رو ارائه میدید، حتی وقتی به ضرر کسب و کارتون باشه.
این روش وقتی استفاده میشه که میخواین بازار رو مختل کنید و جذب مشتری داشته باشید؛ البته این روش پایدار نیست و وقتی به هدفتون رسیدید باید تغییرش بدید؛ این روش برای استارتآپ ها پیشنهاد میشه
▎Premium pricing
گاهی وقت ها بازار هدف، قیمت براشون مهم نیست و کسایی هستن که برای کیفیت بالا، بهای زیادی میدن. این روش با تکیه بر این قانون که «بهترین کیفیت، ارزون نیست» بوجود اومده. دقیقا روشی هستش که تلگرام استفاده میکنه برای پرمیوم. امکاناتی خاص برای کسایی که پول پرمیوم میدن.
▎Freemium pricing
دیدین بعضی جاها Free trial میدن؟ دقیقا همون روشه. بزارین کاربر ها قابلیت هارو ازمایش کنن، تا جذب قابلیت ها بشن.
از این روش توی این شرایط استفاده میشه:
- وقتی شما داخل کسب و کاری هستید و رقبا مشتری هاتون رو میدزدن، وقتشه بزارین قابلیت های ویژه ای رو امتحان کنن
- کسب و کاری رو آغاز میکنین که نیاز به جذب مشتری داره و از کیفیت خودتون مطمئنید؛ پس بزارید امتحان کنن تا جذب بشن.
▎Tiered pricing
این همون فروش اشتراکیه؛ روشی که VPN فروشا استفاده میکنن پس نیاز به توضیح نیست.
▎Per-user pricing
قیمت گذاری بر اساس تعداد یوزر؛ هرچی تعداد یوزر هاتون بیشتر میشن، قیمت رو بیشتر کاهش بدید تا همیشه حداکثر جذب مشتری رو داشته باشید.
▎Usage-based pricing
هممون عاشق اینیم. دقیقا این جملست: «هرکی بیشتر پول بده بیشتر آش میخوره»
یوزر هرچی مصرف بیشتر کنه، پول بیشتری میپردازه.
💥 روش ها فقط همینا نیستن، بیشتر میخواین یاد بگیرین سرچ کنین
Pricing models in marketing
این پست مربوط به قیمت گذاری پروژه هاتون نیست.
همونطور که میدونید ( یا خواهید فهمید ) برنامه نویسی، فقط به خود برنامه نویسی ختم نمیشه؛ چون رسما نمیشه از برنامه نویسی درآمد خوبی داشت، بلکه از محصول برنامه نویسی هستش که درآمد بدست میاد ( برای درک بهتر، بخوانید ).
💥 پس بحث مارکتینگ میاد وسط برای ارائه محصولات و درآمد بیشتر؛
❔ خب حالا تاحالا فکر کردید هزینه های داخل محصولات خودمون ( همون «خرید درون-برنامهای» ) رو چجوری قیمت گذاری یا طراحی کنیم که مارکتینگ بهتری داشته باشیم؟
▎Cost-plus pricing
این همون روش معمولی هستش که مغازه دارا استفاده میکنن. اگه برای ارائه چیزی 20 دلار هزینه کردید، 25 دلار بفروشید تا 5 دلار سود کنید.
▎Penetration pricing
این روش وقتی هستش که شما کمترین قیمت ممکن رو ارائه میدید، حتی وقتی به ضرر کسب و کارتون باشه.
این روش وقتی استفاده میشه که میخواین بازار رو مختل کنید و جذب مشتری داشته باشید؛ البته این روش پایدار نیست و وقتی به هدفتون رسیدید باید تغییرش بدید؛ این روش برای استارتآپ ها پیشنهاد میشه
▎Premium pricing
گاهی وقت ها بازار هدف، قیمت براشون مهم نیست و کسایی هستن که برای کیفیت بالا، بهای زیادی میدن. این روش با تکیه بر این قانون که «بهترین کیفیت، ارزون نیست» بوجود اومده. دقیقا روشی هستش که تلگرام استفاده میکنه برای پرمیوم. امکاناتی خاص برای کسایی که پول پرمیوم میدن.
▎Freemium pricing
دیدین بعضی جاها Free trial میدن؟ دقیقا همون روشه. بزارین کاربر ها قابلیت هارو ازمایش کنن، تا جذب قابلیت ها بشن.
از این روش توی این شرایط استفاده میشه:
- وقتی شما داخل کسب و کاری هستید و رقبا مشتری هاتون رو میدزدن، وقتشه بزارین قابلیت های ویژه ای رو امتحان کنن
- کسب و کاری رو آغاز میکنین که نیاز به جذب مشتری داره و از کیفیت خودتون مطمئنید؛ پس بزارید امتحان کنن تا جذب بشن.
▎Tiered pricing
این همون فروش اشتراکیه؛ روشی که VPN فروشا استفاده میکنن پس نیاز به توضیح نیست.
▎Per-user pricing
قیمت گذاری بر اساس تعداد یوزر؛ هرچی تعداد یوزر هاتون بیشتر میشن، قیمت رو بیشتر کاهش بدید تا همیشه حداکثر جذب مشتری رو داشته باشید.
▎Usage-based pricing
هممون عاشق اینیم. دقیقا این جملست: «هرکی بیشتر پول بده بیشتر آش میخوره»
یوزر هرچی مصرف بیشتر کنه، پول بیشتری میپردازه.
💥 روش ها فقط همینا نیستن، بیشتر میخواین یاد بگیرین سرچ کنین
Pricing models in marketing
👍10❤6🔥3
کدوم سریع تره بنظرتون؟؟؟
کدوم روش format استرینگ در پایتون سریع تره؟
کدوم روش format استرینگ در پایتون سریع تره؟
args = {"x": 5}
# %
"%(x)d" % args
# format
"{x}".format(**args)
# format_map
"{x}".format_map(args)
# f-string
f"{args['x']}"
Coding Lovers
کدوم سریع تره بنظرتون؟؟؟ کدوم روش format استرینگ در پایتون سریع تره؟ args = {"x": 5} # % "%(x)d" % args # format "{x}".format(**args) # format_map "{x}".format_map(args) # f-string f"{args['x']}"
تو تستی که خودم انجام دادم
روش % از format_map سریع تره
روش format_map از format سریع تره
اف استرینگ رو نمیدونستم چجوری تست بگیرم، بیخیالش شدم
روش % از format_map سریع تره
روش format_map از format سریع تره
اف استرینگ رو نمیدونستم چجوری تست بگیرم، بیخیالش شدم
❤6
Coding Lovers
این روش رو کانال PyrogramFA به عنوان جلوگیری از اسپم گذاشته بود مخصوص کتابخونه پایروگرام حالا گفتم بیام بگم که چطور میتونید دقیقا همین رو توی تلبات پیاده کنید تا بتونید جلوی اسپم رو بگیرید :) 👇 from cachetools import TTLCache from telebot import ContinueHandling…
عه من این پستو تازه دیدم
جا cachetools از cachebox استفاده کنین وگرنه حلالتون نمیکنم
جا cachetools از cachebox استفاده کنین وگرنه حلالتون نمیکنم
🌐 دیوایس های متصل به WiFi چجوری شناسایی میشن؟
تاحالا فکر کردین بعضی برنامه ها، چجوری دیوایس های متصل به شبکه WiFiتون رو پیدا میکنن؟
پروتوکل ARP
پروتکل Address Resolution Protocol (ARP) یک پروتکل اساسی است که در شبکههای رایانهای برای تطبیق یک آدرس IP با یک آدرس فیزیکی ماشین، که به عنوان Media Access Control (MAC) address شناخته میشود، استفاده میشود.
1. تطبیق آدرس IP به آدرس MAC: هنگامی که یک دستگاه میخواهد با دستگاه دیگری در همان شبکه ارتباط برقرار کند، نیاز دارد که آدرس MAC دستگاه مقصد را بداند.
2. درخواست ARP: دستگاه درخواستکننده یک بسته درخواست ARP را به تمام دستگاههای شبکه ارسال میکند و میپرسد "چه کسی این آدرس IP را دارد؟"
3. پاسخ ARP: دستگاهی که آدرس IP مطابقت دارد با یک بسته پاسخ ARP، آدرس MAC خود را ارائه میدهد.
4. کش ARP: دستگاهها یک کش ARP را حفظ میکنند که تطابقهای اخیر آدرسهای IP به MAC را ذخیره میکند تا ارتباطات آینده سریعتر شوند.
بدون ARP، دستگاهها نمیتوانند به صورت کارآمد در داخل یک شبکه ارتباط برقرار کنند.
پ.ن: وقتی موضوعی برای پست گذاشتن پیدا نمیکنی ...
تاحالا فکر کردین بعضی برنامه ها، چجوری دیوایس های متصل به شبکه WiFiتون رو پیدا میکنن؟
پروتوکل ARP
پروتکل Address Resolution Protocol (ARP) یک پروتکل اساسی است که در شبکههای رایانهای برای تطبیق یک آدرس IP با یک آدرس فیزیکی ماشین، که به عنوان Media Access Control (MAC) address شناخته میشود، استفاده میشود.
1. تطبیق آدرس IP به آدرس MAC: هنگامی که یک دستگاه میخواهد با دستگاه دیگری در همان شبکه ارتباط برقرار کند، نیاز دارد که آدرس MAC دستگاه مقصد را بداند.
2. درخواست ARP: دستگاه درخواستکننده یک بسته درخواست ARP را به تمام دستگاههای شبکه ارسال میکند و میپرسد "چه کسی این آدرس IP را دارد؟"
3. پاسخ ARP: دستگاهی که آدرس IP مطابقت دارد با یک بسته پاسخ ARP، آدرس MAC خود را ارائه میدهد.
4. کش ARP: دستگاهها یک کش ARP را حفظ میکنند که تطابقهای اخیر آدرسهای IP به MAC را ذخیره میکند تا ارتباطات آینده سریعتر شوند.
بدون ARP، دستگاهها نمیتوانند به صورت کارآمد در داخل یک شبکه ارتباط برقرار کنند.
پ.ن: وقتی موضوعی برای پست گذاشتن پیدا نمیکنی ...
👍11🤣3
Forwarded from BotNews
Bot API 7.11
• Bots can now participate in revenue sharing from Telegram Ads⭐️ – unlocking a new way to help support their development.
• Introduced Paid Broadcasts⭐️ – allowing bots to broadcast up to 1000 messages per second.
• Bots can now send and receive chat-specific hashtags that only show posts and stories from a specific chat when tapped.
• Added a new inline button to let users copy text in one tap.
• Bots can now add media to existing text messages.
• And more, see the full changelog for details:
https://core.telegram.org/bots/api-changelog#october-31-2024
⚠️ Warning: Starting December 1, 2024 messages with video posted in big communities can be delayed by the server until the respective video is reencoded. Read more here.
• Bots can now participate in revenue sharing from Telegram Ads
• Introduced Paid Broadcasts
• Bots can now send and receive chat-specific hashtags that only show posts and stories from a specific chat when tapped.
• Added a new inline button to let users copy text in one tap.
• Bots can now add media to existing text messages.
• And more, see the full changelog for details:
https://core.telegram.org/bots/api-changelog#october-31-2024
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤4👍2🔥1
BotNews
• Bots can now participate in revenue sharing from Telegram Ads ⭐️ – unlocking a new way to help support their development.
ربات ها هم مثل کانال ها میتونن درآمد کسب کنن از تبلیغات تلگرام 🔥
1🔥7👍3❤2🤣2😁1
باهم بخندیم ( به هم نخندیم )
کدی که امروز استاد نوشت از روش توضیح داد😂😂
int main() {
scanf(%d%d, &a, &b);
sum = a + b;
printf(sum, "%d");
}کدی که امروز استاد نوشت از روش توضیح داد😂😂
🤣15
Coding Lovers
باهم بخندیم ( به هم نخندیم ) int main() { scanf(%d%d, &a, &b); sum = a + b; printf(sum, "%d"); } کدی که امروز استاد نوشت از روش توضیح داد😂😂
دلم برای کسایی که از دانشگاه میخوان چیزی یاد بگیرن میسوزه واقعا
چه جامعه ایه آخه
چه جامعه ایه آخه
👍21👎3🤣1
رنک بندی گیتهاب بر اساس استار ها رو میتونین از این سایت ببینین
https://www.stardev.io/
رنک گیتهابتون چنده؟
https://www.stardev.io/
رنک گیتهابتون چنده؟
👍2
شوخیتون گرفته؟ یه زبان برنامه نویسی تقریبا معروف داریم به اسم Portugol که کاملا زبانش بریزیلیه
پ.ن داخل دبیرستان های برزیل هم تدریس میشه😐😂
مثلا
پ.ن داخل دبیرستان های برزیل هم تدریس میشه😐😂
مثلا
funcao somamatriz(n: inteiro): inteiro
var
i, j, soma : inteiro
inicio
soma <- 0
para i de 1 ate 10 faca
para j de 1 ate 10 faca
soma <- soma + a[i,j] (ref:scope)
fimpara
fimpara
retorne soma
fimfuncao
algoritmo "semnome"
var
i, j : inteiro
a : vetor [1..10,1..10] de inteiro
inicio
para i de 1 ate 10 faca
para j de 1 ate 10 faca
a[i,j] <- i + j
fimpara
fimpara
escreva ("Resultado: ", somamatriz(5))
fimalgoritmo
😁11👍1👎1
میخوام درمورد thread-safe بهتون توضیح بدم.
اول یک نسخه از هوش مصنوعی میزارم، و بعد خودم کاملش میکنم.
اول یک نسخه از هوش مصنوعی میزارم، و بعد خودم کاملش میکنم.
Coding Lovers
میخوام درمورد thread-safe بهتون توضیح بدم. اول یک نسخه از هوش مصنوعی میزارم، و بعد خودم کاملش میکنم.
در برنامهنویسی، وقتی درباره "thread safe" صحبت میکنیم، منظورمان این است که کد نوشته شده میتواند به درستی در محیطی که چندین رشته (threads) به طور همزمان در حال اجرا هستند، عمل کند، بدون اینکه منجر به مشکلاتی نظیر تداخل داده یا خطاهای دیگر شود.
فرض کنید دو یا چند رشته بخواهند به طور همزمان به یک متغیر مشترک دسترسی پیدا کنند. اگر این دسترسیها به درستی هماهنگ نشوند، ممکن است دادهها دچار مشکل شوند. به عنوان مثال، تصور کنید دو نفر در حال نوشتن بر روی یک تخته سیاه هستند. اگر هر کدام بدون هماهنگی با دیگری چیزی بنویسد، نوشتهها با هم تداخل خواهند داشت و نتیجه ناواضح خواهد بود. در برنامهنویسی، این مشکل با استفاده از مکانیزمهایی مثل قفل (lock) یا مچینگ (mutex) حل میشود.
بیایید یک مثال ساده با پایتون ببینیم:
در این مثال، ما یک متغیر مشترک به نام
به این ترتیب، میتوانیم کدی بنویسیم که "thread safe" باشد و در محیطهای چند رشتهای بدون مشکل کار کند.
فرض کنید دو یا چند رشته بخواهند به طور همزمان به یک متغیر مشترک دسترسی پیدا کنند. اگر این دسترسیها به درستی هماهنگ نشوند، ممکن است دادهها دچار مشکل شوند. به عنوان مثال، تصور کنید دو نفر در حال نوشتن بر روی یک تخته سیاه هستند. اگر هر کدام بدون هماهنگی با دیگری چیزی بنویسد، نوشتهها با هم تداخل خواهند داشت و نتیجه ناواضح خواهد بود. در برنامهنویسی، این مشکل با استفاده از مکانیزمهایی مثل قفل (lock) یا مچینگ (mutex) حل میشود.
بیایید یک مثال ساده با پایتون ببینیم:
import threading
# متغیر مشترک
shared_counter = 0
# یک قفل برای هماهنگی بین رشتهها
lock = threading.Lock()
def increment_counter():
global shared_counter
for _ in range(10000):
lock.acquire()
shared_counter += 1
lock.release()
# ایجاد دو رشته که به طور همزمان متغیر مشترک را افزایش میدهند
thread1 = threading.Thread(target=increment_counter)
thread2 = threading.Thread(target=increment_counter)
# شروع به کار رشتهها
thread1.start()
thread2.start()
# منتظر میمانیم تا هر دو رشته کارشان را تمام کنند
thread1.join()
thread2.join()
print("Final counter value:", shared_counter)
در این مثال، ما یک متغیر مشترک به نام
shared_counter داریم و دو رشته که هر کدام ۱۰۰۰۰ بار این متغیر را افزایش میدهند. اگر از قفل استفاده نکنیم، ممکن است نتیجه نهایی shared_counter درست نباشد، چرا که ممکن است دو رشته همزمان به آن دسترسی پیدا کنند و مقدار آن را به اشتباه افزایش دهند. اما با استفاده از قفل (lock.acquire() و lock.release())، اطمینان حاصل میکنیم که در هر زمان فقط یک رشته به shared_counter دسترسی دارد، و این باعث میشود که برنامه به درستی کار کند و مقدار نهایی صحیح باشد.به این ترتیب، میتوانیم کدی بنویسیم که "thread safe" باشد و در محیطهای چند رشتهای بدون مشکل کار کند.
👍4