قصد داشتم توی ی پست حداقل دو مورد از موارد لیست رو تشریح کنم، ولی امان از محدوديت کاراکتر، حتی نشد از ایموجی هم استفاده کنم 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12
Coding Lovers
THREAD | نخ، رشته
مطمئنا اگه برنامهنویس یا علاقهمند به برنامهنویسی باشین از شنیدن این کلمه "نخ" زخم شدین و آخر سر هم مفهوم و درک کاملی ازش براتون ایجاد نشده، پس همراه باشید تا کامل این مفهوم و مبحث رو براتون جا بندازم!
توی پستهای قبلی با پراسس ها آشنا شدیم و میدونیم که پراسس نمونهای از برنامه درحال اجرا شامل کد های برنامه، فعالیت کنونی و منابع مصرفی هست و با ایزوله بودن نسبت به سایر پراسس ها، توی فضای حافظه خودش کار میکنه. نخ کوچیکترین واحد اجرایی داخل پراسسه که به عنوان پراسس سبک هم شناخته میشه، پس با این حال داخل هر پراسسی ممکنه چندین نخ وجود داشته باشه که با استفاده از منابع مشترک، اشتراکگذاری داده ها رو بطور موثری فراهم میکنه. درواقع میشه این نتیجه رو گرفت که نخ همون پراسسه منتها بهینهتر!
سبک بودن : نخ ها از پراسس سبک تر هستن به این صورت که واسه ایجاد یا مدیرتشون به هزینه کمتری نیازه.
حافظه مشترک : نخ ها توی ی پراسس از منابع مشترکی استفاده میکنن که همین باعث فراهم آوردن ارتباط سریعتری میشه، درواقع با تعریف شدن ی استک جدا ریجستر میشه.
همزمانی : نخ ها این امکان که برنامهای با مقیاس پذیری بالاتر و کارآمد رو توسعه بدیم به ارمغان میاره، البته مدیریت همزمانی نخ باید صورت بگیره که خودش بحث مفصلی داره.
اپلیکیشن پست قبلی رو دوباره به خاطر بیارین، فرض کنین همزمان ١٠٠٠ نفر از این اپلیکیشن استفاده کنن و وبسرور اپلیکیشن حالت پراسس داشته باشه، یعنی واسه هر نفری که از این اپلیکیشن استفاده میکنه و ریکوئستی به وبسرور ارسال میشه، ی پراسس ران بشه و وبسرور واسهی این پراسس مقداری منابع مثل رم، استک، دیتا و غیره در نظر بگیره، عملا اگه ساختار به این صورت باشه، با استفاده همزمان ١٠٠٠ نفری از اپلیکیشن، وبسرور داون میشه!🤯 اینجاس که میگیم چه کاریه آخه، بجای هر بار ران کردن ی پراسس، بعد از دریافت هر رکوئست، ی ترد جدید ایجاد میکنیم، یعنی ی پراسس واحد یا والد درنظر گرفته میشه ( اینجا همون وبسرور پراسس والد حساب میشه ) و با هر بار دریافت رکوئست، نخ یا ترد هایی ران میشن، به بیان ساده تر ی استک جدید تعریف و ریجستر میشه و با هر ترد جدیدی، مجدد دیتای جدید نوشته نمیشه و بدون افت افت کارایی یا کرش به تمامی ریکوست ها پاسخ میدیم!🤤
در نهایت، معمولا داخل مواقعی که سرعت و سبکی، عملکرد و کارایی و همزمانی حائز اهمیت هست از ترد یا نخ و مواقعی که ایزولاسیون، محاسبات و عملیات های پیچیده و سنگین، پایداری و امنیت نیازه از پراسس ها استفاده میکنیم ( یا بهتره اینطور گفته بشه که توی معماری زیر پراسسی مثل وبسرور ها یا برنامه های گرافیکی از نخ و توی معماری های سیستمعاملی از پراسس استفاده میشه )
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍5🔥4🤣1
Coding Lovers
ASYNCHRONOUS | ناهمگام
SYNCHRONOUS | همگام
SYNCHRONOUS | همگام
با چشم پوشی از مالتیپراسسینگ و مالتیتردینگ (در آینده باهاشون آشنا میشیم )، میرسیم به Asynchronous و Synchoronous. 👩🎓
میدونیم که Asynchronous و Synchoronous به ترتیب به معناهای "غیرهمزمان" و "همزمان" هستن، قبل از شروع توضیحات لطفا هر چی توی ذهنتون از این مفاهیم ساختین رو پاک کنید، خصوصا مثال هایی که اساتید معمولا با فرایند آشپزی واستون مطرح کردن.😐
همگی موافقیم که کدهامون دستوراتی هستن که ما تعریف کردیم و کامپیوترهامون موظف به اجرای این دستورات به دو صورت Async و Sync هستن.
🤷♀ - منظورمون از Synchronous چیه؟!
😀 - منظورمون از Asynchronous چیه؟!
💡 - ی مثال جامع از تفاوت کارکرد Async و Sync؛
🤔 - زبان های مختلف مدل Asynchronous رو چطور پیاده سازی میکنن و آیا همه توی همه زبان ها پشتیانی میشه؟!
🤨 - پس با این حال بهتره همیشه Async بنویسم؟!
✔️ - موارد و نکات زیر رو هم به خاطر داشته باشین :
😎 CodingLovers | #Farshad@CodingLovers_OFF
میدونیم که Asynchronous و Synchoronous به ترتیب به معناهای "غیرهمزمان" و "همزمان" هستن، قبل از شروع توضیحات لطفا هر چی توی ذهنتون از این مفاهیم ساختین رو پاک کنید، خصوصا مثال هایی که اساتید معمولا با فرایند آشپزی واستون مطرح کردن.
همگی موافقیم که کدهامون دستوراتی هستن که ما تعریف کردیم و کامپیوترهامون موظف به اجرای این دستورات به دو صورت Async و Sync هستن.
وقتی حرف ازSyncبودن کدمون میزنیم درواقع منظور اصلیمون ترتیب اجرای کده که به اصطلاح بصورتBlockingاجرا میشن؛ یعنی به ترتیب لاین های کد کدمون اجرا میشه و تا وقتی پروسه حال حاظر تکمیل نشه مابقی کد هم اجرا نمیشن.Syncبودن اجرای کد رو قابل پیشبینی میکنه و به هر صورتی که کد رو نوشته باشیم، دقیقا به همون صورت و ترتیب هم اجرا میشن.
شاید با خودتون بگین که Async خلاف روند Sync عمل میکنه، اما جا داره که بگم اینطور نیست!!AsyncوSyncمکمل هم هستن و در واقعAsynchronousبودن کد باعث متفاوت بودن ترتیب اجرا با ترتیب کد میشه، یعنی منتظر تموم شدن کد قبلی نمیمونه و طی زمانی که کد قبلی اجرا میشه به سایر اجزای کد میپردازه (کارکرد افلود). کد هایAsyncممکنه که به حالت موازی صورت بگیرن و باعث اجرای پارالل و یا غیر موازی و موجب همروندی بشن. معمولا توی زبان هایی که ازAsynchronousپشتیبانی میکنن با کلید هایAsyncوAwaitمشخص و نوشته میشن.
اپلیکیشن مثال های قبلی رو دوباره متصور بشین، فرض کنین این اپلیکیشن از چندین فانکشن تشکیل شده که هر فانکشن کار و عملیات خاصی رو انجام میدن، این وسط ی فانکشن تحت عنوان ارسال درخواست بهAPIداریم که مسئولیت ارسال رکوئست بهAPIو برگردوندن خروجی رو داره و ممکنه پاسخ از سمتAPIکمی طول بکشه، اگه این فانکشن رو بصورتSyncبنویسیم و اون رو کال کنیم، تا زمانی که فرایند و تمامی بلوک این فانکشن کامل انجام نشه مابقی فانکشن و کدها هم اجرا نمیشن و اپلیکیشن منتظر اتمام کار این فانکشن میمونه، ولی اگه صورتAsyncاین کد رو بنویسیم، اپلیکیشن ما منتظر تکمیل شدن کارکرد این فانکشن نمیمونه و سایر فانکشن ها و کد به حالت عادی خودشون ادامه میدن🥺
زبان های مختلف دارای قابلیتAsyncمعمولا یا از موارد زیر یا ترکیب و تلفیقشون واسه مدلAsynchronousاستفاده میکنن :1️⃣ - استفاده از پراسس ها مبتنی به حافظه غیر اشتراکی که قبلا باهاشون آشنا شدیم.2️⃣ - با استفاده ازEventها،EventLoopو یا مابقی الگوریتم های مبتنی بر اینها3️⃣ - با استفاده از ترد با این تفاوت که از فضای اشتراکی استفاده میکنن (با تردم قبلا بصورت مفصل آشنا شدیم)
بعضی از زبانها مثل پایتون و جاوااسکریپت ازAsyncپشتیبانی و بعضی هم مثل PHP، C، Go و.. هم پشتیبانی نمیکنن که البته با مالتیتردینگ و مالتیپراسسینگ میشه این قابلیت رو پیاده سازی کرد.
نه، خیلی اوقات نیازی بهAsyncبودن کدمون نیست وAsyncنوشتن فانکشن و مابقی اجزای کد بیخودیه مثل این مورد. توی حالت کلی داخل مواقعی که با عملیات هایIO Boundطرفیم باید کدمون حالتAsyncداشته باشه مثل مواقعی که با ارسال رکوئست های پیاپی با تاخیر زیاد یا مواقعی که با ورودی و خروجی زیادی و.. سر و کار داریم
🔘 توی کد هایAsyncترتیب اجرا، نحوه دسترسی هر جریان و قسمت اجرایی به دادهها و مدت زمان صرف شده واسه رسیدن به نتیجه مشخص نیست.🟢 مدیریت استیتمنیجمنت توی کد هایAsyncممکنه چالش برانگیز و نیازمند به الگوی مناسب داشته باشه.🔘 نمیتونیم هیچ تضمینی واسه سریعتر شدن کد باAsyncکردنش ارائه بدیم (بستگی به فرایند داره)🟣 توی کد هایAsyncمدیریت منابع خیلی مهمه، فرض کنید بصورت Async به دیتابیسی اتصال داریم، اگه مدیریت درستی انجام نشه منجر بهMemory Leekمیشه!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍5❤4
تقریبا ی پست دیگه که شامل مالتیپراسسینگ، مالتیتردینگ و ی جمعبندی مشتی در مورد برنامهنویسی موازی داریم و مجدد به عمیق شدن توی TeleBot میپردازیم، اگه بحث و مورد خاصی واسه تشریح کردن مد نظرتونه کامنت کنین.
به قول این یوتیوبرا "لایک ( اینجا ریکشن) و شِیر هم که مرامتونه"😁
به قول این یوتیوبرا "لایک ( اینجا ریکشن) و شِیر هم که مرامتونه"
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤10🔥3
Coding Lovers
فردا میشه 19 سالم 11 آذر 😏 به همین مناسبت سن تونو بگید ببینم چند ساله اید؟
چه زود میگذره، همین دیروز هم 11 آذر بودا 😏
شد 20 سالم
یه دوره باحالمون نشه به همین مناسبت؟
شد 20 سالم
یه دوره باحالمون نشه به همین مناسبت؟
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍3🔥1
16 آذر، روز دانشجو مبارک 🔥
روز دانشجو رو به همه دانشجوهایی که وسط چالشهای سینتکس، دیباگ، و ددلاینهای پایاننامه گیر کردن، تبریک میگم.
شماها اونا هستید که روز و شب با یه مشت کد و لاگ و گاهی ارورهای بیمنطق سر و کله میزنید و آخرش یه چیزی میسازید که دنیای دیجیتال رو میچرخونه.
تو دنیایی که همهچیز با کد میچرخه، شماها سازندههای آیندهاید. شاید الان تو فکر این باشید که چرا تستهاتون پاس نمیشه یا چرا یه فانکشن ساده اینقدر ارور میده، ولی یادتون باشه، همین خطاها شما رو به یه کدنویس حرفهای تبدیل میکنه.
یه دنیای پر از صفر و یک منتظر ایدهها و خلاقیتهای شماست. پس نترسید از شکست، چون پشت هر ارور، یه راهحل خفن مخفی شده.
روزتون پر از انگیزه، کامیتهای تمیز و پروداکتهای موفق باشه.
مخلص💜
روز دانشجو رو به همه دانشجوهایی که وسط چالشهای سینتکس، دیباگ، و ددلاینهای پایاننامه گیر کردن، تبریک میگم.
شماها اونا هستید که روز و شب با یه مشت کد و لاگ و گاهی ارورهای بیمنطق سر و کله میزنید و آخرش یه چیزی میسازید که دنیای دیجیتال رو میچرخونه.
تو دنیایی که همهچیز با کد میچرخه، شماها سازندههای آیندهاید. شاید الان تو فکر این باشید که چرا تستهاتون پاس نمیشه یا چرا یه فانکشن ساده اینقدر ارور میده، ولی یادتون باشه، همین خطاها شما رو به یه کدنویس حرفهای تبدیل میکنه.
یه دنیای پر از صفر و یک منتظر ایدهها و خلاقیتهای شماست. پس نترسید از شکست، چون پشت هر ارور، یه راهحل خفن مخفی شده.
روزتون پر از انگیزه، کامیتهای تمیز و پروداکتهای موفق باشه.
مخلص💜
7❤15👍5🔥3👎1
یه چالش تقریبا سخت
با استفاده از regex، از متن زیر
چگونه pZESFitd را بگیریم؟ ( یه ساعته درگیرشم )
با استفاده از regex، از متن زیر
"0b0caf091d79a4006ebf6c2f9b17b60c1d798069$[[\\"__json_message\\"\\0540\\05425\\054\\"Your edit code: \\"\\054\\"pZESFitd\\"]]"
چگونه pZESFitd را بگیریم؟ ( یه ساعته درگیرشم )
👍6
👍4
به پایان آمد این دفتر حکایت همچنان باقی ☹️
خودم خیلی از پایروگرام استفاده نمیکردم ولی اگه شما هنوزم از پایروگرام استفاده میکردید، شاید بهتر باشه کم کم به فکر لایبرری جدیدی باشید.
خودم خیلی از پایروگرام استفاده نمیکردم ولی اگه شما هنوزم از پایروگرام استفاده میکردید، شاید بهتر باشه کم کم به فکر لایبرری جدیدی باشید.
Please open Telegram to view this post
VIEW IN TELEGRAM
😢9👍6
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21👍3🔥2👎1
🌟 هوش مصنوعی، کمک یا تهدید؟
توی این پست بیشتر میخام راجب یه تحقیق از سایت nature.com صحبت کنم.
از وقتی هوش مصنوعی اومده بیشتر افراد - مخصوصا ادیتور ها و گرافیست ها و برنامه نویس ها - دارن ازش استفاده میکنن و تبدیل شده به کاری روزمره.
جمله ای که برای فضای مجازی میگفتن، حالا برای هوش مصنوعی هم کاربرد داره: «هم خوبه هم بد؛ ازش درست استفاده کنی کمکت میکنه، بد استفاده کنی یه تهدیده.»
💭 طبق تحقیقات: «68.9 درصد تنبلی در انسان، 68.6 درصد در مسائل حریم خصوصی و امنیتی شخصی و 27.7 درصد از دست دادن تصمیم گیری ناشی از تاثیر هوش مصنوعی است.»
وقتی AI باعث بشه تو از فکر کردن دست بکشی، و جای اینکه سر مشکلی فکر کنی و راه حل رو پیدا کنی، بری مستقیم سراغ AI، خودت رو بخشی از همین تحقیقات بدون!
قبل از هوش مصنوعی آدم ها چیکار میکردن؟ وقتی میخواستن پروژه ای بسازن نمیرفتن از هوش مصنوعی کمک بگیرن؛ خودشون میرفتن تحقیق میکردن، دانشش رو بدست میاوردن و بعد خودشون از پس پروژه بر میومدن؛
خلاصه اینکه، نزارید هوش مصنوعی جاتون فکر و تحقیق کنه. اول خودت تلاش و فکر کن. جایی که واقعا فقط AI به کمکت میاد برو سراغش.
( فرض کن یروزی قراره تمام AIها نابود بشن، اونموقع از پس کارات بر میای، یا گیر میکنی توی گِل؟ )
پ.ن: فکر کنم قراره پست پُربحثی باشه 😂
@CodingLovers
توی این پست بیشتر میخام راجب یه تحقیق از سایت nature.com صحبت کنم.
از وقتی هوش مصنوعی اومده بیشتر افراد - مخصوصا ادیتور ها و گرافیست ها و برنامه نویس ها - دارن ازش استفاده میکنن و تبدیل شده به کاری روزمره.
جمله ای که برای فضای مجازی میگفتن، حالا برای هوش مصنوعی هم کاربرد داره: «هم خوبه هم بد؛ ازش درست استفاده کنی کمکت میکنه، بد استفاده کنی یه تهدیده.»
💭 طبق تحقیقات: «68.9 درصد تنبلی در انسان، 68.6 درصد در مسائل حریم خصوصی و امنیتی شخصی و 27.7 درصد از دست دادن تصمیم گیری ناشی از تاثیر هوش مصنوعی است.»
وقتی AI باعث بشه تو از فکر کردن دست بکشی، و جای اینکه سر مشکلی فکر کنی و راه حل رو پیدا کنی، بری مستقیم سراغ AI، خودت رو بخشی از همین تحقیقات بدون!
قبل از هوش مصنوعی آدم ها چیکار میکردن؟ وقتی میخواستن پروژه ای بسازن نمیرفتن از هوش مصنوعی کمک بگیرن؛ خودشون میرفتن تحقیق میکردن، دانشش رو بدست میاوردن و بعد خودشون از پس پروژه بر میومدن؛
خلاصه اینکه، نزارید هوش مصنوعی جاتون فکر و تحقیق کنه. اول خودت تلاش و فکر کن. جایی که واقعا فقط AI به کمکت میاد برو سراغش.
( فرض کن یروزی قراره تمام AIها نابود بشن، اونموقع از پس کارات بر میای، یا گیر میکنی توی گِل؟ )
پ.ن: فکر کنم قراره پست پُربحثی باشه 😂
@CodingLovers
👍7❤2
سلام ظهرتون بخیر 🙃👋🏻
به نظرتون چه ساعت هایی معمولاً آدما بیشتر آنلاینن توی اینترنت؟
به نظرتون چه ساعت هایی معمولاً آدما بیشتر آنلاینن توی اینترنت؟
🤣8
جواب پست بالایی رو بدید اگه دوست داشتید
چون واقعیتش دارم برنامه ریزی میکنم برا یه سری آموزش و چیزای باحال
شب بیشتر درموردش حرف میزنم، بعد از پست خفن علی
شمام نظری پیشنهادی چیزی دارید زیر همین پست بگید
ری اکشن قلب بزنید به یاد قدیما ❤️😍
چون واقعیتش دارم برنامه ریزی میکنم برا یه سری آموزش و چیزای باحال
شب بیشتر درموردش حرف میزنم، بعد از پست خفن علی
شمام نظری پیشنهادی چیزی دارید زیر همین پست بگید
ری اکشن قلب بزنید به یاد قدیما ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19
🧶 چطور یک برنامه رو thread safe کنیم؟
وقتی برنامه ای مینویسم که قراره از threading ( یا async ) برای اجرای همزمان چند پروسه استفاده کنه، بحث thread safe موضوع حساسی میشه.
ما به تابعی یا classی میگیم thread-safe که اگر همزمان در یک لحظه چندین بار تغییرات در اون ایجاد بشه و خونده بشه، بدون هیچ مشکلی عمل کنه.
این دقیقا زمانی هستش که دو نفر همزمان به چیزی مشترک دسترسی پیدا میکنن که مشکلات عجیبی پیش میاد اینجا:
فرض کنید متغییر counter برابر با 0 هستش.
فرد x و y همزمان بهش دسترسی پیدا میکنن.
فرد y یک عدد به counter اضافه میکنه.
فرد x متغییر counter رو میخونه و استفادش میکنه.
چه اتفاقی میوفته؟ فرد y یکی به counter اضافه کرده و شده 1، ولی فرد x همچنان از مقدار 0 استفاده کرده.
یا یه مثال بهتر؛ همزمان دو نفر میخوان یک فایل رو تغییر بدن، کلا محتوای فایل یچیز عجیب غریب میشه
به این اتفاقات میگن race condition.
🔒 درک بهتر کاربرد GIL توی async
چرا میگم از requests یا socket توی ربات هاتون ( حالت اسینک ) استفاده نکنین؟ دلیلش همینجاست.
تمام لایبرری های پایتون ( ۹۰ درصدشون ) برای اینکه thread-safe باشن، هرکاری میخوان بکنن میزنن GIL رو قفل میکنن که مشکلی پیش نیاد؛ حتی تمام تایپ های پایتون همینکار رو میکنن
وقتی GIL قفل میشه برنامه متوقف میشه تا وقتی آزاد بشه
وقتی این کد رو اجرا کنین متوجه میشین وقتی requests میخواد کارش رو انجام بده کل برنامه رو میزنه متوقف میکنه، چرا؟
داخل requests از socket استفاده میشه که socket برای انجام هرکاری اول GIL رو قفل میکنه که این باعث میشه کل برنامتون متوقف میشه ( باید از aiohttp یا httpx یا ... استفاده کنید )
همونطور که گفتم «تمام لایبرری های پایتون ( ۹۰ درصدشون ) برای اینکه thread-safe باشن، هرکاری میخوان بکنن میزنن GIL رو قفل میکنن» درست مثل socket.
حتی دیکشنری هم برای هرکاری GIL رو قفل میکنه اما اینقدر سریع عمل میکنه آسیبی به برنامه نمیزنه
همتون داخل برنامه های async، هر تابعی رو گیر میارید async def مینویسید، خب این اشتباهه چون تاثیری نداره.
خب این چه تاثیری داشت؟ هیچی. اصلا نیازی نیست async def بنویسین چون تاثیری نداره.
این چی؟ بازم هیچ تاثیری نداره چون اصلا نیازی به async بودن تابع نیست،فقط باعث میشین تابع کند تر عمل بکنه
فقط زمانی حق دارید تابعی رو async def تعریف کنید که مجبورید
من اینجا مجبورم async def تعریف کنم چون اگه نباشه نمیتونم await کنم
🌟 ادامه داستان توی پست های بعدی ...
@CodingLovers_OFF
وقتی برنامه ای مینویسم که قراره از threading ( یا async ) برای اجرای همزمان چند پروسه استفاده کنه، بحث thread safe موضوع حساسی میشه.
البته که پایتون درحالت عادی کلا thread safe هستش، اما توی شرایطی مثل نوشتن همزمان فایل یا کار با یسری لایبرری ها به مشکل میخوریم.🧶 مفهوم thread-safe
ما به تابعی یا classی میگیم thread-safe که اگر همزمان در یک لحظه چندین بار تغییرات در اون ایجاد بشه و خونده بشه، بدون هیچ مشکلی عمل کنه.
تمام تایپ های اصلی پایتون از نسخه ۳.۸ یا ۳.۹ به بعد thread safe هستن؛ dict list set int float ...🏎️ مفهوم race condition
توی کاربرد GIL بهتر درک میکنین
این دقیقا زمانی هستش که دو نفر همزمان به چیزی مشترک دسترسی پیدا میکنن که مشکلات عجیبی پیش میاد اینجا:
فرض کنید متغییر counter برابر با 0 هستش.
فرد x و y همزمان بهش دسترسی پیدا میکنن.
فرد y یک عدد به counter اضافه میکنه.
فرد x متغییر counter رو میخونه و استفادش میکنه.
چه اتفاقی میوفته؟ فرد y یکی به counter اضافه کرده و شده 1، ولی فرد x همچنان از مقدار 0 استفاده کرده.
اگه امتحان کنین همچین اتفاقی رو نمیبینین چون پایتون خودش جلوشو میگیره
یا یه مثال بهتر؛ همزمان دو نفر میخوان یک فایل رو تغییر بدن، کلا محتوای فایل یچیز عجیب غریب میشه
اینو میتونین راحت امتحان کنین
به این اتفاقات میگن race condition.
🔒 درک بهتر کاربرد GIL توی async
چرا میگم از requests یا socket توی ربات هاتون ( حالت اسینک ) استفاده نکنین؟ دلیلش همینجاست.
اول بنظرم این پست رو بخونین
تمام لایبرری های پایتون ( ۹۰ درصدشون ) برای اینکه thread-safe باشن، هرکاری میخوان بکنن میزنن GIL رو قفل میکنن که مشکلی پیش نیاد؛ حتی تمام تایپ های پایتون همینکار رو میکنن
وقتی GIL قفل میشه برنامه متوقف میشه تا وقتی آزاد بشه
async def loop():
for i in range(10000):
print(i)
async def req():
requests.get("https://google.com")
async def main():
asyncio.create_task(loop())
await req()
asyncio.run(main())
وقتی این کد رو اجرا کنین متوجه میشین وقتی requests میخواد کارش رو انجام بده کل برنامه رو میزنه متوقف میکنه، چرا؟
داخل requests از socket استفاده میشه که socket برای انجام هرکاری اول GIL رو قفل میکنه که این باعث میشه کل برنامتون متوقف میشه ( باید از aiohttp یا httpx یا ... استفاده کنید )
همونطور که گفتم «تمام لایبرری های پایتون ( ۹۰ درصدشون ) برای اینکه thread-safe باشن، هرکاری میخوان بکنن میزنن GIL رو قفل میکنن» درست مثل socket.
حتی دیکشنری هم برای هرکاری GIL رو قفل میکنه اما اینقدر سریع عمل میکنه آسیبی به برنامه نمیزنه
همتون داخل برنامه های async، هر تابعی رو گیر میارید async def مینویسید، خب این اشتباهه چون تاثیری نداره.
async def req():
requests.get("https://google.com")
خب این چه تاثیری داشت؟ هیچی. اصلا نیازی نیست async def بنویسین چون تاثیری نداره.
async def select():
cursor = conn.cursor()
cursor.execute("SELECT * FROM users;")
return cursor.fetchall()
این چی؟ بازم هیچ تاثیری نداره چون اصلا نیازی به async بودن تابع نیست،فقط باعث میشین تابع کند تر عمل بکنه
فقط زمانی حق دارید تابعی رو async def تعریف کنید که مجبورید
async def req():
await httpx.get("https://google.com")
من اینجا مجبورم async def تعریف کنم چون اگه نباشه نمیتونم await کنم
این قانون رو رعایت نکنین فقط باعث میشید تابع کند تر عمل کنه
🌟 ادامه داستان توی پست های بعدی ...
@CodingLovers_OFF
❤10👍2