Facebook yakavhurwa sourced Cinder, forogo yeCPython inoshandiswa ne Instagram

Facebook yakaburitsa kodhi kodhi yeProjekti Cinder, forogo yeCPython 3.8.5, iyo huru yekumisikidzwa kwePython programming mutauro. Cinder inoshandiswa muFacebook kugadzira zvivakwa kusimbisa Instagram uye inosanganisira optimizations yekuvandudza mashandiro.

Iyo kodhi inoburitswa kuti ikurukure mukana wekuendesa iyo yakagadzirirwa optimizations kune huru CPython chimiro uye kubatsira mamwe mapurojekiti anobatanidzwa mukuvandudza CPython kuita. Facebook haina chinangwa chekutsigira Cinder muchimiro cheyakavhurika sosi purojekiti uye iyo kodhi inounzwa muchimiro iyo inoshandiswa mukugadzirwa kwekambani, pasina kuwedzera combing uye zvinyorwa. Ivo zvakare havaedze kusimudzira Cinder seimwe nzira yeCPython - chinangwa chikuru chebudiriro chishuwo chekuvandudza CPython pachayo.

Iyo Cinder kodhi inozivikanwa seyakavimbika uye yakaedzwa munzvimbo dzekugadzira, asi kana matambudziko akaonekwa, iwe unofanirwa kuzvigadzirisa iwe pachako, sezvo Facebook isingavimbise kuti ichapindura kunze kwekukanganisa meseji uye kudhonza zvikumbiro. Panguva imwecheteyo, Facebook haibatanidzi kubatana kunovaka nenharaunda uye yakagadzirira kukurukura mazano ekuita Cinder kunyange nekukurumidza kana kuti kukurumidza kuendesa shanduko dzakagadzirirwa kuchikamu chikuru cheCPython.

Huru optimizations inoshandiswa muCinder:

  • Inline caching yebytecode ("mumvuri bytecode"). Chako cheiyo nzira ndechekuona mamiriro apo yakajairika opcode inoitwa iyo inogona kugadziridzwa, uye kutsiva zvine simba opcode yakadaro nekukurumidza nyanzvi sarudzo (semuenzaniso, kutsiva inowanzonzi mabasa).
  • Kuda coroutine kuongorora. Kune async basa mafoni anogadziriswa nekukasira (kumirira hakukonzeri kumirira uye basa rinosvika pachirevo chekudzoka kare), mhedzisiro yemabasa akadaro inotsiviwa zvakananga pasina kugadzira coroutine kana kubatanidza chiitiko loop. Mu Facebook kodhi iyo inoshandisa zvakanyanya async / kumirira, iyo optimization inoguma nekumhanyisa kweanosvika 5%.
  • Kusarudza JIT kuunganidza pamwero wenzira dzemunhu uye mabasa (method-at-a-time). Inogoneswa kuburikidza ne "-X jit" sarudzo kana iyo PYTHONJIT = 1 nharaunda inosiyana uye inobvumidza iwe kukurumidzira kuitwa kweakawanda maitiro ebvunzo ne1.5-4 nguva. Sezvo kuunganidzwa kweJIT kuchikoshera kumabasa anogara achiitwa, hazvikurudzirwe kuishandisa kune zvisingawanzo shandiswa mabasa, iyo yekuunganidza pamusoro wayo inogona chete kunonoka kuita chirongwa.

    Kuburikidza nesarudzo "-X jit-list-file=/path/to/jitlist.txt" kana shanduko yezvakatipoteredza "PYTHONJITLISTFILE=/path/to/jitlist.txt" unogona kudoma faira rine runyoro rwemabasa ayo JIT inogona kushandiswa (mafomati enzira .to.module:funcname kana path.to.module:ClassName.method_name). Rondedzero yemabasa ayo JIT inofanirwa kugoneswa anogona kutariswa zvichibva pane zvabuda. Mune ramangwana, tsigiro yesimba reJIT kuunganidzwa inotarisirwa zvichibva pakuongororwa kwemukati kweiyo frequency yebasa rekufona, asi tichifunga nezve chaiyo yekutangisa maitiro pa Instagram, JIT kuumbwa kwakakodzerawo Facebook padanho rekutanga.

    JIT inotanga kushandura Python bytecode kuita yakakwira-level yepakati inomiririra (HIR), iri padyo nePython bytecode, asi yakagadzirirwa kushandisa regist-based virtual muchina panzvimbo peiyo stack-based, uye zvakare inoshandisa ruzivo rwemhando uye kuwedzera. maitiro-akakosha ruzivo (senge referensi kuverenga) . Iyo HIR inozoshandurwa kuita SSA (static single assignment) fomu uye inopfuura nematanho ekugadzirisa ayo anotora muakaundi referensi kuverenga mhinduro uye ndangariro yekushandisa data. Nekuda kweizvozvo, iyo yakaderera-yepakati inomiririra (LIR) inogadzirwa, padyo nemutauro wegungano. Mushure mechimwe chikamu cheLIR-yakavakirwa optimizations, mirairo yegungano inogadzirwa uchishandisa asmjit raibhurari.

  • Strict mode yemamodule. Iko kushanda kunosanganisira zvinhu zvitatu: Type StrictModule. A static analyzer iyo inogona kuona kuti kuitiswa kwemodule hakuna kukanganisa kodhi kunze kweiyo module. A module loader inotarisa kuti ma modules ari muoti yakasimba (iyo kodhi inotsanangura "import __strict__"), inotarisa kusavapo kwemharadzano nemamwe ma module, uye inotakura yakasimba modules mu sys.modules seStrictModule chinhu.
  • Static Python ndeyekuedza bytecode compiler inoshandisa mhando zvirevo kugadzira mhando-chaiyo bytecode inomhanya nekukurumidza kutenda kuJIT kuunganidzwa. Mune mamwe maedzo, musanganiswa weStatic Python neJIT unoratidza kuvandudzwa kwemaitiro anosvika kanomwe kana zvichienzaniswa neyakajairwa CPython. Mune akawanda mamiriro, mhedzisiro inofungidzirwa kuve pedyo nekushandisa iyo MyPyC uye Cython compilers.

Source: opennet.ru

Voeg