Facebook mepere Cinder, ndụdụ nke CPython nke Instagram na-eji

Facebook ebipụtala koodu mmalite maka Project Cinder, ndụdụ nke CPython 3.8.5, bụ isi ntinye aka nke asụsụ mmemme Python. A na-eji cinder eme ihe na akụrụngwa mmepụta Facebook iji mee ka Instagram nwee ike ma gụnye nkwalite iji melite arụmọrụ.

A na-ebipụta koodu ahụ iji kwurịta ohere nke ibufe njikarịcha akwadoro na isi CPython na iji nyere aka ọrụ ndị ọzọ na-etinye aka na ịkwalite arụmọrụ CPython. Facebook ebughị n'obi ịkwado Cinder n'ụdị ọrụ dị iche iche mepere emepe ma gosipụta koodu ahụ n'ụdị ejiri ya na akụrụngwa ụlọ ọrụ, na-enweghị mgbakwunye mgbakwunye na akwụkwọ. Ha anaghị agbalị ịkwalite Cinder dị ka ihe ọzọ na CPython - isi ihe mgbaru ọsọ nke mmepe bụ ọchịchọ imezi CPython n'onwe ya.

A na-ahụta koodu Cinder dị ka nke a pụrụ ịdabere na ya ma nwalee na gburugburu mmepụta, ma ọ bụrụ na achọpụtara nsogbu, ị ga-edozi ha n'onwe gị, ebe Facebook anaghị ekwe nkwa na ọ ga-azaghachi ozi njehie mpụga ma dọta arịrịọ. N'otu oge ahụ, Facebook adịghị ewepu mmekorita na-ewuli elu na obodo ma dị njikere ikwurịta echiche banyere otu esi eme Cinder ọbụna ngwa ngwa ma ọ bụ otu esi eme ngwa ngwa nyefe mgbanwe ndị a kwadebere na isi akụkụ nke CPython.

Isi njikarịcha emejuputa na Cinder:

  • Ndokwa n'ahịrị nke bytecode ("onyinyo bytecode"). Ihe kachasị mkpa nke usoro a bụ ịchọpụta ọnọdụ ebe a na-eme ụdị opcode a na-ahụkarị nke enwere ike ịhazi ya, yana iji nhọrọ pụrụ iche dochie ụdị opcode dị ngwa ngwa (dịka ọmụmaatụ, dochie ọrụ a na-akpọkarị).
  • Nleba anya coroutine. Maka oku ọrụ async na-ahazi ozugbo (ichere anaghị ebute echere na ọrụ ahụ rutere nkwupụta nlọghachi na mbụ), a na-edochi nsonaazụ nke ọrụ ndị dị otú ahụ na-enweghị ịmepụta coroutine ma ọ bụ tinye aka na ihe omume. Na koodu Facebook nke na-eji async/echere nke ukwuu, njikarịcha na-ebute ọsọ ọsọ nke ihe dịka 5%.
  • Nhọrọ JIT na-ahọrọ na ọkwa nke ụzọ na ọrụ onye ọ bụla (usoro-n'oge). Kwanyere site na nhọrọ "-X jit" ma ọ bụ PYTHONJIT = 1 gburugburu ebe obibi na-enye gị ohere ịme ngwa ngwa nke ọtụtụ ule arụmọrụ site na 1.5-4 ugboro. Ebe ọ bụ na nchịkọta JIT dị mkpa naanị maka ọrụ ndị a na-egbu ugboro ugboro, ọ bụghị ihe amamihe dị na ya iji ya maka ọrụ ndị a na-ejikarị eme ihe, nchịkọta n'elu nke nwere ike belata mmezu mmemme.

    Site na nhọrọ "-X jit-list-file=/path/to/jitlist.txt" ma ọ bụ mgbanwe gburugburu ebe obibi "PYTHONJITLISTFILE=/path/to/jitlist.txt" ị nwere ike ịkọwa faịlụ nwere ndepụta ọrụ nke JIT. enwere ike iji (usoro ụzọ .to.module:funcname ma ọ bụ ụzọ.to.module:ClassName.method_name). Enwere ike ikpebi ndepụta ọrụ nke ekwesịrị ịgbanye JIT dabere na nsonaazụ profaịlụ. N'ọdịniihu, a na-atụ anya nkwado maka mkpokọta JIT siri ike dabere na nyocha nke ime nke ugboro ole oku ọrụ, mana na-eburu n'uche nkọwapụta nke usoro mmalite na Instagram, mkpokọta JIT dịkwa mma maka Facebook na mbido mbụ.

    JIT bu ụzọ tụgharịa Python bytecode ka ọ bụrụ nnọchite anya dị elu (HIR), nke dị nso na Python bytecode, mana emebere ya ka ọ jiri igwe mebere ndekọ aha dabere na nke dabere na stack, ma na-ejikwa ụdị ozi na mgbakwunye. nkọwa arụmọrụ-dị oke mkpa (dị ka ịgụta ntụaka) . A na-atụgharị HIR ka ọ bụrụ ụdị SSA (stetic single taskment) wee na-aga site na njikarịcha usoro na-eburu n'uche ngụkọ ntụaka na data oriri ebe nchekwa. N'ihi ya, a na-emepụta ihe nnọchianya etiti dị ala (LIR), dị nso na asụsụ mgbakọ. Mgbe usoro ọzọ nke njikarịcha dabere na LIR, a na-ewepụta ntuziaka mgbakọ site na iji ọba akwụkwọ asmjit.

  • Ọnọdụ siri ike maka modul. Ọrụ a gụnyere akụkụ atọ: Ụdị StrictModule. Onye nyocha static nke nwere ike ikpebi na ogbugbu nke modul enweghị mmetụta na koodu na mpụga modul ahụ. Onye na-ebu modul nke na-ekpebi na modul dị na ọnọdụ siri ike (koodu na-akọwa "mbubata __strict__"), na-enyocha maka enweghị njikọ na modul ndị ọzọ, na-ebukwa modul siri ike n'ime sys.modules dị ka ihe StrictModule.
  • Eke Ọgba bụ ihe nleba anya bytecode nke na-eji nkọwapụta ụdị ewepụta ụdị ọ bụla nke na-agba ọsọ ọsọ site na nchịkọta JIT. N'ime ule ụfọdụ, nchikota nke Static Python na JIT na-egosipụta nkwalite arụmọrụ ruo oge 7 ma e jiri ya tụnyere ọkọlọtọ CPython. N'ọtụtụ ọnọdụ, a na-eche na nsonaazụ ya dị nso iji MyPyC na Cython compilers.

isi: opennet.ru

Tinye a comment