host3nter

خبر: افزایش سرعت PHP با استفاده از HPHPc و HHVM و پیش بینی آینده!

فیس بوک وقتی که متوجه شد زبان Interpreter (مفسری) PHP برای سایت غول پیکری مثل ...

موضوع خبر: افزایش سرعت PHP با استفاده از HPHPc و HHVM و پیش بینی آینده!,.

PHP, برنامه نویس, برنامه نویسی

تاريخ ارسال:2014/08/13

هاست سنتر فیس بوک وقتی که متوجه شد زبان Interpreter (مفسری) PHP برای سایت غول پیکری مثل فیسبوک کند شده است.آنها به جای اینکه هزینه ی زیادی برای خرید سرورهای بیشتر متحمل بشن.از یک مبدل به اسم hip hop استفاده کردند.این مبدل در واقع یک Trans-compiler یا به اختصار Transpiler بود.Hip Hop Trans-compiler یک source-to-source compiler است که به آن HPHPc هم میگویند. HPHPc کد مبدا php را به کد مقصد ++c تبدیل میکند.و کد ++c هم توسط کامپایلر ++g به کد باینری تبدیل میشود و با سرعت خیلی بیشتری اجرا میشود. فیس بوک ادعا میکند با استفاده از HPHPc سرعت سایت اش ۶ برابر افزایش پیدا کرده.و با افزایش سرعت اجرایی سایت، هزینه های خرید سرور بسیار کاهش پیدا کرده و بار پردازنده های این شرکت سبک تر شد.فیس بوک HPHPc را در سال 2010 تحت لایسنس PHP منتشر کرد.(لایسنس PHP هم متن باز هستش ولی copy-left نیست و شبیه BSD License هستش). شرکت فیس بوک در سال ۲۰۱۳ به جای مبدل hip hop از ماشین مجازی Hip Hop Virtual machine استفاده کرد. این ماشین مجازی در واقع یک just-in-time کامپایلر است..Hip Hop Virtual machine فیس بوک هم عملکردی شبیه به JVM و یا CLR دارد. HipHop bytecode هم همان کد میانی فیسوک است. سوالاتی که در ذهن من شکل گرفت این ها هستند : پاسخ سوالات (ممکن است جواب های من اشتباه باشد.اگر اشتباهی دارم لطفا گوشزد کنید) ۱-تفاوت کامپایل استاتیک و مفسر (Interpreter ) و (Virtual Machine) چیست؟ کامپایل استاتیک : در کامپایلرهای خیلی قدیمی کامپایلر Source Code شما را میخواند و آن را به کدهای اسمبلی تبدیل میکرد و کدهای اسمبلی را در یک فایل بر روی دیسک ذخیره میکرد.بعد اسمبلر(Assembler) فایل را میخواند و از روی کدهای اسمبلی کدهای ماشین(کده های باینری) را تولید میکرد.ولی کامپایلرهای امروزی کد اسمبلی را در حافظه اصلی به صورت موقت نگه میدارند و خودشان کار اسمبلر را هم انجام میدهند و کدهای اسمبلی درون حافظه را میخوانند و مستقیم به کد باینری(ماشین کد اجرایی) تبدیل میکنند.به همین خاطر گاهی گفته میشود که کامپایلر ++c کدهای شما را ابتدا به کد اسمبلی تبدیل میکند و بعد آن را اسمبلر به کد اجرایی (باینری) تبدیل میکند.و گاهی نیز حرفی از اسمبلر زده نمیشود و میگویند در زبان ++c کامپایلر بعد از کامپایل ماشین کد اجرایی تولید میکند.( کد اسمبلی بسیار به کد ماشین نزدیک است و اسمبلی در واقع همان کد ماشین است که Notation آن متفاوت است و تبدیل از کد اسمبلی به کد ماشین اصلا دشوار نیست چون فقط یک نگاشت ازmnemonic به صفر و یک است .و اسمبلر هیچ گاه پیچیدگی کامپایلر را ندارد. پس در زمان اجرا چندان تاثییرگذار نیست و به همین خاطر اغلب صحبتی از آن نیست! ) مفسر در واقع هیچ کامپایلی رو انجام نمیده.و خطوط برنامه توسط مفسر خط به خط خوانده میشود و تفسیر میشود و بعد اجرا میشود. Virtual Machine دو مرحله کامپایل دارد.در کامپایل مرحله اول کدهای سطح بالای شما که به زبان انسان نزدیک است(human readable source code) را به کدهای سطح میانی(IL) که به زبان ماشین نزدیک است ولی زبان ماشین(صفر و یک) نیست تبدیل میکند.(machine-readable byte code). در کامپایل مرحله دوم هم کدهای میانی(بایت کد) توسط ماشین مجازی طی فرآیند Just-in-time Compile به کدهای ماشین(صفر و یک) تبدیل میشود.و روی ماشین اجرا میشود. مقایسه این ۳ شیوه از نظر سرعت و کارایی ( Performance ) : بدیهی است که Static Compile (مثل کامپایلر زبان سی) که ماشین کد تولید میکند خیلی سریع تر و بهینه تر است.اما مشکل Static Compile این است: «ماشین کدی که کامپایلر استاتیک تولید میکند وابسته به ماشین(Machine or Architecture Dependency) است.به همین خاطر سورس کدی که به ماشین کد تبدیل شده فقط بر روی ماشین مقصد کار میکند.برای مثال کد ماشینی که از زبان سی کامپایل شده و به صورت exe است فقط بر روی معماری intel/x86 کار میکند.و اگر همین ماشین کد بر روی معماری arm قرار بگیرد پردازنده توانایی اجرای ماشین کد معماری Intel/X86 را ندارد.» ولی زبان های مفسری که اغلب Dynamic Typing هستند(مثل php,python,perl) این مشکل رو ندارند.چون سورس کد شما اصلا کامپایل نمیشه.و سورس کد شما توسط مفسری که بر روی ماشین مقصد قرار داره خط به خط خوانده میشود و تفسیر میشود و اجرا میشود.(منظور از تفسیر این است که خط به خط کد شما به آپ -کد اسمبلی ماشین مقصد تفسیر میشود و بعد op-code اسمبلی آن ماشین توسط اسمبلر ترجمه میشود ).در این جا مشکل انتقال برنامه از یک ماشین به ماشین دیگر کم رنگ تر شده.کافی است برای هر معماری ما یک مفسر مخصوص به آن معماری بنویسیم.و به این ترتیب کد منبع بر روی هر ماشینی که مفسر ما بر روی آن قرار گرفته اجرا میشود.اما مشکل این روش کندی آن است.در مفسرها هر بار که برنامه اجرا میشود مفسر خط به خط سورس کد را میخواند (مثلا سورس کد PHP) را میخواند و آن را به آپ کد اسمبلی assembly opcode تفسیر میکند.و بعد op-code ها توسط اسمبلر(Assembler) به ماشین کد تبدیل میشود و بعد توسط پردازنده اجرا میشود.پس بدیهی است که مفسرها هیچ وقت کارایی کامپایلرهای استاتیک ر ا ندارند.به همین خاطر فیسبوک Hip Hop Trans-compiler را ساخت تا کدهای PHP را به کدهای ++c تبدیل کند. ماشین مجازی از نظر سرعت و کارایی نه به اندازه ی مفسرها کند است.و نه به اندازه کامپایلرهای استاتیک سریع است.اگر چه ماشین مجازی سرعت کامپایلرهای استاتیک را ندارد.ولی در عوض مستقل از ماشین(Machine In-dependency) است.مثل بایت کدهای جاوا که به کمک JVM های مختلف بر روی موبایل و کامپیوتر(لینوکس و ویندوز و مک) و پردازنده های توکار (Embedded Processors) اجرا میشود. علت اینکه ماشین مجازی(Just-in-time Compile ) سریعتر از مفسر(Interpreter) است چیست؟ علت این است که کامپایل کردن از بایت کد به ماشین کد خیلی سریعتر از تفسیر کردن سورس کد به ماشین کد است.چون سورس کد به زبان انسان نزدیک است و از زبان ماشین دور است.ولی بایت کد به زبان ماشین نزدیک است. بدیهی است که مفسرها باید خط به خط کد شما را توسط Token بخوانند و بعد آن را تجزیه(Parse) کنند و بعد آن چند مرحله تحلیل ... هاست,دامین,سایت,وب,طراحی

