Facebook open sourced Cinder, foloko ya CPython yogwiritsidwa ntchito ndi Instagram

Facebook yatulutsa kachidindo ka Project Cinder, foloko ya CPython 3.8.5, kukhazikitsidwa kwakukulu kwa chilankhulo cha pulogalamu ya Python. Cinder imagwiritsidwa ntchito pakupanga kwa Facebook kuti ipangitse mphamvu pa Instagram ndipo imaphatikizapo kukhathamiritsa kuti igwire bwino ntchito.

Khodiyo imasindikizidwa kuti ikambirane za kuthekera kotengera kukhathamiritsa kokonzedwa ku chimango chachikulu cha CPython ndikuthandizira ma projekiti ena omwe akukhudzidwa pakuwongolera magwiridwe antchito a CPython. Facebook sichikufuna kuthandizira Cinder mu mawonekedwe a pulojekiti yotseguka yotseguka ndipo kachidindo kameneka kamagwiritsidwa ntchito m'mapangidwe a kampani, popanda kusakaniza ndi zolemba zina. Sayesanso kulimbikitsa Cinder ngati njira ina ya CPython - cholinga chachikulu cha chitukuko ndi chikhumbo chofuna kukonza CPython yokha.

Khodi ya Cinder imadziwika kuti ndiyodalirika komanso yoyesedwa m'malo opanga, koma ngati mavuto azindikirika, muyenera kuwathetsa nokha, popeza Facebook sichikutsimikizira kuti iyankha mauthenga olakwika akunja ndikukoka zopempha. Panthawi imodzimodziyo, Facebook sichimapatula mgwirizano wolimbikitsa ndi anthu ammudzi ndipo ndi wokonzeka kukambirana malingaliro a momwe angapangire Cinder mofulumira kapena momwe mungafulumizitse kusamutsidwa kwa kusintha kokonzekera ku gawo lalikulu la CPython.

Kukhathamiritsa kwakukulu komwe kumachitika mu Cinder:

  • Kusungitsa pamzere wa bytecode ("shadow bytecode"). Chofunikira cha njirayi ndikuzindikira nthawi zomwe opcode wamba amachitidwa kuti athe kukhathamiritsa, ndikusintha ma opcode oterowo ndi zosankha zapadera (mwachitsanzo, kusintha zomwe zimatchedwa ntchito).
  • Kufufuza mofunitsitsa kwa coroutine. Pama foni a async omwe amakonzedwa nthawi yomweyo (kudikirira sikubweretsa kudikirira ndipo ntchitoyo ifika pa mawu obwereza kale), zotsatira za ntchito zotere zimalowetsedwa mwachindunji popanda kupanga coroutine kapena kuphatikizira kuzungulira kwa zochitika. Mu code ya Facebook yomwe imagwiritsa ntchito kwambiri async / kudikira, kukhathamiritsa kumabweretsa kuthamanga kwa pafupifupi 5%.
  • Kusankha kwa JIT pamlingo wa njira ndi ntchito zamunthu payekha (njira-pa-nthawi). Kuthandizidwa kudzera pa "-X jit" njira kapena PYTHONJIT = 1 kusintha kwa chilengedwe ndikukulolani kuti mufulumizitse kuyesedwa kwa machitidwe ambiri ndi nthawi 1.5-4. Popeza kuphatikizika kwa JIT kumangogwira ntchito zomwe zimachitika pafupipafupi, sikoyenera kuzigwiritsa ntchito pazantchito zomwe sizimagwiritsidwa ntchito kawirikawiri, zomwe zimangowonjezera kutsitsa pulogalamuyo.

    Pogwiritsa ntchito “-X jit-list-file=/path/to/jitlist.txt” kapena kusintha kwa chilengedwe “PYTHONJITLISTFILE=/path/to/jitlist.txt” mutha kutchula fayilo yokhala ndi mndandanda wazinthu zomwe JIT angagwiritsidwe ntchito (mtundu wanjira .to.module:funcname kapena path.to.module:ClassName.method_name). Mndandanda wa ntchito zomwe JIT ikuyenera kuyatsidwa zitha kuzindikirika potengera zotsatira za mbiri yanu. M'tsogolomu, kuthandizira kuphatikizika kwa JIT kumayembekezeredwa kutengera kusanthula kwamkati kwanthawi yayitali yoyimba mafoni, koma poganizira zomwe zimayambira pa Instagram, kuphatikiza kwa JIT kulinso koyenera kwa Facebook poyambira.

    JIT imatembenuza Python bytecode kukhala choyimira chapakati chapamwamba (HIR), chomwe chili pafupi kwambiri ndi Python bytecode, koma idapangidwa kuti igwiritse ntchito makina owerengera owerengera m'malo mwa stack-based, komanso amagwiritsa ntchito zidziwitso zamtundu ndi zina. tsatanetsatane wofunikira kwambiri pantchito (monga kuwerengera) . HIR imasinthidwa kukhala mawonekedwe a SSA (static single assignment) ndikudutsa njira zokometsera zomwe zimatengera zotsatira zowerengera komanso kugwiritsa ntchito kukumbukira. Chotsatira chake, choyimira chochepa chapakati (LIR) chimapangidwa, pafupi ndi chinenero cha msonkhano. Pambuyo pa gawo lina la kukhathamiritsa kwa LIR, malangizo a msonkhano amapangidwa pogwiritsa ntchito laibulale ya asmjit.

  • Njira yolimba ya ma module. Ntchitoyi imaphatikizapo zigawo zitatu: Type StrictModule. static analyzer yomwe ingatsimikizire kuti kuchitidwa kwa module sikukukhudzani pama code kunja kwa gawolo. Chojambulira cha module chomwe chimatsimikizira kuti ma module ali okhwima (code imatchula "import __strict__"), imayang'ana kusowa kwa mphambano ndi ma modules ena, ndikuyika ma modules okhwima mu sys.modules monga chinthu cha StrictModule.
  • Static Python ndi makina oyesera a bytecode omwe amagwiritsa ntchito zomasulira zamtundu kuti apange bytecode yodziwika bwino yomwe imayenda mwachangu chifukwa cha JIT. M'mayeso ena, kuphatikiza kwa Static Python ndi JIT kukuwonetsa kusintha kwa magwiridwe antchito mpaka ka 7 poyerekeza ndi CPython wamba. Nthawi zambiri, zotsatira zake zimayerekezedwa kukhala pafupi ndi kugwiritsa ntchito makina a MyPyC ndi Cython.

Source: opennet.ru

Kuwonjezera ndemanga