اصلی ترین عواملی که موجب کند بودن زبان برنامه نویسی پایتون شده است!

همانطور که بارها در مقالات پیشین گفته شد زبان برنامه نویسی پایتون یک زبان بسیار محبوب و کاربردی با ویژگی ها و مزایای فراوانی می باشد که در توسعه وب، امنیت، DevOps, Data Science قابل استفاده می باشد.
اما بزرگترین عیب این زبان آن است که زبان برنامه نویسی پایتون کند است. البته این جمله کاملا غلط است اگر آنرا به تنهایی بکار ببریم. اتفاقا پایتون در 90 درصد موارد از سایر زبان ها نه تنها هوشمندتر بلکه سریعتر هم هست. اگر شما پشت صحنه دستورات پایتون را بدانید می توانید سریعترین برنامه های جهان را با پایتون بنویسید!
چگونه می توانیم سرعت زبان برنامه نویسی پایتون را با زبان های جاوا و سی پلاس مقایسه کنیم؟ هیچ مقیاس معتبری وجود ندارد و بسته به نوع نرم افزار نتایج نیز متعدد می باشد.
اما برای شروع مقایسه بین زبان های مختلف computer language Benchmarks انتخاب نسبتا خوبی می باشد.
با مقایسه این زبان ها می توان گفت زبان برنامه نویسی پایتون کند ترین زبان می باشد و زبان های تفسیر کننده دیگر مانند جاوا اسکریپت نیز همین مشکل را دارند.
پس از آن کامپایلر های JIT که در سی شارپ و جاوا استفاده می شود و در پایان می توان گفت سریع ترین زبان برنامه نویسی زبان هایی می باشند که از کامپایلر AOT استفاده می کنند (مانند سی و سی پلاس پلاس)

سه دلیل عمده کند بودن زبان برنامه نویسی پایتون
۱.زبان برنامه نویسی پایتون GIL و یا Global Interpreter Lock می باشد.
۲.در زبان پایتون کد ها به جای کامپایل شدن تفسیر می شوند
۳. زبان برنامه نویسی پایتون یک زبان پویا می باشد
1.بررسی ویژگی GIL بودن زبان برنامه نویسی پایتون
امروزه کامپیوتر های مدرن دارای سیستم های پردازشی با چند هسته گوناگون می باشند.
جهت استفاده از قدرت این هسته ها، سیستم عامل کامپیوتر ساختار سطح پایین به نام thread یا رشته را عرضه می کند.
به این صورت یک پردازش یا process قادر می باشد در میان چندین رشته مختلف اجرا شود و به این صورت کارایی پردازنده افزایش یافته و اپلیکیشن نیز سریع تر اجرا می شود.
در پردازش های چند نخی در صورتی که تمایل به تغییر متغیر داشته باشید لازم است از این موضوع که نخ ها یا رشته ها به صورت همزمان به آدرس متغیر دسترسی نخواهند داشت و همزمان برای تغییر متغیر تلاش نمی کنند اطمینان حاصل نمایید.
زمانی که متغیری در Cpython تعریف شود مفسر بخشی از حافظه را مختص آن کرده و تعداد ارجاعاتی که به متغیر شده را بررسی می کند که به این پروسه Reference Counting گفته می شود.
در صورتی که در این بخش هیچ ارجاعی وجود نداشته باشد، آن بخش از حافظه که به متغیر اختصاص داده شده بود آزاد می شود.
به همین سبب در صورت افزودن یک متغیر موقت به حلقه, For حافظه کامپیوتر دچار درگیری زیادی نخواهد شد.
موضوع اصلی زمانی ایجاد می شود که متغیر بین رشته های مختلفی اشتراک گذاری شده باشد.
در این شرایط زبان برنامه نویسی پایتون فرآیند Reference Lock Counting را ایجاد می کند.
در چنین شرایطی Global Interpreter Lock مسئول کنترل چنین موضوعاتی می باشد.
در صورت اعمال شدن این حالت بر روی یک برنامه، مفسر تنها می تواند یک عملیات را در یک زمان انجام دهد و به رشته های دیگر توجهی نخواهد داشت.
در صورتی که شما یک برنامه تک رشته ای داشته باشید، سرعت برنامه تغییر نکرده و حذف GIL نیز تأثیر چندانی بر روی کارایی کد های شما نخواهد داشت.
در صورتی که فرآیند همزمانی را بر روی یک مفسر چند نخی اعمال کنید در صورتی که نخ های شما با IO زیادی درگیر شوند، برای GIL پیامد های ناخوشایندی را مشاهده می نمایید.
چنانچه از یک وب اپلیکیشن ساخته شده با استفاده از زبان برنامه نویسی پایتون استفاده نمایید دچار مشکل چندانی نخواهید شد.
در صورتی که از WSGI استفاده نمایید برای هر درخواست یک مفسر جداگانه پایتونی ایجاد خواهد شد.
به این صورت شما برای هر درخواست، تنها یک درخواست Lock خواهید داشت.
پیاده سازی های دیگر زبان برنامه نویسی پایتون به چه صورتی می باشند؟
یکی دیگر از پیاده سازی های زبان برنامه نویسی پایتون که دارای GIL می باشد و سه برابر Cpython نیز سرعت دارد PyPy می باشد.
Jython نیز به دلیل استفاده از سیستم مدیریت حافظه JVM سریع تر بوده و دیگر نیازی به GIL ندارد.
جاوا اسکریپت نیز برای مدیریت حافظه از معقوله Mark-and-Sweep-Garbage استفاده می نماید.