سوال: دستوری بجای ReadLn در شبکه ایندی که بجای لاین با دریافت کلمه پایان پذیرد

نصب خودکار برنامه های جانبی

گذاشتن طرح توی themeforest.net / کسی اطلاعی داره مارو مطلع کنه لطفا

سوال: سخت تر کردن امکان خواندن کدهای سایت

سوال: ساخت elearning

بازدید ساز سئومارک

فازی c-mean

خبر:, افزایش, سرعت, PHP, با, استفاده, از, HPHPc, و, HHVM, و, پیش, بینی, آینده!

خبر: افزایش سرعت PHP با استفاده از HPHPc و HHVM و پیش بینی آینده!

میزبانی وب ,هاست,فضای وب,ویندوز,لینوکس,دات نت,پی اچ پی,web hosting,windows host,linux host,asp.net,php,sql server,mysql میزبان پایتخت ارائه دهنده خدمات میزبانی وب، هاست و هاستینگ، میزبانی هاست، دامین، میزبانی نمایندگی، نمایندگی وب، سرور مجازی و سرور مجازی ابری می باشد.هاست,میزبانی وب,دامین,سرور مجازی,میزبان پایتخت,host,domain,vps,mizban paytakht,hosting,share hosting,میزبان وب,میزبانی هاست,هاستینگ

google
logo-samandehi