Tha Facebook air an còd tĂšsail fhoillseachadh airson Project Cinder, forc de CPython 3.8.5, prĂŹomh bhuileachadh iomraidh cĂ nan prògramadh Python. Tha Cinder air a chleachdadh ann am bun-structar riochdachaidh Facebook gus cumhachd a thoirt do Instagram agus aâ toirt a-steach optimizations gus coileanadh a leasachadh.
Tha an còd air fhoillseachadh gus beachdachadh air comasachd na optimizations ullaichte a ghluasad gu prĂŹomh fhrèam CPython agus gus pròiseactan eile a chuideachadh a tha an sĂ s ann a bhith aâ leasachadh coileanadh CPython. Chan eil Facebook an dĂšil taic a thoirt dha Cinder ann an cruth pròiseact stòr fosgailte air leth agus tha an còd air a thaisbeanadh anns an fhoirm anns a bheil e air a chleachdadh ann am bun-structar na companaidh, gun chĂŹreadh agus sgrĂŹobhainnean a bharrachd. Chan eil iad cuideachd a 'feuchainn ri Cinder a bhrosnachadh mar roghainn eile an Ă ite CPython - is e am prĂŹomh amas leasachaidh am miann CPython fhèin a leasachadh.
Thathas aâ toirt fa-near gu bheil an còd Cinder gu ĂŹre mhath earbsach agus air a dhearbhadh ann an Ă rainneachdan cinneasachaidh, ach ma thèid duilgheadasan a chomharrachadh, feumaidh tu am fuasgladh leat fhèin, leis nach eil Facebook a âgealltainn gun freagair e teachdaireachdan mearachd bhon taobh a-muigh agus gun tarraing e iarrtasan. Aig an aon Ă m, chan eil Facebook aâ dĂšnadh a-mach co-obrachadh cuideachail leis aâ choimhearsnachd agus tha e deiseil airson beachdachadh air beachdan air mar a nĂŹ thu Cinder eadhon nas luaithe no mar as urrainn dhut gluasad atharrachaidhean ullaichte gu prĂŹomh phĂ irt CPython a luathachadh.
PrĂŹomh optimizations air an cur an gnĂŹomh ann an Cinder:
- Tasgadh in-loidhne de bytecode (âshadow bytecodeâ). Is e brĂŹgh an dòigh suidheachaidhean a chomharrachadh far a bheil còd op Ă bhaisteach air a chuir gu bĂ s a ghabhas Ăšrachadh, agus gus roghainnean sònraichte nas luaithe a chuir an Ă ite còd op mar sin (mar eisimpleir, cuir an Ă ite gnĂŹomhan ris an canar gu tric).
- Measadh coroutine èasgaidh. Airson gairmean gnĂŹomh async a tha air an giullachd sa bhad (chan eil feitheamh aâ leantainn gu feitheamh agus bidh an gnĂŹomh aâ ruighinn an aithris tilleadh nas trĂ ithe), tha toradh nan gnĂŹomhan sin air a chuir na Ă ite gu dĂŹreach gun a bhith aâ cruthachadh coroutine no aâ toirt a-steach lĂšb tachartais. Ann an còd Facebook a bhios gu mòr aâ cleachdadh async / aâ feitheamh, tha an optimization aâ leantainn gu astar timcheall air 5%.
- Cruinneachadh JIT roghnach aig ĂŹre dhòighean agus gnĂŹomhan fa leth (modh-aig-an-Ă m). Air a chomasachadh tron ââââroghainn â-X jitâ no an caochladair Ă rainneachd PYTHONJIT = 1 agus leigidh e leat coileanadh mòran de dheuchainnean coileanaidh a luathachadh le 1.5-4 tursan. Leis nach eil co-chruinneachadh JIT buntainneach ach airson gnĂŹomhan a tha air an cur an gnĂŹomh gu tric, chan eilear aâ moladh a chleachdadh airson gnĂŹomhan nach eilear aâ cleachdadh ach ainneamh, agus chan urrainn don chruinneachadh os a chionn ach coileanadh aâ phrògraim a lughdachadh.
Tron roghainn â-X jit-list-file=/path/to/jitlist.txtâ no an caochladair Ă rainneachd âPYTHONJITLISTFILE=/path/to/jitlist.txtâ faodaidh tu faidhle a shònrachadh le liosta de ghnĂŹomhan airson a bheil JIT faodar a chleachdadh (cruth slighe .to.module:funcname or path.to.module:ClassName.method_name). Faodar an liosta de ghnĂŹomhan airson am bu chòir JIT a bhith air a chomasachadh a dhearbhadh stèidhichte air toraidhean aâ phròifil. Anns an Ă m ri teachd, tha dĂšil ri taic airson cruinneachadh fiĂšghantach JIT stèidhichte air mion-sgrĂšdadh taobh a-staigh air tricead gairmean gnĂŹomh, ach a âtoirt aire do mhion-fhiosrachadh pròiseasan cur air bhog air Instagram, tha cruinneachadh JIT cuideachd freagarrach airson Facebook aig aâ chiad ĂŹre.
Bidh JIT an-toiseach ag atharrachadh Python bytecode gu riochdachadh eadar-mheadhanach Ă rd-ĂŹre (HIR), a tha gu math faisg air Python bytecode, ach air a dhealbhadh gus inneal brĂŹgheil stèidhichte air clĂ r a chleachdadh an Ă ite fear stèidhichte air stac, agus cuideachd aâ cleachdadh fiosrachadh seòrsa agus a bharrachd. mion-fhiosrachadh a tha deatamach airson coileanadh (leithid cunntadh iomraidh). Tha an HIR an uairsin air a thionndadh gu foirm SSA (sònrachadh singilte statach) agus aâ dol tro cheumannan optimization a bheir aire do thoraidhean cunntais iomraidh agus dĂ ta caitheamh cuimhne. Mar thoradh air an sin, tha riochdachadh eadar-mheadhanach aig ĂŹre ĂŹosal (LIR) air a chruthachadh, faisg air cĂ nan cruinneachaidh. Ăs deidh ĂŹre eile de optimizations stèidhichte air LIR, thèid stiĂšireadh cruinneachaidh a chruthachadh aâ cleachdadh an leabharlann asmjit.
- Modh teann airson modalan. Tha trĂŹ pĂ irtean anns an comas-gnĂŹomh: Type StrictModule. Mion-sgrĂšdaire statach as urrainn dearbhadh nach eil buaidh aig coileanadh modal air còd taobh a-muigh aâ mhodal sin. Bidh luchdan modal a cho-dhĂšineas gu bheil na modalan ann am modh teann (tha an còd aâ sònrachadh âin-mhalairt __strict__â), aâ sgrĂšdadh nach eil crois-rathaid ann le modalan eile, agus aâ luchdachadh mhodalan teann gu sys.modules mar nĂŹ StrictModule.
- Tha Static Python na inneal-cruinneachaidh bytecode deuchainneach a bhios aâ cleachdadh notaichean seòrsa gus bytecode sònraichte a ghineadh a ruitheas nas luaithe le taing do chruinneachadh JIT. Ann an cuid de dheuchainnean, tha an cothlamadh de Static Python agus JIT aâ nochdadh leasachaidhean coileanaidh suas ri 7 tursan an coimeas ri CPython Ă bhaisteach. Ann an iomadh suidheachadh, thathas aâ meas gu bheil na toraidhean faisg air a bhith aâ cleachdadh an luchd-cruinneachaidh MyPyC agus Cython.
Source: fosgailtenet.ru