۲.کد ها در زبان برنامه نویسی پایتون به جای کامپایل شدن تفسیر می شوند
روشی که Cpython برای اجرای کد پیاده سازی می کند، روش خوبی نیست .
تصور کنید که گاهی ممکن است شما دستور python myscript.py را اجرا نموده و پایتون اقدام به انجام دادن یک رشته گسترده از فرآیند های خواندن، تفسیر کردن، کامپایل کردن و اجرا کردن، نماید.
در فرایند کامپایل کردن، یک نقطه مهم از این فرآیند مربوط به ساخت فایل pyc. به وجود می آید.
این فایل حاوی تمامی بایت کد ها و تمام ماژول هایی می باشد که import نموده اید.
گاهی ممکن است زبان برنامه نویسی پایتون تنها از طریق این بایت کد برنامه ها را اجرا نماید.
زبان برنامه نویسی جاوا جهت اجرای برنامه های خود اول آن ها را به زبان سطح میانی تبدیل نموده و در مرحله بعدی از طریق کامپایل کردن آن ها به شکل JIT به کد های ماشین تبدیل می نماید.
همچنین زبان های Net. نیز به همین شیوه عمل می کنند. البته این امر مزایای خاص خودش را نیز دارد.
در صورتی که تمامی زبان ها یک پروسه یکسان در کامپایل و تبدیل آن به بایت کد دارند چرا پایتون کند تر از بقیه می باشد؟
این موضوع به دلیل حالت کامپایلی JIT زبان های جاوا و Net. می باشد.
توجه داشته باشید که JIT به تنهایی موجب تسریع اجرا نمی شود زیرا در هر صورت بایت کد هایی را اجرا می نماید.
اما عملکرد مهم JIT مربوط به بهینه سازی قسمت هایی از برنامه می باشد که تعداد بار زیادی انجام می شود.
علاوه بر آن جاوا و Net. پویا نیستند و در جهت تعیین نوع دیتا در زمان اجرا از کامپایلر کمک نمیگیرند به همین دلیل زمان بیشتری را می توانند ذخیره سازی کنند. البته پایتون راهکارهای دیگری برای جبران این نقصان و برابر بودن سرعت عملکرد خود با سایر زبان های برنامه نویسی را دارد.
علت عدم استفاده Cpython از JIT چیست؟
لازم به ذکر است که JIT دارای یک مشکل بزرگ می باشد و آن زمان اجرا می باشد.Cpython زمان اجرای کندی دارد و اگر با JIT نیز ادغام شود این زمان کندتر می شود.
همانطور که گفته شد در PyPy پایتون پیاده سازی شده و با JIT نیز ادغام شده و به همین دلیل در حین اجرا از Cpython کندتر می باشد.
۳.پویا بودن زبان برنامه نویسی پایتون
در مقالات پیشین به تفاوت های پویا و ایستا بودن زبان های برنامه نویسی پرداخته شد.
در زبان های ایستا لازم است شما نوع متغیر را مشخص کنید اما در زبان های پویا این کار توسط خود کامپایلر انجام می شود
لازم به ذکر است که در زبان های پویا نیز با داده های مختلفی سر و کار داریم اما این داده ها را تعریف نمی کنیم.

