tgoop.com/djangolearn_ir/865
Last Update:
بحث خوبی شد تو گروه, یکی پرسید که JIT چیه و چی کار میکنه دقیقا. سعی میکنم خیلی ساده توضیح بدم که قابل درک باشه برای همه.
وقتی یه اسکریپت پایتونی رو ران میکنی، یه سری فایل با پسوند .pyc تو پوشهی pycache ساخته میشه. اینا بایت کد هستن. بایت کد چیه؟ یه low level representation از کدی که نوشتی. بایت کد platform independent هست یعنی مهم نیست رو چی داری رانش میکنی. اما این بایت کد برای CPU قابل فهم نیست. CPU فقط ماشین کد رو میفهمه، یعنی همون باینری صفر و یک. پس وقتی بایت کد تولید میشه، PVM (Python Virtual Machine) میاد و بایت کد رو به ماشین کد تفسیر میکنه تا CPU بتونه اجراش کنه.
حالا JIT چیه؟ تبدیل بایت کد به ماشین کد زمان و منابع مصرف میکنه. JIT توی رانتایم این تبدیل رو انجام میده و ماشین کد رو توی حافظه نگه میداره تا دفعات بعدی که همون کد اجرا میشه، دوباره نیاز به تبدیل نباشه. اینکار رو فقط برای بخشهایی از کد که زیاد اجرا میشن (بهشون میگن hot loop) انجام میده. چرا؟ چون خوده ذخیره کردن این دیتا پرهزینست و مموری اشغال میکنه پس کل کد رو نمیاد اینکارو کنه. یعنی JIT Engine نگاه میکنه ببینه این بخش از کد اونقدری داره اجرا میشه که ارزش داشته باشه ماشین کدش رو نگه داره یا نه.
چرا کد پایتون مستقیم کد ماشین نمیشه؟ دلیلش اینه که PVM و Python runtime environment داره تو پایتون کارای دیگهای هم میکنه تو ران تایم مثل مدیریت حافظه، لود کردن ماژولها و پکیجها و... این باعث میشه که پایتون انعطافپذیر و راحت باشه، ولی خب به قیمت افت عملکرد در مقایسه با زبان های کامپایلری مثل C.
@PyBackendHub
BY جنگولرن
Share with your friend now:
tgoop.com/djangolearn_ir/865