آیا پایتون واقعا 200 برابر از C کندتر است؟ دلایلی برای کند بودن پایتون

هممون بحث هایی راجب به کند بودن پایتون شنیدیم یا حتی توش شرکت هم کردیم و بحثی هم هست که از مدت ها پیش تا الان و صددرصد در آینده هم خیلی ها راجبش بحث میکنن ولی امروز میخوام پایتون و زبان های دیگه رو بررسی و مقایسه کنیم و ببینیم آیا واقعا پایتون کنده یا نه؟

استفاده شرکت های بزرگ از پایتون

همونطور که میدونید شرکت های بزرگ در محصولات خودشون مثل یوتیوب، اینستاگرام و ... از پایتون استفاده میکنند و خب پس این یعنی این شرکت ها سرعت و بهینه بودن براشون مهم نیست؟ و آیا این نرم افزار ها واقعا کنده؟ جواب جفت سوال ها "نه" هست چون تمام شرکت های دنیا توی تمام محصولاتشون سعی میکنند که کد رو در بهینه ترین حالت و سرعت اون رو بالا نگه دارن پس اگه واقعا پایتون کند بود این شرکت های بزرگ از پایتون استفاده نمیکردن. حالا در ادامه به دلایلی میپردازم که چرا همه میگن پایتون کنده.


پایتون یک زبان Dynamic Typed

یکی از تفاوت های اساسی ای که پایتون با زبان هایی مثل C و جاوا داره اینه که پایتون یک زبان داینامیک تایپ (Dynamic Typed) هست، حالا اصلا داینامیک تایپ چی هست؟ زبان هایی مثل C و جاوا زبان های استتیک تایپ (Static Typed) هستن و این به این معناست وقتی که شما میخواین یک متغیر تعریف کنید قبلش معلوم میکنید که اون متغیر قراره از چه نوعی باشه و دیگه نمیشه عوضش کرد ولی در پایتون که یک زبان داینامیک تایپ هست شما قبل از تعریف متغیر معلوم نمیکنین که اون متغیر قراره از چه نوعی باشه و اون متغیر میتونه در هر جایی از برنامه نوع و مقدارش عوض شه.


زبان هایی مثل C و جاوا اول کامپایل میشن و بعد اجرا ولی پایتون اینجوری نیست و کامپایل شدنش همزمان با ران تایم (Runtime) هست چون یک متغیر میتونه در هرجایی از برنامه مقدارش و نوعش عوض بشه و همین موضوع باعث کند شدن پایتون میشه.


استفاده از هسته های CPU

از مشکلات و تفاوت هایی که پایتون با بقیه زبان های داره اینه که پایتون در هر حالتی فقط از یک هسته سی پی یو(CPU) استفاده میکنه و این در حالیه که زبان C و جاوا میتونن از تمام 4 هسته یا حتی در سی پی یو های مدل بالاتر از تمام 8 هسته استفاده کنند که خب این مشکل خیلی روی کند شدن پایتون تاثیر میذاره.


از دیگر مشکلاتی که وجود داره اینه که وقتی چند تا (thread) با هم توی یک نرم افزار اجرا شن ممکن هر کدوم از این thread ها بخواد به یک خونه از مموری دسترسی پیدا کنه و این میتونه مشکل ساز بشه و پایتون برای همین اومده از چیزی به اسم global interpreter lock استفاده کرده، حالا کار این دوست عزیز چیه؟ وظیفه این دوستمون اینه که توی برنامه در لحظه فقط یک thread اجرا بکنه.


البته چندین روش برای حل این مشکلات هم وجود داره که یکیش مولتی تردینگ (multi-threading) هست که این قابلیت رو به شما میده که از چند ترد توی یک برنامه استفاده کنید. مدل بعدی که توی پایتون وجود داره مولتی پراسسینگ (Multiprocessing) هست که به برنامه شما اجازه دسترسی به هسته های سی پی یو بیشتری رو میده و خب شما با این دو تا مدل میتونین این مشکلات پایتون رو حل کنید و سرعت برنامتون رو تا حد چشم گیری زیاد کنید.

Kostya M آماری از پروژه گیت هاب
Kostya M آماری از پروژه گیت هاب

پس چرا میگن پایتون کنده؟

خب وقتی این مشکلات توی پایتون با مدل هایی که گفتم حل میشه چرا میگن پایتون کنده؟ خب اگه یکم راجب به این موضوع مطلب خونده باشین حتما متوجه میشین که مقالات و ویدیو ها روی کلمه (native python) خیلی تاکید دارن، حالا این اصن چی هست؟


در واقع Native python که ترجمه فارسیش میشه پایتون بدون اضافات به این معناست که در این برنامه ها از هیچ مدلی استفاده نمیکنن (مثل مولتی تردینگ و مولتی پراسسینگ) و همین باعث میشه که سرعت پایتون خیلی خیلی پایین بیاد ولی خب آیا واقعا پایتون 200 برابر از C کند تره؟


جواب هم اره است هم نه یعنی اینکه پایتون بدون استفاده از مدل واقعا تا 200 برابر از C کند تره ولی بحثی که این وسط هست اینه که پایتون یک زبانیه که با مدل هاش شناخته میشه و به خاطر مدل های زیاد و تنوعی که داره محبوبیت زیادی پیدا کرده پس خیلی کار درستی نیست که بخوای پایتون رو بدون مدل هاش با بقیه زبان ها مقایسه کنی.


توی این مقاله سعی کردم موضوعات مهم رو پوشش بدم و جواب سوال هارو بدم هرچند موضوعات و علت های خیلی زیاد دیگه ای هست که روی سرعت پایتون تاثیر میزاره ولی من بیشتر تمرکز رو گذاشتم روی کلیت ماجرا


تهیه و تنظیم: ایلیا فرامرزی

اینستاگرام: curlybracket_ir

تلگرام: @curlybracket