I-Facebook ivule iCinder, ifolokhwe yeCPython esetyenziswa yi-Instagram

I-Facebook ipapashe ikhowudi yomthombo weProjekthi yeCinder, imfoloko ye-CPython 3.8.5, ukuphunyezwa kwereferensi ephambili yolwimi lweprogram yePython. I-Cinder isetyenziswa kwisiseko semveliso ye-Facebook ukunika amandla i-Instagram kwaye ibandakanya ukulungiswa kokuphucula ukusebenza.

Ikhowudi ipapashwe ukuxoxa ngamathuba okuhambisa ukulungiswa okulungiselelwe kwisikhokelo esiphambili seCPython kunye nokunceda ezinye iiprojekthi ezibandakanyekayo ekuphuculeni ukusebenza kweCPython. I-Facebook ayifuni ukuxhasa iCinder ngendlela yeprojekthi evulekileyo yomthombo ovulekileyo kwaye ikhowudi ibonakaliswe ngendlela esetyenziswa ngayo kwisiseko senkampani, ngaphandle kokudibanisa okongeziweyo kunye namaxwebhu. Kananjalo abazami ukukhuthaza iCinder njengenye indlela kwiCPython - eyona njongo iphambili yophuhliso ngumnqweno wokuphucula iCPython ngokwayo.

Ikhowudi yeCinder ithathwa njengento ethembekileyo kwaye ivavanywa kwiindawo zokuvelisa, kodwa ukuba iingxaki zichongiwe, kuya kufuneka uzisombulule ngokwakho, ekubeni i-Facebook ayiqinisekisi ukuba iya kuphendula imilayezo yephutha yangaphandle kunye nezicelo zokutsala. Ngelo xesha, i-Facebook ayibandakanyi intsebenziswano eyakhayo kunye noluntu kwaye ilungele ukuxoxa ngeengcamango malunga nendlela yokwenza iCinder ngokukhawuleza okanye ukukhawuleza ukuhanjiswa kweenguqu ezilungisiweyo kwinxalenye ephambili yeCPython.

Ukulungiswa okuphambili okuphunyezwe kwiCinder:

  • I-caching engaphakathi kwi-bytecode ("shadow bytecode"). Undoqo wendlela kukuchonga iimeko apho i-opcode eqhelekileyo iphunyeziweyo enokuthi iphuculwe, kunye nokutshintsha ngokuguquguqukayo indawo enjalo ye-opcode ngokhetho olukhawulezayo olukhethekileyo (umzekelo, ukubuyisela imisebenzi ebizwa rhoqo).
  • Uvavanyo lwe-coroutine olunomdla. Kumsebenzi we-async weefowuni eziqwalaselwe ngokukhawuleza (ukulinda akubangeli ukulinda kwaye umsebenzi ufikelela kwingxelo yokubuyisela kwangaphambili), isiphumo semisebenzi enjalo ifakwa endaweni ngokuthe ngqo ngaphandle kokudala i-coroutine okanye ukubandakanya iluphu yesiganeko. Kwikhowudi ye-Facebook esebenzisa kakhulu i-async / ilinde, iziphumo zokuphucula kwi-speedup ye-5%.
  • Ukuqulunqwa kwe-JIT ekhethiweyo kwinqanaba leendlela zomntu ngamnye kunye nemisebenzi (indlela-ngexesha). Inikwe amandla nge-"-X jit" ukhetho okanye i-PYTHONJIT = i-1 yendalo eguquguqukayo kwaye ikuvumela ukuba ukhawuleze ukuphunyezwa kweemvavanyo ezininzi zokusebenza ngamaxesha e-1.5-4. Ekubeni uqulunqo lwe-JIT lufanelekile kuphela kwimisebenzi eyenziwa rhoqo, ayicetyiswa ukuba isetyenziswe kwimisebenzi engafane isetyenziswe, umphezulu woqulunqo onokucothisa kuphela ukuphunyezwa kwenkqubo.

    Ngokusebenzisa ukhetho "-X jit-list-file=/path/to/jitlist.txt" okanye imo eguquguqukayo "PYTHONJITLISTFILE=/path/to/jitlist.txt" ungakhankanya ifayile enoluhlu lwemisebenzi eyenzelwa iJIT. ingasetyenziswa (ifomati yendlela .to.module:funcname okanye path.to.module:ClassName.method_name). Uluhlu lwemisebenzi ekufuneka i-JIT yenziwe ukuba isebenze inokumiselwa ngokusekelwe kwiziphumo zeprofayili. Kwixesha elizayo, inkxaso yokuhlanganiswa kwe-JIT eguqukayo ilindeleke ngokusekelwe kuhlalutyo lwangaphakathi lokuphindaphinda kweefowuni zokusebenza, kodwa kuthathelwa ingqalelo iinkqubo ezicacileyo zokuqaliswa kwe-Instagram, ukuhlanganiswa kwe-JIT kukwafanelekile kwi-Facebook kwinqanaba lokuqala.

    I-JIT iguqulela kuqala i-Python bytecode ibe yinqanaba eliphezulu eliphakathi (HIR), elisondele ngokufanelekileyo kwi-Python bytecode, kodwa yenzelwe ukusebenzisa umatshini wenyani osekelwe kwirejista endaweni ye-stack-based one, kwaye isebenzisa ulwazi lohlobo kunye nokongezelelweyo. iinkcukacha ezibalulekileyo zokusebenza (ezifana nokubalwa kweereferensi) . I-HIR ke iguqulelwa kwifomu ye-SSA (i-static single assignment) kwaye ihamba ngamanyathelo okuphucula athathela ingqalelo iziphumo zokubala zereferensi kunye nedatha yokusetyenziswa kwememori. Ngenxa yoko, i-low-level intermediate representation (LIR) yenziwe, kufuphi nolwimi lwendibano. Emva kwesinye isigaba se-LIR-based optimizations, imiyalelo yendibano yenziwa kusetyenziswa ilayibrari ye-asmjit.

  • Imowudi engqongqo yeemodyuli. Ukusebenza kubandakanya amacandelo amathathu: Uhlobo lweModyuli eStrict. Umhlalutyi omileyo onokumisela ukuba ukuphunyezwa kwemodyuli akunampembelelo kwikhowudi ngaphandle kwaloo modyuli. Umlayishi wemodyuli omisela ukuba iimodyuli zikwimo engqongqo (ikhowudi ichaza "ukungenisa __ingqongqo__"), ijonga ukungabikho kweendlela zokuhlangana kunye nezinye iimodyuli, kwaye ilayisha iimodyuli ezingqongqo kwii-sys.modules njengento eStrictModule.
  • I-Static Python yi-bytecode compiler yovavanyo esebenzisa uhlobo lwe-annotations ukuvelisa uhlobo oluthile lwe-bytecode ehamba ngokukhawuleza ngokubulela kwi-JIT yokuhlanganiswa. Kwezinye iimvavanyo, ukudibanisa kwe-Static Python kunye ne-JIT kubonisa ukuphuculwa komsebenzi ukuya kumaxesha e-7 xa kuthelekiswa ne-CPython eqhelekileyo. Kwiimeko ezininzi, iziphumo ziqikelelwa ukuba zisondele ekusebenziseni i-MyPyC kunye ne-Cython compilers.

umthombo: opennet.ru

Yongeza izimvo