در مثال فوق زبان برنامه نویسی پایتون در مرحله اول متغیری به نام a را تعیین نمود و سپس آن را خارج کرده و نوع داده جدیدی را در متغیر قرار می دهد.
اما متغیر های زبان ایستا به صورتی ساخته می شوند که با پردازنده بیشتری سازگاری داشته باشند.
طراحی زبان برنامه نویسی پایتون به شیوه ای می باشد که پروسه بهینه سازی دشوار تر باشد و به همین دلیل بر روی سرعت برنامه نیز تأثیز گذاشته است.
مقایسه داده های مختلف دشوار و هزینه بر است در زمان خوانده شدن متغیر نوع آن نیز مشخص می شود
بهینه سازی زبان های پویا نیز دشوار تر از زبان ایستا می باشد.
در صورتی که تمایل به رفع این مشکل دارید از Cpython که مناسب برای فراهم نمودن قابلیت استانیک تایپ در پایپون می باشد استفاده کنید.
کلام آخر
یکی از معایب زبان برنامه نویسی پایتون کند بودن آن است. شما امکان استفاده از پایتون در هر کاری را خواهید داشت اما گاهی اوقات نیز می توانید جایگزین بهتری برای زبان پایتون داشته باشید. هر چند با پیشرفت روزافزون این زبان برای تمام مشکلات پیش آمده در سر راه آن چاره ای اندیشیده شده است و در 90 درصد موارد این زبان از سایر زبانها سریع تر عمل می کند.
اما در صورتی که به یادگیری زبان برنامه نویسی پایتون علاقه دارید می توانید یادگیری زبان برنامه نویسی پایتون را با وب سایت جامع و آموزشی مگاپایتون آغاز کنید.
دانستنی های کاربردی جهت آشنایی با زبان برنامه نویسی پایتون
زبان برنامه نویسی پایتون چه کاربرد و ویژگی هایی دارد؟
چگونه به یک برنامه نویس ماهر تبدیل شویم؟
با یادگیری چه زبانی می توانید به یک برنامه نویس ماهر تحت وب تبدیل شوید؟
آشنایی با معنای اوپن سورس و مزایای آن در برنامه نویسی
زبان برنامه نویسی پایتون در دنیای امروز چه کاربردی دارد؟
یادگیری برنامه نویسی پایتون برای مبتدیان
آموزش چگونگی شروع یادگیری زبان برنامه نویسی پایتون
شروع یادگیری زبان برنامه نویسی پایتون : آشنایی با توابع پایتون
شروع یادگیری زبان برنامه نویسی پایتون : عملگر های شرطی
شروع یادگیری زبان برنامه نویسی پایتون (بخش آخر)
آشنایی با سایت های آموزشی رایگان و معتبر جهت یادگیری زبان برنامه نویسی پایتون
چرا زبان برنامه نویسی پایتون به یک زبان قدرتمند تبدیل شده است؟
آشنایی با قدرت و ویژگی های فریم ورک ها در زبان برنامه نویسی پایتون
آشنایی با دیکشنری در زبان برنامه نویسی پایتون
آشنایی با پردرآمدترین زبان های برنامه نویسی سال های اخیر در ایران
چه زمانی استفاده از زبان برنامه نویسی پایتون می تواند برای شما سود آور باشد؟
چگونه وارد دنیای برنامه نویسی پایتون شویم؟
معرفی ۱۰ شرکت مشهور و رده بالا که از پایتون استفاده می کنند
چرا زبان برنامه نویسی پایتون برای تازه کاران زبان مناسبی می باشد؟
آشنایی با مفاهیم پایه و کاربردی در زبان برنامه نویسی پایتون
آشنایی با ویژگیهای حرفهای پایتون که موجب سهولت در انجام کارها میشود
۱۵ کتابخانه مهم و پرطرفدار در زبان برنامهنویسی پایتون
۱۰ کاربرد اصلی استفاده از زبان برنامه نویسی پایتون در پروژه های بزرگ سازمانی
اصلی ترین عواملی که موجب کند بودن زبان برنامه نویسی پایتون شده است!
چقدر طول میکشد تا به برنامهنویسی ماهر در زبان پایتون تبدیل شویم؟
آشنایی با ۶ رویکرد کاربردی زبان برنامه نویسی پایتون
آشنایی با دکوراتورها در زبان برنامه نویسی پایتون
12 مزایا و معایب زبان برنامه نویسی پایتون برای توسعه وب
مقدمه ای بر یادگیری ماشین یا ماشین لرنینگ و کاربرد های آن
یادگیری ماشین با زبان برنامه نویسی پایتون چه کاربردهایی دارد؟
آشنایی با پیش نیازهای اصلی ماشین لرنینگ
بررسی جامع انواع مدل های ماشین لرنینگ و کاربردهای آن
مهم ترین تفاوت های هوش مصنوعی و یادگیری ماشین
آشنایی با درآمد و بازار کار ماشین لرنینگ در سال 2022
آشنایی جامع با هوش مصنوعی و کاربردهای AI
آشنایی جامع با یادگیری نظارت شده در ماشین لرنینگ
6 نکته کاربردی یادگیری ماشین لرنینگ
4 کاربرد اصلی یادگیری نظارت نشده در ماشین لرنینگ
4 کاربرد مهم ماشین لرنینگ در دیجیتال مارکتینگ
7 کاربرد ماشین لرنینگ و هوش مصنوعی در شبکه اجتماعی اینستاگرام
بررسی ۵ کاربرد جالب ماشین لرنینگ در سال ۲۰۲۲
آشنایی با سه مسیر اصلی جهت یادگیری ماشین لرنینگ
۹ کاربرد اصلی دیپ لرنینگ در زندگی روزانه
۶ ایده برای پروژه های یادگیری ماشین لرنینگ برای افراد مبتدی و تازه کار
شش زبان برنامه نویسی برتر در حوزه واقعیت مجازی
آشنایی با ۹ سرور دیسکورد برای علاقه مندان به زبان برنامه نویسی پایتون و ماشین لرنینگ
آشنایی با برترین نرم افزارهای هوش مصنوعی و کاربردهای آن
آشنایی جامع با اصلی ترین روش های یادگیری عمیق
آشنایی جامع با تمامی مباحث و مهم ترین کاربردهای شبکه عصبی کانولوشن
آشنایی جامع با درخت تصمیم و اصلی ترین کاربرد و مفاهیم آن در ماشین لرنینگ
درباره Matinus
با ورود به کارشناسی مهندسی کامپیوتر گرایش نرم افزار از سال 1385 به دنیای زیبای آی تی وارد شدم و فوق لیسانسم رو در رشته آی تی گرایش تجارت الکترونیک از دانشگاه خواجه نصیر طوسی گرفتم. از همون دوران شروع به ساختن وب سایت ها و سئو کردن اونها کردم. زمانی که هیچ کس نمی تونست سئو چیه! یکی پس از دیگری زبان های برنامه نویسی رو تست کردم؛ مثل سی پلاس پلاس ؛ سی شارپ ؛ جاوا ؛ جاوا اسکریپت ؛ سوییفت و .... با همشون برنامه نوشتم تا رسیدم به پایتون و با توجه به تجربه خودم فهمیدم که به این زبان بیشتر علاقه دارم چون در مدت سه ماه اول 24 ساعته پشت کامپیوتر بودم و با برترین اساتید جهان پایتون خودم رو ارتقا دادم تا پس از دو سه سال در پایتون سنیور شدم و اکنون می تونم اونو تدریس کنم. آموزش پایتون من زیادی وسواس گونه و جامعه و من پشت صحنه دستورات و حافظه رو بشما می گم که هیچکس این رو به شما نمیگه.... چون بلد نیستن!!! فقط بلدن از دستورات استفاده کنن. مطمئن باش بعد از آموزش پایتون من خیلی حرف برای گفتن داری و میتونی وارد دنیای هوش مصنوعی و یادگیری ماشین و علوم داده ها بشی و یک شغل بسیار پردرآمد در خارج از کشور بگیری ......
نوشتههای بیشتر از Matinus
دیدگاهتان را بنویسید