I-Facebook open sourced Cinder, imfoloko ye-CPython esetshenziswa yi-Instagram

I-Facebook ishicilele ikhodi yomthombo ye-Project Cinder, imfoloko ye-CPython 3.8.5, ukuqaliswa okuyisethenjwa okuyinhloko kolimi lohlelo lwePython. I-Cinder isetshenziswa kungqalasizinda yokukhiqiza ye-Facebook ukunika amandla i-Instagram futhi ihlanganisa nokwenza ngcono ukusebenza kahle.

Ikhodi ishicilelwe ukuze kuxoxwe ngamathuba okuthumela ukulungiselelwa okulungiselelwe kuhlaka oluyinhloko lwe-CPython nokusiza amanye amaphrojekthi abandakanyekayo ekuthuthukiseni ukusebenza kwe-CPython. I-Facebook ayihlosile ukusekela i-Cinder ngendlela yephrojekthi ehlukile yomthombo ovulekile futhi ikhodi yethulwa ngendlela esetshenziswa ngayo engqalasizinda yenkampani, ngaphandle kokuhlanganisa okwengeziwe kanye nemibhalo. Futhi abazami ukukhuthaza i-Cinder njengenye indlela ye-CPython - umgomo oyinhloko wentuthuko isifiso sokuthuthukisa i-CPython ngokwayo.

Ikhodi ye-Cinder ibhekwa njengethembekile futhi ihlolwe ezindaweni zokukhiqiza, kodwa uma izinkinga zikhonjwa, kuzodingeka uzixazulule ngokwakho, ngoba i-Facebook ayiqinisekisi ukuthi izophendula imilayezo yephutha yangaphandle kanye nezicelo zokudonsa. Ngesikhathi esifanayo, i-Facebook ayibandakanyi ukubambisana okwakhayo nomphakathi futhi isilungele ukuxoxa ngemibono yokuthi ungayenza kanjani i-Cinder ngokushesha noma indlela yokusheshisa ukudluliswa kwezinguquko ezilungiselelwe engxenyeni eyinhloko ye-CPython.

Ukulungiselelwa okuyinhloko okusetshenziswe ku-Cinder:

  • Ukulondoloza isikhashana okusemgqeni we-bytecode (“shadow bytecode”). Ingqikithi yendlela ukukhomba izimo lapho i-opcode evamile isetshenziswa khona engathuthukiswa, kanye nokushintsha ngokuguqukayo leyo opcode ngezinketho ezikhethekile ezisheshayo (isibonelo, ukushintsha okuvame ukubizwa ngokuthi imisebenzi).
  • Ukuhlolwa kwe-coroutine okulangazela. Kumakholi we-async acutshungulwa ngokushesha (ukulinda akubangeli ukulinda futhi umsebenzi ufinyelela isitatimende sokubuyisela ngaphambi kwesikhathi), umphumela walezo zenzo zishintshwa ngokuqondile ngaphandle kokudala i-coroutine noma okubandakanya iluphu yomcimbi. Kukhodi ye-Facebook esebenzisa kakhulu i-async/ait, ukwenza kahle kuphumela ekusheshiseni okungaba ngu-5%.
  • Ukuhlanganiswa kwe-JIT okukhethiwe ezingeni lezindlela ngazinye nemisebenzi (indlela-ngesikhathi). Inikwe amandla ngenketho ye-“-X jit” noma i-PYTHONJIT=1 imvelo eguquguqukayo futhi ikuvumela ukuthi usheshise ukwenziwa kokuhlolwa kokusebenza okuningi ngezikhathi ezingu-1.5-4. Njengoba ukuhlanganiswa kwe-JIT kusebenza kuphela emisebenzini eyenziwa njalo, akufanelekile ukuyisebenzisela imisebenzi engavamile ukusetshenziswa, isihloko sayo sokuhlanganiswa esinganciphisa kuphela ukwenziwa kohlelo.

    Ngenketho ethi “-X jit-list-file=/path/to/jitlist.txt” noma okuguquguqukayo kwemvelo “PYTHONJITLISTFILE=/path/to/jitlist.txt” ungacacisa ifayela elinohlu lwemisebenzi iJIT ingasetshenziswa (ifomethi yendlela .to.module:funcname noma path.to.module:ClassName.method_name). Uhlu lwemisebenzi okufanele i-JIT inikwe amandla inganqunywa ngokusekelwe emiphumeleni yephrofayela. Ngokuzayo, ukusekelwa kokuhlanganiswa kwe-JIT okuguquguqukayo kulindeleke ngokusekelwe ekuhlaziyweni kwangaphakathi kwemvamisa yezingcingo zomsebenzi, kodwa kucatshangelwa imininingwane yezinqubo zokuqalisa ku-Instagram, ukuhlanganiswa kwe-JIT nakho kulungele i-Facebook esigabeni sokuqala.

    I-JIT iqale iguqule i-Python bytecode ibe isethulo esiphakathi kwezinga eliphezulu (HIR), esiseduze ne-Python bytecode, kodwa yakhelwe ukusebenzisa umshini osuselwe kurejista esikhundleni sowosuselwe kusitaki, iphinde isebenzise ulwazi lohlobo nokunye okwengeziwe. imininingwane esemqoka yokusebenza (efana nokubalwa kwereferensi) . I-HIR ibe isiguqulelwa kufomu le-SSA (static single assignment) futhi idlulela ezinyathelweni zokuthuthukisa ezicabangela imiphumela yokubala yezithenjwa kanye nedatha yokusetshenziswa kwenkumbulo. Ngenxa yalokho, ukumelwa okuphakathi kwezinga eliphansi (LIR) kukhiqizwa, eduze nolimi lomhlangano. Ngemva kwesinye isigaba sokusebenzisa ngokugcwele okusekelwe ku-LIR, imiyalelo yokuhlanganisa ikhiqizwa kusetshenziswa umtapo wezincwadi we-asmjit.

  • Imodi eqinile yamamojula. Ukusebenza kuhlanganisa izingxenye ezintathu: Uhlobo lwe-StrictModule. Umhlaziyi omile onganquma ukuthi ukwenziwa kwemojuli akunawo umthelela kukhodi engaphandle kwaleyo mojula. Isilayishi semojula esinquma ukuthi amamojula akumodi eqinile (ikhodi icacisa “ngenisa __strict__”), ihlola ukungabikho kweziphambanomgwaqo namanye amamojula, futhi ilayisha amamojula aqinile kuma-sys.module njengento eStrictModule.
  • I-Static Python ingumhlanganisi we-bytecode wokuhlola esebenzisa izichasiselo zohlobo ukuze kukhiqizwe i-bytecode yohlobo oluthile egijima ngokushesha ngenxa yokuhlanganiswa kwe-JIT. Kwezinye izivivinyo, inhlanganisela ye-Static Python ne-JIT ibonisa ukuthuthukiswa kokusebenza okufika ezikhathini ezingu-7 uma kuqhathaniswa ne-CPython evamile. Ezimweni eziningi, imiphumela ilinganiselwa ukuthi iseduze nokusebenzisa i-MyPyC ne-Cython compilers.

Source: opennet.ru

Engeza amazwana