Facebook yethulwe muva nje ngeposi, kukhishwa ikhodi yomthombo yephrojekthi yeCinder, okuyi imfoloko yegatsha le-CPython kanye nokusetshenziswa okuyisethenjwa okuyinhloko kolimi lohlelo lwePython.
Cinder isetshenziswe kwingqalasizinda yokukhiqiza ye-Facebook ukunika amandla i-Instagram futhi kufaka phakathi ukuthuthukisa ukwenza ngcono ukusebenza. Le khodi isishicilelwe ukuxoxa ngamathuba okufuduka kokulungiselela okulungiselelwe kokujwayelekile kwe-CPython nokusiza amanye amaphrojekthi wokuthuthukisa ukusebenza kwe-CPython.
I-Facebook ibalula ukuthi ngeke isekele iCinder njengephrojekthi ehlukile yomthombo ovulekile futhi ikhodi yethulwa ngendlela esetshenziswa ngayo kwingqalasizinda yenkampani, ngaphandle kwemibhalo eyengeziwe.
UCinder akazikhuthazi njengenye indlela ye-CPython noma - inhloso enkulu yentuthuko ukuthuthukisa i-CPython uqobo.
Ikhodi yeCinders ibhekwa njengokuthembeka okunengqondo futhi ihlolwe ezindaweni zokukhiqiza, kepha uma izinkinga zikhonjwa, kuzodingeka zixazululwe zodwa, ngoba i-Facebook ayiqinisekisi ukuthi izophendula imiyalezo yephutha langaphandle bese udonsa izicelo.
Ngasikhathi sinye, i-Facebook ayikushiyi ngaphandle ukubambisana okwakhayo nomphakathi futhi ikulungele ukuxoxa ngemibono yokuthi ingenziwa kanjani iCinder ngokushesha okukhulu noma ukuthi ingasheshisa kanjani ukudluliswa kwezinguquko ezilungiselelwe ohlakeni oluyinhloko lwe-CPython.
Ukulungiswa okuyinhloko okusetshenziswe ku-Cinder yilokhu:
- Ukulondolozwa kwesikhashana kwe-Bytecode online: Ingqikithi yendlela ukukhomba izimo ezijwayelekile zokukhishwa kwe-opcode ezingalungiswa ngokunamandla bese zibuyisela leyo opcode ngezinketho ezikhethekile ezisheshayo.
- Ukuhlolwa njalo: Ngamakholi womsebenzi we-asynchronous acutshungulwa ngokushesha, umphumela waleyo misebenzi ubhalwe ngaphezulu ngqo ngaphandle kokwenza i-coroutine futhi ngaphandle kokufaka i-loop yomcimbi. Kwikhodi esetshenziswa yi-Facebook, eyisebenzisa kakhulu, ukwenza kahle kuholela ekusheshiseni okungaba ngu-5%.
- Ukuhlanganiswa okukhethiwe kwe-JIT ezingeni lezindlela nemisebenzi ngayinye: inikwe amandla inketho ye- "-X jit" noma ukuguquguquka kwemvelo kwePYTHONJIT = 1 futhi ivumela ukuhlolwa okuningi kokusebenza ukuthi kusheshiswe izikhathi eziyi-1,5 kuye kwezingu-4.
Uhlu lwemisebenzi okufanele i-JIT inikwe amandla lunganqunywa ngokuya ngemiphumela yephrofayili. Ngokuzayo, ukusekelwa kokuhlanganiswa okunamandla kwe-JIT okususelwa ekuhlaziyweni kwangaphakathi kwemvamisa yezingcingo ezilindelekile kulindelwe, kepha uma kubhekwa imininingwane yenqubo yokuqalisa ku-Instagram, ukuhlanganiswa kweJIT nakho kufanelekile kuFacebook esiteji sokuqala.
I-JIT iqala iguqule i-Python bytecode ibe isethulo esiphakathi (HIR) esisezingeni eliphakeme, esiseduze ngokufanele ne-bytecode yePython, kepha yakhelwe ukusebenzisa umshini obonakalayo osuselwa kwirekhodi kunomshini we-virtual based based in stack, futhi isebenzisa imininingwane yohlobo neminye imininingwane efanele ukusebenza. I-HIR ibuye iguqulwe ibe yifomu le-Static Single Allocation (SSA) bese idlulela ezigabeni zokwenza kahle ngokususelwa kunani lesethenjwa nedatha yokusebenzisa imemori. Ngenxa yalokhu, kwenziwa ukumelwa okuphakathi okuphakathi okuphakathi (LIR), okusondele kakhulu kulimi lomhlangano. - Imodi eqinile yamamojula:Ukusebenza kunezakhi ezintathu: Uhlobo lwe-StrictModule. Isihlaziyi esimile esikwazi ukunquma ukuthi ukwenziwa kwemodyuli akuthinti ikhodi engaphandle kwaleyo module.
- I-Static Python: isihlanganisi sokuhlola se-bytecode esisebenzisa izichasiselo zohlobo ukukhiqiza i-bytecode ecaciswe ohlotsheni ngalunye futhi isebenza ngokushesha ngokuhlanganiswa kwe-JIT. Kokunye ukuhlolwa, inhlanganisela ye-Static Python ne-JIT ikhombisa ukuthuthuka kokusebenza okungu-7x kune-CPython ejwayelekile. Ezimweni eziningi, imiphumela ihlolwe sengathi kusetshenziswe abahlanganisi be-MyPyC neCython.
Okokugcina uma unentshisekelo yokukwazi ukuthola ikhodi yeCinder noma ufunde kabanzi ngayo, ungaxhumana ne- imininingwane kusixhumanisi esilandelayo.