
تا حالا براتون سوال شده که "چرا اگر پایتون کنده، 80 درصد ChatGPT با پایتون توسعه داده شده؟" یا "چرا اگر پایتون کم سرعته، اینستاگرام با جنگو و پایتونه؟!" توی این پست میخوایم با مفهومی آشنا بشیم که دید شما رو نسبت به سرعت زبان برنامهنویسی عوض میکنه! مفهومی به نام bottleneck یا گلوگاه.
فرض کنید یه اتوبان 6 لاینه داریم که آخرش یه پل تک لاین هست! چه چیزی باعث افزایش سرعت جریان و حرکت ماشینا میشه؟ مدل ماشینها؟ عرض اتوبان؟ یا اون پل آخر؟ قطعا اون پل... به اون پل میگن bottleneck یا گلوگاه برنامهنویسی. خیلیا فکر میکنن سرعت کل پروژه برنامهنویسی مساوی هستش با سرعت زبان برنامهنویسی اما این یه تصور غلط هستش! در صورتی که سرعت پروژه برنامهنویسی مساوی هستش با سرعت کندترین قسمت! یعنی همون گلوگاه و 90 درصد مواقع گلوگاه اصلا زبان برنامهنویسی نیست.
مثلا توی یه پروژه وب با پایتون، اگر ما چنین شبهکدی رو در نظر بگیریم:
user = get_user_from_db() send_http_request_to_another_service() return response
اجرای این کد توی پایتون اگر 0.1 میلی ثانیه طول بکشه، دیتابیس 50 میلی ثانیه، شبکه 200 میلی ثانیه و اگر ما برداریم کد پایتون رو بهینه کنیم که 2 برابر یا حتی 20 برابر سریعتر کار کنه! یا نه اصلا پایتون رو عوض کنیم جاش Rust بنویسیم که کد 50 برابر سریعتر بشه، بازم تقریبا هیچی انگار سریعتر نشده! چرا؟ چون گلوگاه ما جای دیگهاس...
توی یه سایتی مثل اینستاگرام، که بزرگترین پروژه توسعه داده شده با جنگو هستش، درخواستهای HTTP مدیریت میشن، کوئریهای دیتابیس رد و بدل میشه، شبکه، کش، CDN، دیسک و... کلی بخش هست و در کنارش یه بخش تقریبا کوچیکی (در برابر این همه کارِ دیگه که انجام میشه) کدنویسی پایتون/جنگو هست. اگر اینستاگرام داره سریع کار میکنه به خاطر اینه که توسعهدهندگانِ اینستاگرام، بخش پایتون رو گلوگاه نمیدونن و به جاش بخش شبکه، بخش کش رو اومدن به شکل فوقالعادهای بهینه کردن...
یه مثال دیگه بزنیم. ChatGPT که همتون میدونید چیه! تقریبا 80 درصد بخشهاش با پایتون نوشته شده. و یه مثال عالی هستش برای اونایی که میگن "پایتون کند هستش پس برای پروژههای جدی نباید استفاده بشه!" پایتون به خاطر مخازن پکیج غنیای که داره میشه توش از زبانهای دیگه هم استفاده کرد و این بحث کم بودن سرعت رو و کاملا محو کرد!
توی پروژه چت جی پی تی، توی پایتون از نامپای استفاده میشه که هستهاش توسط C نوشته شده، از PyTorch استفاده میشه که توسط سی پلاس پلاس توسعه داده شده، از Tensorflow استفاده میشه که بازم با ++C نوشته شده و با پایتون میشه از تمام این قدرتها استفاده کرد و اینا رو با هم مخلوط کرد. برای همین گاهی وقتا به پایتون میگن Glue Language یعنی زبانی که چیزهای مختلف رو به هم میچسبونه و اصلا حکم گلوگاه رو نداره و کارهای سنگین توسط C, C++, CUDA, TensorRT انجام میشه پس اینجا گلوگاه میشه GPU و کتابخانههای سطح پایین.
حالا چرا پس همین کارا رو با C یا ++C انجام نمیدن از اول؟ چون کد اونقدر پیچیده و سخت و ناخوانا میشه که اگر یه باگ رخ بده، پیدا کردن و رفع کردنش خیلی طول میکشه. نگهداری چنین کدی توی چنین پروژه با ابعاد بزرگی تقریبا ناممکن میشه و برای همین میان این کارها رو در ابعاد پکیج، برای پایتون مینویسن تا بعدش کارها راحتتر جلو بره.
توی این مقاله با مفهوم bottleneck (باتِل نِک) آشنا شدیم و فهمیدیم چیه. اگر شما نتونید توی پروژه گلوگاه رو تشخیص بدین، بهینهسازی تبدیل میشه به وقت هدر دادن! اول باید بفهمید گلوگاه کجاست و اونوقت تصمیم بگیرین که زبان رو عوض کنید؟ الگوریتم رو عوض کنید؟ یا اصلا به کد ربطی نداره! پس از این به بعد به جای اینکه بگین فلان زبان کند هستش و به درد نمیخوره به یاد bottleneck بیوفتین و بهش فکر کنید!