Resadresaka lehibe niaraka tamin'i Cliff Click, rain'ny JIT compilation ao Java

Resadresaka lehibe niaraka tamin'i Cliff Click, rain'ny JIT compilation ao JavaCliff Click - CTO an'ny Cratus (IoT sensors ho fanatsarana ny fizotrany), mpanorina sy mpiara-manorina ny fanombohana maromaro (anisan'izany ny Rocket Realtime School, Neurensic ary H2O.ai) miaraka amin'ny fivoahana mahomby. Cliff nanoratra ny compiler voalohany tamin'ny faha-15 taonany (Pascal ho an'ny TRS Z-80)! Izy no malaza indrindra amin'ny asany amin'ny C2 ao Java (ny Ranomasin'ny Nodes IR). Ity compiler ity dia nampiseho tamin'izao tontolo izao fa ny JIT dia afaka mamokatra kaody avo lenta, izay iray amin'ireo antony nahatonga an'i Java ho iray amin'ireo sehatra rindrambaiko maoderina lehibe indrindra. Avy eo i Cliff dia nanampy an'i Azul Systems hanangana rafitra fototra 864 miaraka amin'ny rindrambaiko Java madio izay manohana ny fiatoana GC amin'ny antontam-bato 500-gigabyte ao anatin'ny 10 milisegondra. Amin'ny ankapobeny dia nahavita niasa tamin'ny lafiny rehetra tamin'ny JVM i Cliff.

 
Ity habrapost ity dia resadresaka lehibe miaraka amin'i Cliff. Hiresaka momba ireto lohahevitra manaraka ireto isika:

  • Tetezamita ho amin'ny fanatsarana ambaratonga ambany
  • Ahoana no hanaovana refactoring lehibe
  • Modely vidiny
  • Fiofanana momba ny fanatsarana ambany
  • Ohatra azo ampiharina amin'ny fanatsarana ny fampisehoana
  • Nahoana no mamorona fiteny fandaharana manokana
  • Performance Engineer Career
  • Fanamby ara-teknika
  • Kely momba ny fisoratana anarana sy ny multi-cores
  • Ny fanamby lehibe indrindra amin'ny fiainana

Ny dinidinika dia ataon'ny:

  • Andrey Satarina avy amin'ny Amazon Web Services. Nandritra ny asany dia nahavita niasa tamin'ny tetikasa hafa tanteraka izy: nanandrana ny angon-drakitra nozaraina NewSQL tao Yandex, rafitra fanaraha-maso rahona ao amin'ny Kaspersky Lab, lalao Multiplayer ao amin'ny Mail.ru ary serivisy amin'ny kajy ny vidin'ny fifanakalozana vahiny ao amin'ny Deutsche Bank. Liana amin'ny fitsapana backend lehibe sy rafitra fizarana.
  • Vladimir Sitnikov avy amin'ny Netcracker. Folo taona niasana tamin'ny fampandehanana sy ny scalability an'ny NetCracker OS, rindrambaiko ampiasain'ny mpandraharahan'ny fifandraisan-davitra hanamarihana ny fizotran'ny fitantanana ny fitaovan'ny tambajotra sy ny tambajotra. Liana amin'ny olana momba ny fahombiazan'ny Java sy Oracle Database. Mpanoratra fanatsarana fampisehoana am-polony mahery ao amin'ny mpamily PostgreSQL JDBC ofisialy.

Tetezamita ho amin'ny fanatsarana ambaratonga ambany

Andrew: Anarana lehibe ianao eo amin'ny tontolon'ny JIT compilation, Java, ary asa fampisehoana amin'ny ankapobeny, sa tsy izany? 

harambato: Toy izany koa!

Andrew: Andeha isika hanomboka amin'ny fanontaniana ankapobeny momba ny asa fampisehoana. Ahoana ny hevitrao momba ny safidy eo amin'ny fanatsarana avo lenta sy ambany toy ny miasa amin'ny ambaratonga CPU?

harambato: Eny, tsotra ny zava-drehetra eto. Ny code haingana indrindra dia ilay tsy mandeha mihitsy. Noho izany, mila manomboka amin'ny ambaratonga avo foana ianao, miasa amin'ny algorithm. Ny mari-pamantarana O tsara kokoa dia handresy ny fanamarihana O ratsy kokoa, raha tsy misy fifantohana lehibe kokoa. Ny zavatra ambany dia mandeha farany. Amin'ny ankapobeny, raha efa nohatsarainao tsara ny ambiny amin'ny angonao ary mbola misy zavatra mahaliana tavela, dia ambany izany. Ahoana anefa no hanombohana amin'ny ambaratonga ambony? Ahoana no ahafantaranao fa ampy ny asa avo lenta vita? Eny... tsy azo atao. Tsy misy fomba fanamboarana efa vita. Mila mahatakatra ny olana ianao, manapa-kevitra izay hataonao (mba tsy hanao dingana tsy ilaina amin'ny ho avy) ary avy eo dia azonao atao ny manambara ny profiler, izay afaka milaza zavatra mahasoa. Amin'ny fotoana iray dia mahatsapa ianao fa efa nanala zavatra tsy ilaina ary tonga ny fotoana hanaovana fanitsiana tsara. Azo antoka fa karazana zavakanto manokana izany. Betsaka ny olona manao zavatra tsy ilaina, fa mandeha haingana dia haingana ka tsy manam-potoana hanahy momba ny famokarana. Mandra-pialan’ny fanontaniana mivaingana anefa izany. Matetika ny 99% amin'ny fotoana dia tsy misy miraharaha izay ataoko, mandra-pahatongan'ny fotoana izay misy zavatra manan-danja tonga eo amin'ny lalana mitsikera izay tsy misy miraharaha. Ary eto dia manomboka manorisory anao ny rehetra momba ny hoe "maninona no tsy mandeha tsara hatrany am-piandohana." Amin'ny ankapobeny, misy foana ny fanatsarana ny fampisehoana. Saingy ny 99% amin'ny fotoana dia tsy manana fitarihana ianao! Miezaka manao zavatra fotsiny ianao ary ao anatin'izany dia fantatrao izay zava-dehibe. Tsy ho fantatrao mihitsy aloha fa mila tonga lafatra io sombin-javatra io, ka raha ny marina dia tsy maintsy tonga lafatra amin'ny zava-drehetra ianao. Saingy tsy azo atao izany ary tsy ataonao izany. Betsaka foana ny zavatra tokony hamboarina - ary ara-dalàna tanteraka izany.

Ahoana no hanaovana refactoring lehibe

Andrew: Ahoana ny fomba fiasanao amin'ny fampisehoana iray? Olana mifamezivezy io. Ohatra, efa tsy maintsy niasa tamin'ny olana mipoitra avy amin'ny fihaonan'ny fiasa maro efa misy ve ianao?

harambato: Miezaka misoroka izany aho. Raha fantatro fa ho olana ny fampisehoana, dia mieritreritra an'izany aho alohan'ny hanombohako kaody, indrindra amin'ny rafitra data. Saingy matetika ianao no mahita izany rehetra izany any aoriana any. Ary avy eo dia tsy maintsy mandeha amin'ny fepetra faran'izay henjana ianao ary manao ilay antsoiko hoe "manoratra indray ary mandresy": mila maka ampahany lehibe ianao. Ny sasany amin'ireo kaody dia mbola tsy maintsy averina soratana noho ny olana momba ny fampisehoana na zavatra hafa. Na inona na inona antony hanoratana kaody, dia saika tsara kokoa foana ny mamerina manoratra ampahany lehibe kokoa noho ny ampahany kely. Amin'izao fotoana izao, manomboka mangovitra noho ny tahotra ny rehetra: "Andriamanitra ô, tsy afaka mikasika fehezan-dalàna be loatra ianao!" Saingy raha ny marina, io fomba fiasa io dia saika miasa tsara kokoa. Mila miatrika olana lehibe avy hatrany ianao, manaova faribolana lehibe manodidina azy ary lazao hoe: Hanoratra ny zava-drehetra ao anaty faribolana aho. Kely lavitra noho ny votoaty ao anatiny izay mila soloina ny sisin-tany. Ary raha toy izany delineation ny sisin-tany mamela anao hanao ny asa ao anatiny tanteraka, ny tananao malalaka, manao izay tianao. Raha vao azonao ny olana dia mora kokoa ny fizotran'ny fanoratana, koa miezaha mafy!
Amin'izay fotoana izay ihany koa, rehefa manao fanoratana lehibe ianao ary mahatsapa fa ho olana ny fampisehoana, dia afaka manomboka manahy momba izany avy hatrany ianao. Izany matetika dia mivadika ho zavatra tsotra toy ny "aza mandika data, mitantana angona araka izay azo atao, ataovy kely." Amin'ny fanoratana lehibe dia misy fomba mahazatra hanatsarana ny fampisehoana. Ary saika mihodinkodina amin'ny angon-drakitra foana izy ireo.

Modely vidiny

Andrew: Ao amin'ny iray amin'ireo podcasts niresaka momba ny vidin'ny modely amin'ny sehatry ny famokarana ianao. Azonao hazavaina ve ny tianao holazaina amin'izany?

harambato: Azo antoka. Teraka tamin'ny vanim-potoana iray izay tena zava-dehibe ny fahombiazan'ny processeur. Ary miverina indray ity vanim-potoana ity - tsy misy maneso ny anjara. Nanomboka niaina tamin'ny andron'ny milina valo aho; niasa tamin'ny 256 bytes ny solosainako voalohany. Tena bytes. Kely dia kely ny zava-drehetra. Tsy maintsy noisaina ny toromarika, ary rehefa nanomboka nandroso ny andian-teny fandaharana izahay, dia nitombo hatrany ny fiteny. Nisy ny Assembler, avy eo Basic, avy eo C, ary C nikarakara ny antsipiriany be dia be, toy ny fizarana rejisitra sy fifantenana fampianarana. Saingy mazava tsara ny zava-drehetra tao, ary raha nanao fanondro ho an'ny ohatra iray aho, dia hahazo entana aho, ary fantatra ny vidin'ity fampianarana ity. Mamokatra tsingerin'ny milina maromaro ny fitaovana, noho izany dia azo atao kajy ny hafainganam-pandehan'ny zavatra isan-karazany amin'ny alalan'ny fampitomboana ny toromarika rehetra izay hataonao. Ny fampitahana tsirairay / fitsapana / sampana / antso / entana / fivarotana dia azo ampiana ary lazaina hoe: izany no fotoana famonoana ho anao. Rehefa miasa amin'ny fanatsarana ny fampandehanana ianao, dia hitandrina tsara ny isa mifanaraka amin'ny tsingerina mafana kely. 
Saingy raha vao mifindra amin'ny Java, Python ary zavatra mitovy amin'izany ianao, dia miala haingana amin'ny fitaovana ambany. Ohatrinona ny vidin'ny fiantsoana getter amin'ny Java? Raha marina ny JIT amin'ny HotSpot inline, dia hivoaka izy io, fa raha tsy nanao izany izy dia ho antso an-tariby. Koa satria eo amin'ny loop mafana ny antso, dia hanongotra ny fanatsarana hafa rehetra ao amin'io loop io. Noho izany, ny tena vidiny dia ho ambony lavitra. Ary avy hatrany dia very ny fahafahana mijery sombin-kaody iray ianao ary mahatakatra fa tokony hanatanteraka izany isika amin'ny resaka hafainganam-pandehan'ny famantaranandro, fahatsiarovana ary cache ampiasaina. Izany rehetra izany dia lasa mahaliana ihany raha tena miditra amin'ny fampisehoana ianao.
Ankehitriny isika dia mahita ny tenantsika amin'ny toe-javatra iray izay zara raha nitombo ny hafainganam-pandehan'ny processeur nandritra ny folo taona. Niverina ny andro taloha! Tsy afaka miantehitra amin'ny fampisehoana tsara amin'ny kofehy tokana ianao. Saingy raha miditra amin'ny computing parallèle tampoka ianao, dia sarotra be izany, toa an'i James Bond ny fijerin'ny rehetra anao. Matetika ny fanafainganana avo folo heny eto no mitranga amin'ny toerana misy olona nanimba zavatra. Mitaky asa be ny concurrency. Mba hahazoana an'io hafainganam-pandeha XNUMXx io dia mila mahatakatra ny modely vidiny ianao. Inona ary ohatrinona ny vidiny? Ary mba hanaovana izany, mila mahatakatra ny fomba mifanaraka amin'ny fitaovana fototra ny lela.
Martin Thompson dia nisafidy teny lehibe ho an'ny bilaoginy Firaisana ara-mekanika! Ilainao ny mahatakatra hoe inona no hataon'ny fitaovana, ahoana marina no hanaovana azy, ary nahoana izy io no manao izany amin'ny voalohany. Amin'ny fampiasana an'io dia mora ny manomboka manisa toromarika sy mamantatra hoe aiza ny fotoana famonoana. Raha tsy manana fiofanana mifanaraka amin'izany ianao dia mitady saka mainty ao amin'ny efitrano maizina. Hitako ny olona manatsara ny fampandehanana amin'ny fotoana rehetra izay tsy mahafantatra izay helony. Mijaly mafy izy ireo ary tsy dia mandroso loatra. Ary rehefa maka kaody mitovy amin'izany aho, midira hacks kely roa ary mahazo hafainganam-pandeha dimy na folo heny, toy ny hoe: eny, tsy rariny izany, efa fantatray fa tsara kokoa ianao. Mahagaga. Inona no resahiko ... ny maodely vidiny dia momba ny karazana kaody soratanao sy ny hafainganam-pandehan'ny salan'isa amin'ny sary lehibe.

Andrew: Ary ahoana no ahafahanao mitazona feo toy izany ao an-dohanao? Moa ve izany dia tratra amin'ny traikefa bebe kokoa, sa? Avy aiza ny traikefa toy izany?

harambato: Eny, tsy nahazo ny traikefako tamin'ny fomba mora indrindra aho. Efa nanao fandaharana tao amin'ny Antenimieram-pirenena aho tamin'ny andro nahafahanareo nahatakatra ny fampianarana tsirairay. Toa adala izany, fa nanomboka teo dia nijanona tao an-dohako foana ny set fampianarana Z80, tao an-tsaiko. Tsy tadidiko ny anaran'ny olona tao anatin'ny iray minitra niresahana, fa tadidiko kosa ny kaody nosoratana 40 taona lasa izay. Mampihomehy fa toa syndrome"mpahay siansa adala".

Fiofanana momba ny fanatsarana ambany

Andrew: Misy fomba mora kokoa hidirana ve?

harambato: Eny ary tsia. Ny fitaovana ampiasaintsika rehetra dia tsy niova tanteraka rehefa nandeha ny fotoana. Mampiasa x86 ny rehetra, ankoatra ny finday Arm. Raha tsy manao karazana fametahana hardcore ianao dia manao toy izany koa. Okay, manaraka. Tsy niova koa ny toromarika nandritra ny taonjato maro. Mila mandeha manoratra zavatra ao amin'ny Assembly ianao. Tsy dia be loatra, fa ampy hanombohana ny fahazoana. Mitsiky ianao, fa tena matotra tanteraka aho. Mila mahatakatra ny fifandraisan'ny fiteny sy ny fitaovana ianao. Aorian'izay dia mila mandeha manoratra kely ianao ary manao compiler kilalao kely ho an'ny fiteny kilalao kely. Toy ny kilalao dia midika fa mila atao ao anatin'ny fotoana mety. Mety ho tena tsotra izany, saingy tsy maintsy mamorona torolàlana. Ny hetsika famoronana toromarika dia hanampy anao hahatakatra ny maodely vidin'ny tetezana eo anelanelan'ny kaody avo lenta izay soratan'ny tsirairay sy ny kaody milina mandeha amin'ny fitaovana. Ity taratasy ity dia hodorana ao amin'ny atidoha amin'ny fotoana hanoratana ny compiler. Na dia ny compiler tsotra indrindra. Aorian'izany dia afaka manomboka mijery an'i Java ianao ary ny zava-misy fa lalina kokoa ny hantsana semantika, ary sarotra kokoa ny manamboatra tetezana eo amboniny. Ao Java, sarotra kokoa ny mahatakatra na tsara na ratsy ny tetezanay, inona no hahatonga azy ho rava ary inona no tsy. Saingy mila karazana fiaingana izay hijerenao ny kaody ianao ary hahatakatra: "eny, ity mpikirakira ity dia tokony hapetraka isaky ny mandeha." Ary avy eo dia hita fa indraindray mitranga izany, afa-tsy ny toe-javatra rehefa lasa lehibe loatra ny fomba, ary ny JIT manomboka inlining ny zava-drehetra. Azo vinavinaina eo no ho eo ny zava-bitan'ireo toerana ireo. Matetika ny getters dia miasa tsara, fa avy eo dia mijery ireo tadivavarana mafana lehibe ianao ary mahatsapa fa misy antso an-tariby mitsinkafona eo izay tsy mahafantatra izay ataony. Izany no olana amin'ny fampiasana be dia be ny getter, ny antony tsy misy azy ireo dia satria tsy fantatra mazava na getter izy ireo. Raha manana fototra kaody faran'izay bitika ianao dia azonao atao ny mitadidy azy fotsiny ary avy eo miteny hoe: getter ity, ary setter ity. Ao amin'ny fototry ny code lehibe, ny asa tsirairay dia miaina ny tantarany manokana, izay, amin'ny ankapobeny, dia tsy fantatry ny olona. Milaza ny mpijery fa very 24% ny fotoana tamin'ny loop sasany ary mba hahatakarana ny zavatra ataon'ity loop ity dia mila mijery ny fiasa tsirairay ao anatiny. Tsy azo atao ny mahatakatra izany raha tsy mianatra ny asa, ary mampiadana ny fizotran'ny fahatakarana izany. zany no tsy mampiasa getter sy setter fa efa niveau vaovao aho!
Aiza no hahazoana ny modely vidiny? Eny ary, afaka mamaky zavatra ianao, mazava ho azy ... Fa heveriko fa ny fomba tsara indrindra dia ny mihetsika. Ny fanaovana compiler kely no fomba tsara indrindra hahatakarana ny vidin'ny modely ary hampifanaraka izany amin'ny lohanao. Ny compiler kely izay mety amin'ny fandaharana microwave dia asa ho an'ny vao manomboka. Eny, ny tiako holazaina, raha efa manana fahaiza-manao fandaharana ianao dia tokony ho ampy izany. Ireo zavatra rehetra ireo, toy ny fanaparitahana tady izay anananao ho karazana fanehoan-kevitra algebra, maka torolalana ho an'ny asa matematika avy ao amin'ny filaharana marina, maka ny sanda marina avy amin'ny rejisitra - izany rehetra izany dia atao indray mandeha. Ary rehefa manao izany ianao, dia hapetraka ao amin'ny atidohanao izany. Heveriko fa fantatry ny rehetra ny ataon'ny compiler. Ary izany dia hanome fahatakarana ny vidin'ny modely.

Ohatra azo ampiharina amin'ny fanatsarana ny fampisehoana

Andrew: Inona koa no tokony hojerenao rehefa miasa amin'ny famokarana?

harambato: Rafitra angona. Raha ny marina, eny, efa ela aho no tsy nampianatra ireo kilasy ireo ... Sekoly rocket. Nahafinaritra ilay izy, nefa nitaky ezaka be, ary manana fiainana koa aho! OK. Noho izany, ao amin'ny iray amin'ireo kilasy lehibe sy mahaliana, "Aiza no alehan'ny zava-bitanao," dia nanome ohatra ho an'ny mpianatra aho: roa sy sasany gigabytes ny angon-drakitra fintech dia novakiana tamin'ny rakitra CSV ary avy eo dia tsy maintsy nanao kajy ny isan'ny vokatra amidy. . Angon-drakitra momba ny tsenam-barotra tsy tapaka. Ny fonosana UDP dia niova ho endrika lahatsoratra hatramin'ny taona 70. Chicago Mercantile Exchange - karazan-javatra rehetra toy ny dibera, katsaka, soja, zavatra toy izany. Ilaina ny manisa ireo vokatra ireo, ny isan'ny varotra, ny salan'isan'ny fivezivezen'ny vola sy ny entana, sns. Tena tsotra ny matematika ara-barotra: tadiavo ny kaody vokatra (karazana 1-2 eo amin'ny latabatra hash), alao ny vola, ampio amin'ny iray amin'ireo andiana varotra, ampio volume, ampio sanda ary zavatra roa hafa. Matematika tena tsotra. Ny fampiharana kilalao dia tena tsotra: ny zava-drehetra dia ao anaty rakitra iray, namaky ny rakitra aho ary nivezivezy teo, mizara ny firaketana tsirairay amin'ny tady Java, mitady ny zavatra ilaina ao anatiny ary manampy azy ireo araka ny matematika voalaza etsy ambony. Ary miasa amin'ny hafainganam-pandeha ambany.

Miaraka amin'io fomba fiasa io, mazava ho azy ny zava-mitranga, ary tsy hanampy ny computing parallèle, sa tsy izany? Hita fa ny fampiakarana avo dimy heny amin'ny zava-bita dia azo tanterahina amin'ny alalan'ny fisafidianana ireo rafitra angon-drakitra marina. Ary na dia ireo programer za-draharaha aza dia mahagaga izany! Amin'ny tranga manokana, ny fika dia ny tsy tokony hanaovanao fitadidiana ao anaty loop mafana. Eny, tsy izany no fahamarinana manontolo, fa amin'ny ankapobeny - tsy tokony hanasongadina ny "indray mandeha amin'ny X" ianao rehefa lehibe ny X. Rehefa roa sy sasany gigabytes ny X, dia tsy tokony hizara zavatra “indray mandeha isaky ny litera” ianao, na “indray mandeha isaky ny andalana”, na “indray mandeha isaky ny saha”, zavatra toy izany. Eto no mandany ny fotoana. Ahoana no fiasan'izany? Alao sary an-tsaina hoe miantso aho String.split() na BufferedReader.readLine(). Readline manao tady avy amin'ny andian-byte izay tonga teo amin'ny tambajotra, indray mandeha isaky ny andalana, isaky ny andalana an-jatony tapitrisa. Raisiko ity andalana ity, vakio ary ariana. Nahoana aho no manary azy - eny, efa nokarakaraiko, izay ihany. Noho izany, isaky ny byte vakiana avy amin'ireo 2.7G ireo dia hisy tarehin-tsoratra roa hosoratana amin'ny tsipika, izany hoe efa 5.4G, ary tsy mila azy ireo intsony aho, ka ariana. Raha mijery ny bandwidth fahatsiarovana, dia mitondra 2.7G izay mandeha amin'ny fitadidiana sy ny fitadidiana fiara fitateram-bahoaka ao amin'ny processeur, ary avy eo dia avo roa heny ny alefa any amin'ny tsipika mandry ao amin'ny fahatsiarovana, ary izany rehetra izany dia frayed rehefa tsipika vaovao tsirairay noforonina. Saingy mila mamaky azy aho, mamaky azy ny fitaovana, na dia simba aza ny zava-drehetra any aoriana. Ary tsy maintsy manoratra izany aho satria namorona tsipika aho ary feno ny cache - tsy afaka mandray 2.7G ny cache. Noho izany, isaky ny byte novakiako dia namaky roa hafa aho ary manoratra bita roa fanampiny, ary amin'ny farany dia manana 4: 1 ratio - amin'ity tahan'ny ity dia mandany bandwidth fahatsiarovana. Ary dia hita fa raha manao izany aho String.split() – Tsy izao no fotoana farany nanaovako an’io, mety hisy saha 6-7 hafa ao anatiny. Noho izany, ny kaody mahazatra amin'ny famakiana CSV ary avy eo ny fanaparitahana ny tady dia miteraka fandaniam-pahatsiarovana manodidina ny 14: 1 mifandraika amin'ny zavatra tena tianao hananana. Raha arianao ireo safidy ireo, dia afaka mahazo hafainganam-pandeha avo dimy heny ianao.

Ary tsy dia sarotra izany. Raha mijery ny kaody amin'ny zoro havanana ianao, dia lasa tsotra daholo izany rehefa fantatrao ny olana. Tsy tokony hijanona amin'ny fametrahana fahatsiarovana tanteraka ianao: ny hany olana dia ny hoe manolotra zavatra ianao ary maty avy hatrany, ary eny an-dalana dia mandoro loharano manan-danja, izay amin'ity tranga ity dia bandwidth fahatsiarovana. Ary izany rehetra izany dia miteraka fihenan'ny vokatra. Amin'ny x86 matetika dia mila mandoro ny tsingerin'ny processeur ianao, fa eto nodoranao ny fahatsiarovana rehetra taloha kokoa. Ny vahaolana dia ny fampihenana ny habetsaky ny fivoahana. 
Ny ampahany hafa amin'ny olana dia raha mihazakazaka ny profiler ianao rehefa lany ny tady fahatsiarovana, rehefa mitranga izany, dia matetika ianao no miandry ny fiverenan'ny cache satria feno fako vao novokarinao, ireo andalana rehetra ireo. Noho izany, ny entana rehetra na ny fivarotana dia lasa miadana, satria mitarika ho amin'ny tsy fahampian'ny cache - ny cache manontolo dia lasa miadana, miandry ny fako handao azy. Noho izany, ny profiler dia hampiseho fotsiny ny feo mafana kisendrasendra mihosotra manerana ny loop manontolo - tsy hisy fampianarana mafana misaraka na toerana ao amin'ny fehezan-dalàna. Rivotra ihany. Ary raha mijery ny tsingerin'ny GC ianao dia Tanora Tanora avokoa ary haingana be - microseconds na milliseconds maximum. Maty teo no ho eo izany fahatsiarovana izany. Manokana gigabytes an'arivony tapitrisa ianao, ary manapaka azy ireo izy, ary manapaka azy ireo, ary manapaka azy ireo indray. Izany rehetra izany dia mitranga haingana dia haingana. Hita fa misy tsingerina GC mora, tabataba mafana mandritra ny tsingerina iray manontolo, saingy te-hahazo hafainganam-pandeha 5x izahay. Amin'izao fotoana izao, misy zavatra tokony hanidy ao an-dohanao sy haneno: "Nahoana ity?!" Tsy hita ao amin'ny debugger mahazatra ny fihoaran'ny fitadidiana; mila mampandeha ny debugger counter performance amin'ny hardware ianao ary mijery azy mivantana sy mivantana. Saingy tsy azo ahiana mivantana amin'ireo soritr'aretina telo ireo izany. Ny soritr'aretina fahatelo dia rehefa mijery ny zavatra asongadinao ianao, anontanio ilay mpanao profiler, dia namaly izy hoe: "Nanao andalana iray lavitrisa ianao, fa niasa maimaim-poana ny GC." Raha vao mitranga izany dia tsapanao fa namorona zavatra be loatra ianao ary nandoro ny lalan'ny fahatsiarovana manontolo. Misy fomba hamantarana izany, fa tsy mazava. 

Ny olana dia eo amin'ny firafitry ny angon-drakitra: ny rafitra miboridana ao ambadiky ny zava-mitranga rehetra, lehibe loatra izy io, 2.7G amin'ny kapila, ka ny fanaovana dika mitovy amin'ity zavatra ity dia tena tsy ilaina - te hampiditra azy avy hatrany amin'ny buffer byte network ianao. ao amin'ny rejisitra, mba tsy hamaky-manoratra ho an'ny andalana miverina sy miverina in-dimy. Indrisy anefa fa tsy manome anao tranomboky toy izany ny Java ho ampahany amin'ny JDK amin'ny alàlan'ny default. Tsy misy dikany anefa izany, sa tsy izany? Amin'ny ankapobeny, ireo dia andalana 5-10 kaody izay hampiasaina amin'ny fampiharana ny mpitaingin-tsoavaly misy anao manokana, izay mamerina ny fitondran-tenan'ny kilasin'ny tady, raha toa ka fonosina manodidina ny buffer byte fototra. Vokatr'izany dia hita fa miasa toy ny tady ianao, fa raha ny marina dia mihetsiketsika any ny tondro ho an'ny buffer, ary ny bytes manta dia tsy adika na aiza na aiza, ary noho izany ireo buffers ireo dia ampiasaina hatrany hatrany, ary faly ny rafitra fiasana mandray ny tenanao amin'ireo zavatra nanamboarana azy, toy ny fanafenana indroa miafina amin'ireo buffers byte ireo, ary tsy mihodinkodina amin'ny angon-drakitra tsy ilaina intsony ianao. Raha ny tokony ho izy, azonao ve fa rehefa miara-miasa amin'ny GC dia azo antoka fa tsy ho hitan'ny processeur ny fizarana fahatsiarovana tsirairay aorian'ny tsingerin'ny GC farany? Noho izany, izany rehetra izany dia tsy mety ho ao amin'ny cache, ary avy eo dia misy 100% azo antoka diso. Rehefa miasa miaraka amin'ny tondro, amin'ny x86, ny fanesorana ny rejisitra avy amin'ny fitadidiana dia maka 1-2 tsingerin'ny famantaranandro, ary raha vao mitranga izany dia mandoa, mandoa, mandoa, satria ny fahatsiarovana dia mandeha. Sivy caches – ary izany no vidin'ny fizarana fahatsiarovana. Tena sanda.

Raha lazaina amin'ny teny hafa, ny rafitra angon-drakitra no zavatra sarotra indrindra ovaina. Ary rehefa tsapanao fa nisafidy ny rafitra angon-drakitra diso izay hamono ny fampisehoana ianao any aoriana, matetika dia misy asa be atao, fa raha tsy manao izany ianao dia hiharatsy ny toe-javatra. Voalohany indrindra, mila mieritreritra momba ny rafitra angon-drakitra ianao, zava-dehibe izany. Ny sarany lehibe eto dia mianjera amin'ny rafitry ny angon-drakitra matavy, izay manomboka ampiasaina amin'ny fomba "Nandika ny rafitra angon-drakitra X ho amin'ny rafitra data Y satria tiako kokoa ny endriky ny Y." Saingy ny fampandehanana kopia (izay toa mora) dia mandany ny bandwidth fahatsiarovana ary eo no nandevenana ny fotoana famonoana rehetra very. Raha manana tady JSON goavam-be aho ary te hanova azy ho hazo DOM misy POJO na zavatra hafa, ny fiasan'ny fanaparitahana an'io tady io sy ny fananganana ny POJO, ary ny fidirana amin'ny POJO indray any aoriana, dia hiteraka vidiny tsy ilaina - izany tsy mora. Afa-tsy raha mihazakazaka manodidina ny POJO ianao matetika kokoa noho ny mihazakazaka manodidina ny tady. Etsy ankilany, azonao atao kosa ny manandrana manapaka ny tady ary manala izay ilainao avy eo, nefa tsy mamadika azy ho POJO. Raha mitranga izany rehetra izany amin'ny lalana iray izay itakiana ny fampisehoana ambony indrindra, tsy misy POJO ho anao, mila midina mivantana amin'ny tsipika ianao.

Nahoana no mamorona fiteny fandaharana manokana

Andrew: Nilaza ianao fa raha te hahalala ny maodely momba ny vidiny dia mila manoratra ny fiteninao manokana ianao...

harambato: Tsy fiteny fa mpanangona. Zavatra roa samy hafa ny fiteny sy ny compiler. Ny fahasamihafana lehibe indrindra dia eo amin'ny lohanao. 

Andrew: Raha ny fahalalako azy dia manao andrana amin'ny famoronana ny fiteninao manokana ianao. Hatao inona?

harambato: Satria afaka aho! Efa misotro ronono aho, ka ity no fialamboliko. Efa nampihatra ny fitenin'ny hafa aho nandritra ny androm-piainako. Niasa be ihany koa aho tamin'ny fomba fanaovana coding. Ary koa satria mahita olana amin'ny fiteny hafa aho. Hitako fa misy fomba tsara kokoa hanaovana zavatra mahazatra. Ary hampiasa azy ireo aho. Leo fotsiny aho mahita olana ao amin'ny tenako, amin'ny Java, amin'ny Python, amin'ny fiteny hafa. Manoratra ao amin'ny React Native, JavaScript ary Elm aho izao ho fialamboly izay tsy momba ny fisotroan-dronono, fa momba ny asa mavitrika. Manoratra amin'ny Python ihany koa aho ary, azo inoana fa hanohy hiasa amin'ny fianarana milina ho an'ny backends Java. Betsaka ny fiteny malaza ary manana endri-javatra mahaliana izy rehetra. Samy tsara amin'ny fombany ny tsirairay ary azonao atao ny manandrana mampitambatra ireo endri-javatra rehetra ireo. Noho izany, mianatra zavatra mahaliana ahy aho, ny fitondran-tena amin'ny fiteny, miezaka mamorona semantika mitombina. Ary hatramin'izao dia tafita aho! Amin'izao fotoana izao aho dia miady amin'ny semantika fitadidiana, satria tiako ny hanana azy toy ny ao amin'ny C sy Java, ary hahazo modely fahatsiarovana matanjaka sy semantika fahatsiarovana ho an'ny entana sy fivarotana. Amin'izany fotoana izany, manana inference karazana automatique toy ny ao amin'ny Haskell. Eto aho dia manandrana mampifangaro karazana karazana Haskell miaraka amin'ny asa fitadidiana amin'ny C sy Java. Izany no nataoko nandritra ny 2-3 volana farany, ohatra.

Andrew: Raha manorina fiteny izay maka lafiny tsara kokoa amin'ny fiteny hafa ianao, heverinao ve fa hisy hanao ny mifanohitra amin'izany: raiso ny hevitrao ary ampiasao?

harambato: Toy izao mihitsy ny fisehon'ireo fiteny vaovao! Nahoana no mitovy amin'ny C ny Java? Satria manana fehezanteny tsara azon'ny rehetra i C ary nahazo aingam-panahy tamin'ity fehezanteny ity i Java, nampiana fiarovana karazana, fanamarinana fetran'ny array, GC, ary nanatsara zavatra sasany avy amin'ny C ihany koa izy ireo. Saingy tena nahazo aingam-panahy izy ireo, sa tsy izany? Mijoro eo an-tsorok'ireo goavam-be izay tonga teo alohanao ny rehetra - izany no fivoarana.

Andrew: Raha ny fahazoako azy dia ho azo antoka ny fiteninao. Efa nieritreritra ny hampihatra zavatra toy ny mpindram-bola avy amin'i Rust ve ianao? Efa nijery azy ve ianao, ahoana ny hevitrao momba azy?

harambato: Eny, nanoratra C nandritra ny taona maro aho, miaraka amin'ireo malloc rehetra ireo ary maimaim-poana, ary mitantana ny androm-piainany. Fantatrao fa ny 90-95% amin'ny androm-piainan'ny tanana dia manana rafitra mitovy. Ary tena maharary tokoa ny manao izany amin'ny tanana. Tiako ny mpamoron-kira mba hilaza aminao tsotra izao ny zava-mitranga any sy ny zava-bitanao tamin'ny fihetsikao. Amin'ny zavatra sasany, ny mpindram-bola dia manao izany ivelan'ny boaty. Ary tokony hampiseho ho azy ny fampahalalana, hahatakatra ny zava-drehetra, ary tsy hanavesatra ahy akory ny fanolorana izany fahatakarana izany. Tsy maintsy manao famakafakana fandosirana eo an-toerana farafaharatsiny, ary raha tsy mahomby izany, dia mila ampiana fanamarihana karazana izay mamaritra ny androm-piainany - ary ny tetika toy izany dia sarotra kokoa noho ny mpindram-bola, na ny mpitsikilo fahatsiarovana efa misy. Ny safidy eo amin'ny "tsara ny zava-drehetra" sy ny "Tsy azoko na inona na inona" - tsia, tsy maintsy misy zavatra tsara kokoa. 
Noho izany, amin'ny maha-olona nanoratra kaody be dia be amin'ny C, heveriko fa ny fananana fanohanana ny fanaraha-maso mandritra ny androm-piainana mandeha ho azy no zava-dehibe indrindra. Leo ihany koa aho amin'ny habetsahan'ny Java mampiasa fahatsiarovana ary ny fitarainana lehibe dia ny GC. Rehefa mizara fahatsiarovana amin'ny Java ianao dia tsy haverinao ny fahatsiarovana teo an-toerana tamin'ny tsingerin'ny GC farany. Tsy izany no mitranga amin'ny fiteny manana fitantanana fitadidiana mazava kokoa. Raha miantso malloc ianao dia mahazo avy hatrany ny fahatsiarovana izay vao nampiasaina. Matetika ianao no manao zavatra vonjimaika miaraka amin'ny fitadidiana ary mamerina izany avy hatrany. Ary miverina avy hatrany any amin'ny dobo malloc, ary ny tsingerina malloc manaraka dia mamoaka azy indray. Noho izany, ny fampiasana fitadidiana tena izy dia mihena amin'ny fitambaran'ny zavamananaina amin'ny fotoana iray, miampy ny fivoahana. Ary raha tsy mitete amin'ny fomba tsy mendrika tanteraka ny zava-drehetra, ny ankamaroan'ny fahatsiarovana dia miafara amin'ny cache sy ny processeur, ary miasa haingana. Saingy mitaky fitantanana fitadidiana tanana be dia be miaraka amin'ny malloc ary maimaim-poana antsoina amin'ny filaharana marina, amin'ny toerana mety. Ny harafesina dia afaka mitantana azy irery, ary amin'ny toe-javatra maro dia manome fampisehoana tsara kokoa, satria ny fanjifana fahatsiarovana dia tery amin'ny kajy ankehitriny fotsiny - mifanohitra amin'ny fiandrasana ny tsingerin'ny GC manaraka hanafaka ny fitadidiana. Vokatr'izany dia nahazo fomba tena mahaliana izahay hanatsarana ny fampisehoana. Ary tena mahery vaika - ny tiako holazaina dia nanao zavatra toy izany aho tamin'ny fanodinana angon-drakitra ho an'ny fintech, ary izany dia nahafahako nahazo haingana in-dimy teo ho eo. Fisondrotana lehibe tokoa izany, indrindra amin'ny tontolo iray izay tsy mihamitombo ny processeur ary mbola miandry fanatsarana isika.

Performance Engineer Career

Andrew: Mba te hanontany ny manodidina ihany koa aho momba ny asa amin'ny ankapobeny. Nanjary nalaza ianao tamin'ny asa JIT tao amin'ny HotSpot ary avy eo nifindra tany Azul, izay orinasa JVM ihany koa. Saingy efa niasa bebe kokoa momba ny hardware izahay fa tsy ny rindrambaiko. Ary avy eo dia nivadika tampoka tamin'ny Big Data sy Machine Learning izy ireo, ary avy eo tamin'ny fitadiavana hosoka. Ahoana no nahatonga izany? Tena samy hafa ireo sehatra fampandrosoana ireo.

harambato: Efa ela aho no nanao fandaharana ary nahavita nianatra kilasy maro samihafa. Ary rehefa miteny ny olona hoe: "oh, ianao no nanao JIT ho an'ny Java!", dia mampihomehy foana. Saingy talohan'izay dia niasa tamin'ny klone PostScript aho - ilay fiteny nampiasain'i Apple tamin'ny mpanonta laser azy. Ary talohan'izay dia nanao fampiharana ny fiteny Forth aho. Heveriko fa lohahevitra iraisana ho ahy ny fampivoarana fitaovana. Nandritra ny androm-piainako dia nanao fitaovana hanoratana ny fandaharan'asany mahafinaritra aho. Fa izaho koa dia nandray anjara tamin'ny fampandrosoana ny rafitra miasa, ny mpamily, ny kernel-level debuggers, ny fiteny ho an'ny OS fampandrosoana, izay nanomboka tsy misy dikany, fa rehefa mandeha ny fotoana dia nanjary sarotra kokoa. Fa ny tena lohahevitra dia ny fampandrosoana ny fitaovana. Nisy ampahany lehibe tamin'ny fiainako nandalo teo anelanelan'i Azul sy Masoandro, ary momba an'i Java izany. Saingy rehefa niditra tao amin'ny Big Data and Machine Learning aho, dia namerina ny satroko tsara tarehy aho ary niteny hoe: "Oh, manana olana tsy dia misy dikany isika izao, ary misy zavatra mahaliana be dia be ary manao zavatra ny olona." Lalana fampandrosoana lehibe tokony hizorana izany.

Eny, tena tiako ny computing distributed. Ny asako voalohany dia tamin'ny maha-mpianatra tao amin'ny C, tamin'ny tetikasa dokambarotra. Ity dia informatika nozaraina tamin'ny chips Zilog Z80 izay nanangona angon-drakitra ho an'ny OCR analog, novokarin'ny analyzer tena izy. Lohahevitra mangatsiatsiaka sy adala tanteraka ilay izy. Saingy nisy ny olana, ny ampahany sasany dia tsy fantatra tsara, noho izany dia tsy maintsy naka sary ianao ary asehoy amin'ny olona iray izay efa afaka namaky ny masony sy nitatitra izay voalaza, ary noho izany dia nisy asa misy angon-drakitra, ary ireo asa ireo. nanana ny fiteniny . Nisy ny backend izay nikarakara an'izany rehetra izany - Z80s mihazakazaka miaraka amin'ny terminal vt100 mandeha - iray isaky ny olona, ​​ary nisy modely fandaharana parallèle amin'ny Z80. Sombim-pahatsiarovana mahazatra zarain'ny Z80 rehetra ao anatin'ny kintana iray; Nozaraina ihany koa ny backplane, ary ny antsasaky ny RAM dia nozaraina tao anatin'ny tambajotra, ary ny antsasany hafa dia tsy miankina na nandeha tamin'ny zavatra hafa. Rafitra fizarana parallèle misy dikany miaraka amin'ny fahatsiarovana zaraina... semi-zara. Oviana izany ... tsy tadidiko akory, tany ho any amin'ny tapaky ny taona 80. Efa ela be. 
Eny, andao atao hoe efa ela be ny 30 taona. Efa nisy hatry ny ela ny olana mifandraika amin'ny informatika zaraina, efa ela no niady tamin'ny olona. Beowulf- cluster. Ny cluster toy izany dia toa ... Ohatra: misy Ethernet ary ny x86 haingana anao dia mifandray amin'ity Ethernet ity, ary ankehitriny ianao te-hahazo fahatsiarovana zaraina sandoka, satria tsy misy olona afaka manao coding computing distributed tamin'izany, sarotra loatra izany ary noho izany dia misy. dia fahatsiarovana zaraina sandoka miaraka amin'ny pejy fitadidiana fiarovana amin'ny x86, ary raha manoratra amin'ity pejy ity ianao, dia nilaza tamin'ny processeur hafa izahay fa raha miditra amin'ny fitadidiana mitovy izy ireo, dia mila alaina avy aminao izany, ary toy ny protocole ho fanohanana. Nipoitra ny firindran'ny cache sy ny rindrambaiko ho an'izany. Hevitra mahaliana. Ny tena olana, mazava ho azy, dia zavatra hafa. Nahomby izany rehetra izany, saingy nahazo olana haingana ianao, satria tsy nisy nahatakatra ny modely amin'ny fampisehoana amin'ny ambaratonga tsara - inona ny lamina fidirana fahatsiarovana tao, ny fomba hahazoana antoka fa tsy nifandona tsy misy farany ny nodes, sy ny sisa.

Ny zavatra hitako tao amin'ny H2O dia ny developer mihitsy no tompon'andraikitra amin'ny famaritana hoe aiza ny parallèle miafina ary aiza no tsy misy. Nahita modely coding aho izay nahatonga ny fanoratana kaody mahomby sy tsotra. Sarotra anefa ny fanoratana kaody miadana, ho ratsy izany. Mila miezaka mafy manoratra code miadana ianao, tsy maintsy mampiasa fomba tsy manara-penitra. Ny code braking dia hita raha vao jerena. Vokatr'izany, matetika ianao dia manoratra kaody izay mihazakazaka haingana, saingy tsy maintsy fantatrao izay tokony hatao amin'ny trangan'ny fahatsiarovana iombonana. Izany rehetra izany dia mifamatotra amin'ny array lehibe ary ny fitondran-tena ao dia mitovy amin'ny array lehibe tsy miovaova amin'ny Java parallèle. Ny tiako holazaina dia alaivo sary an-tsaina hoe ny kofehy roa dia manoratra amin'ny array mifanitsy, ny iray amin'izy ireo dia mandresy, ary ny iray, araka izany, dia resy, ary tsy fantatrao hoe iza izany. Raha tsy miovaova izy ireo, dia mety ho izay tianao ny baiko - ary tena miasa tsara izany. Tena miahy ny filaharan'ny asa ny olona, ​​mametraka azy ireo amin'ny toerana mety, ary manantena olana amin'ny fampisehoana mifandraika amin'ny fitadidiana any amin'ny toerana mety. Raha tsy izany, dia hanoratra fehezan-dalàna amin'ny endrika tadivavarana manomboka amin'ny 1 ka hatramin'ny N izy ireo, izay misy N dia trillion sasany, amin'ny fanantenana fa ho tonga parallèle ny tranga sarotra rehetra - ary tsy mandeha any izany. Saingy amin'ny H2O dia tsy Java na Scala izany; azonao atao ny mihevitra azy io hoe "Java minus minus" raha tianao. Ity dia fomba fandaharana mazava tsara ary mitovy amin'ny fanoratana tsotra C na Java code misy tadivavarana sy array. Saingy amin'ny fotoana iray ihany, ny fitadidiana dia azo atao amin'ny terabytes. Mbola mampiasa H2O aho. Ampiasaiko tsindraindray amin'ny tetikasa samihafa - ary io no zavatra haingana indrindra, avo am-polony haingana kokoa noho ny mpifaninana aminy. Raha manao Big Data miaraka amin'ny angona tsanganana ianao dia sarotra be ny mandresy ny H2O.

Fanamby ara-teknika

Andrew: Inona no fanamby lehibe indrindra nataonao nandritra ny asanao manontolo?

harambato: Ny lafiny teknika sa tsy ara-teknika ve no resahina amin’ilay olana? Heveriko fa ny fanamby lehibe indrindra dia tsy ny olana ara-teknika. 
Raha ny fanamby ara-teknika. Resy tsotra izao izy ireo. Tsy fantatro akory hoe inona no lehibe indrindra, fa nisy ny sasany tena mahaliana izay naharitra ela, ady ara-tsaina. Rehefa nandeha tany amin'ny Masoandro aho, dia azoko antoka fa hanao compiler haingana aho, ary andiana zokiolona no namaly fa tsy hahomby mihitsy aho. Saingy nanaraka an'io lalana io aho, nanoratra compiler ho any amin'ny mpizara rejisitra, ary tena haingana izany. Haingana tahaka ny C1 maoderina izany, saingy niadana kokoa ny mpizara tamin'izany fotoana izany, ary rehefa nojerena dia olana lehibe momba ny firafitry ny angona. Nila izany aho hanoratana mpizara rejisitra an-tsary ary tsy azoko ny olana misy eo amin'ny fanehoana kaody sy ny hafainganam-pandeha, izay nisy tamin'izany vanim-potoana izany ary tena zava-dehibe. Hita fa ny firafitry ny angon-drakitra matetika dia mihoatra ny haben'ny cache amin'ny x86s tamin'izany fotoana izany, ary noho izany, raha noheveriko tany am-boalohany fa ny mpizara rejisitra dia hiasa 5-10 isan-jaton'ny fotoana jitter manontolo, dia raha ny marina dia lasa izy io. 50 isan-jato.

Rehefa nandeha ny fotoana dia lasa madio sy mahomby kokoa ny compiler, nitsahatra tamin'ny famoronana kaody mahatsiravina tamin'ny tranga maro kokoa, ary nanomboka nitovy tamin'ny zavatra vokarin'ny compiler C ny fampisehoana. . Raha manoratra kaody toa an'i C ianao dia hahazo fampisehoana toa an'i C amin'ny tranga maro kokoa. Ary arakaraky ny nandehananao, dia vao mainka nahazo kaody izay nifanindry tamin'ny ambaratonga C tsy misy soritr'aretina ianao, nanomboka ho toy ny zavatra feno ny mpizara rejisitra... na mandeha haingana na miadana ny kaodinao. Nanohy niasa tamin'ny mpizara aho mba hanao safidy tsara kokoa. Lasa miadana sy miadana kokoa izy, saingy nanome vokatra tsara kokoa sy tsara kokoa tamin'ny toe-javatra izay tsy nisy olon-kafa afaka hiatrika izany. Afaka niditra tao amin'ny mpizara rejisitra aho, nandevina asa iray volana tao, ary tampoka teo dia nanomboka nanatanteraka haingana 5% haingana ny code manontolo. Nitranga izany tsindraindray ary nanjary asa-kanto ny mpizara rejisitra - ny olon-drehetra dia tia azy io na nankahala azy, ary ny olona tao amin'ny akademia dia nametraka fanontaniana momba ny lohahevitra hoe "nahoana no atao toy izany ny zava-drehetra", nahoana no tsy scan tsipika, ary inona no mahasamihafa azy. Ny valiny dia mbola tsy miova: ny allocator mifototra amin'ny fandokoana grafika miampy ny asa tena mitandrina miaraka amin'ny buffer code dia mitovy amin'ny fitaovam-pandresena, ny fitambarana tsara indrindra tsy misy resy. Ary ity dia zavatra tsy dia mazava loatra. Ny zavatra hafa rehetra ataon'ny mpanangom-bokatra ao dia zavatra efa nodinihina tsara, na dia nentina tamin'ny sehatry ny zavakanto ihany koa aza. Nanao zavatra tokony hamadika ny compiler ho asa kanto foana aho. Saingy tsy nisy zavatra niavaka tamin'izany - afa-tsy ny mpizara rejisitra. Ny fitandremana dia ny fitandremana manapaka eo ambanin'ny enta-mavesatra ary, raha mitranga izany (afaka manazava amin'ny antsipiriany bebe kokoa aho raha liana), midika izany fa afaka miditra amin'ny fomba mahery vaika kokoa ianao, tsy misy atahorana ho lavo amin'ny kink amin'ny fandaharam-potoana. Tamin'izany andro izany, nisy andiana mpanangom-bokatra feno, nahantona tamin'ny baubles sy sioka, izay nanana mpizara rejisitra, saingy tsy nisy olon-kafa afaka nanao izany.

Ny olana dia raha manampy fomba izay iharan'ny inlining, mampitombo sy mampitombo ny inlining faritra, ny fitambaran'ny ampiasaina soatoavina eo noho eo ny isan'ny rejisitra, ary tsy maintsy manapaka azy ireo. Matetika dia tonga ny haavon'ny fanakianana rehefa miala ny mpizara, ary ny kandidà tsara iray ho an'ny fiparitahana dia mendrika ny iray hafa, hivarotra zavatra bibidia amin'ny ankapobeny ianao. Ny sandan'ny inlining eto dia ny fahaverezan'ny ampahany amin'ny overhead, ny overhead amin'ny fiantsoana sy ny fitahirizana, azonao jerena ny soatoavina ao anatiny ary afaka manatsara azy ireo bebe kokoa. Ny vidin'ny inlining dia misy sanda velona marobe miforona, ary raha mandoro mihoatra noho ny ilaina ny mpizara rejisitra anao dia very avy hatrany ianao. Noho izany, ny ankamaroan'ny allocators dia manana olana: rehefa miampita tsipika iray ny inlining, dia manomboka tapaka ny zava-drehetra eto amin'izao tontolo izao ary azo avoaka ao amin'ny trano fidiovana ny vokatra. Ireo izay mampihatra ny compiler dia manampy heuristics sasany: ohatra, hampitsahatra ny inlining, manomboka amin'ny habeny lehibe, satria ny famatsiana dia hanimba ny zava-drehetra. Toy izao ny fomba fiforonan'ny kink ao amin'ny kisary fampisehoana - ianao inline, inline, mitombo tsikelikely ny fampisehoana - ary avy eo boom! - mianjera toy ny jack swift satria nilahatra be loatra ianao. Toy izany no niasa ny zava-drehetra talohan'ny nahatongavan'i Java. Mitaky inlining bebe kokoa i Java, noho izany dia tsy maintsy nataoko ho mahery setra kokoa ny mpizara ahy mba hivoatra fa tsy hianjera, ary raha be loatra ianao dia manomboka miparitaka, fa avy eo dia mbola tonga ny fotoana "tsy misy fiparitahana". Fandinihana mahaliana ity ary tonga tao amiko avy hatrany, tsy hita, fa nandoa vola. Nandray inlining mahery vaika aho ary nitondra ahy tany amin'ny toerana izay iarahan'ny Java sy C. Tena akaiky izy ireo - afaka manoratra kaody Java izay haingana kokoa noho ny kaody C sy ny zavatra toy izany aho, saingy amin'ny salan'isa, amin'ny sary lehibe amin'ny zavatra, dia azo ampitahaina amin'ny ankapobeny. Heveriko fa anisan'io fahamendrehana io ny mpizara rejisitra, izay mamela ahy hiditra amin'ny hadalana araka izay tratra. Inline fotsiny izay hitako. Ny fanontaniana eto dia raha miasa tsara ny allocator, raha toa ka code miasa am-pahakingana ny valiny. Fanamby lehibe izany: ny hahatakatra izany rehetra izany ary hampihatra izany.

Kely momba ny fisoratana anarana sy ny multi-cores

Владимир: Ny olana toy ny fizarana rejisitra dia toa karazana lohahevitra maharitra mandrakizay. Manontany tena aho hoe efa nisy ve ny hevitra toa nampanantena nefa tsy nahomby tamin'ny fampiharana?

harambato: Azo antoka! Ny fizarana fisoratana anarana dia faritra iray iezahanao mitady heuristika hamahana olana feno NP. Ary tsy afaka mahazo vahaolana tonga lafatra mihitsy ianao, sa tsy izany? Tsy azo atao tsotra izao izany. Jereo, Ahead of Time compilation - tsy miasa tsara ihany koa. Ny resaka eto dia momba ny tranga sasany antonony. Momba ny fampisehoana mahazatra, mba hahafahanao mandeha mandrefy zavatra izay heverinao fa fampisehoana mahazatra tsara - raha ny marina, miezaka manatsara izany ianao! Ny fizarana fisoratana anarana dia lohahevitra iray momba ny fampisehoana. Rehefa manana ny prototype voalohany ianao, dia miasa sy mandoko izay ilainao, dia manomboka ny asa fampisehoana. Mila mianatra mandrefy tsara ianao. Nahoana no zava-dehibe izany? Raha manana angon-drakitra mazava ianao dia afaka mijery faritra samihafa ary mahita: eny, nanampy teto izany, saingy teo no rava ny zava-drehetra! Misy hevitra tsara mipoitra, manampy heuristika vaovao ianao ary tampoka dia manomboka miasa tsara kokoa ny zava-drehetra amin'ny ankapobeny. Na tsy manomboka izany. Nanana tranga maromaro izay niadiavanay ny fampisehoana dimy isan-jato izay nampiavaka ny fivoaranay tamin'ny mpizara teo aloha. Ary isaky ny miseho toy izao: any amin'ny toerana iray mandresy, any amin'ny toerana resy. Raha manana fitaovana famakafakana tsara ianao dia azonao atao ny mahita ireo hevitra very ary azonao ny antony tsy nahomby. Angamba mendrika ny hamela ny zava-drehetra amin'ny maha-izy azy, na mety haka fomba fijery matotra kokoa amin'ny fanitsiana tsara, na hivoaka sy hanamboatra zavatra hafa. Betsaka ny zavatra! Nanao ity hack mahafinaritra ity aho, saingy mila ity iray ity koa aho, ary ity iray ity, ary ity iray ity - ary ny fitambaran'izy ireo dia manome fanatsarana vitsivitsy. Ary mety tsy hahomby ny manirery. Izany no toetran'ny asa fampandehanana amin'ny olana feno NP.

Владимир: Misy ny mahatsapa fa olana efa voavaha ny zavatra toy ny fandokoana amin'ny allocators. Eny, fanapahan-kevitra ho anao izany, raha jerena ny zavatra lazainao, ka mendrika izany ve izany ...

harambato: Tsy voavaha araka izany. Ianao no tsy maintsy mamadika izany ho "voavaha". Misy olana sarotra ary mila vahana. Rehefa vita izany dia fotoana tokony hiasana amin'ny famokarana. Mila manatona an'io asa io mifanaraka amin'izany ianao - manao benchmark, manangona metrika, manazava toe-javatra rehefa niverina tamin'ny dikan-teny teo aloha ianao, dia nanomboka niasa indray ny hack taloha (na ny mifamadika amin'izany, nijanona). Ary aza kivy raha tsy mahavita zavatra. Araka ny efa nolazaiko, raha misy hevitra mangatsiatsiaka tsy mandeha, fa eo amin'ny sehatry ny fizarana ny rejisitra hevitra dia tsy misy farany. Azonao atao, ohatra, ny mamaky boky ara-tsiansa. Na dia amin'izao fotoana izao aza dia nanomboka nihetsika miadana kokoa io faritra io ary nanjary mazava kokoa noho ny tamin'ny fahatanorany. Na izany aza, tsy tambo isaina ny olona miasa amin'ity sehatra ity ary mendrika ny andramana ny heviny rehetra, samy miandry amin'ny elany. Ary tsy afaka milaza ny hatsaran'izy ireo ianao raha tsy manandrana azy ireo. Manao ahoana ny fampifandraisana azy ireo amin'ny zavatra hafa rehetra ao amin'ny allocator anao, satria ny allocator dia manao zavatra maro, ary ny hevitra sasany dia tsy hiasa amin'ny allocator manokana anao, fa amin'ny allocator hafa dia ho mora. Ny fomba lehibe hahazoana fandresena ho an'ny mpizara dia ny misintona ny zavatra miadana ivelan'ny lalana lehibe ary manery azy hisaraka amin'ny sisin'ny lalana miadana. Ka raha te hanao GC ianao dia mandehana amin'ny lalana miadana, deoptimize, manipy exception, ireo zavatra rehetra ireo - fantatrao fa tsy fahita firy ireo zavatra ireo. Ary tena tsy fahita firy izy ireo, nojereko. Manao asa fanampiny ianao ary manala ny fameperana maro amin'ireo lalana miadana ireo, saingy tsy maninona izany satria miadana sy mahalana izy ireo. Ohatra, tondro tsy misy dikany - tsy mitranga izany, sa tsy izany? Mila manana lalana maromaro ho an'ny zavatra samihafa ianao, saingy tsy tokony hanelingelina ny lehibe. 

Владимир: Ahoana ny hevitrao momba ny multi-core, raha misy an'arivony ny cores indray mandeha? Zavatra mahasoa ve izany?

harambato: Ny fahombiazan'ny GPU dia mampiseho fa tena ilaina izany!

Владимир: Tena manokana izy ireo. Ahoana ny amin'ny processeur general purpose?

harambato: Eny, izany no modely fandraharahan'i Azul. Niverina ny valiny tamin'ny vanim-potoana izay tena tia ny fampisehoana azo vinavinaina. Sarotra ny nanoratra code parallèle tamin'izany. Ny modelin'ny kaody H2O dia azo esorina be, saingy tsy modely amin'ny tanjona ankapobeny. Angamba somary ankapobeny kokoa noho ny rehefa mampiasa GPU. Miresaka momba ny fahasarotana amin'ny famolavolana zavatra toy izany ve isika sa ny fahasarotan'ny fampiasana azy? Ohatra, nampianarin'i Azul lesona mahaliana aho, izay tsy dia mazava loatra: mahazatra ny cache kely. 

Ny fanamby lehibe indrindra amin'ny fiainana

Владимир: Ahoana ny amin'ny fanamby tsy ara-teknika?

harambato: Ny fanamby lehibe indrindra dia ny tsy ho... tsara fanahy sy tsara fanahy amin'ny olona. Ary vokatr'izany, dia nahita ny tenako tao anatin'ny toe-javatra tena mifanipaka aho. Ireo izay fantatro fa tsy nety ny fandehan-javatra, saingy tsy fantatro ny fomba handrosoana amin'ireo olana ireo ary tsy mahazaka izany. Olana maro naharitra, naharitra am-polony taona maro, no nipoitra toy izany. Ny zava-misy fa Java manana C1 sy C2 compiler dia vokatra mivantana amin'izany. Ny tsy fisian'ny fitambarana ambaratonga maro ao Java nandritra ny folo taona nisesy dia vokany mivantana ihany koa. Mazava ho azy fa nila rafitra toy izany isika, saingy tsy mazava ny antony tsy nisy azy. Nanana olana tamin'ny injeniera iray aho... na vondrona injeniera. Indray andro, rehefa nanomboka niasa tao amin'ny Masoandro aho, dia ... Okay, tsy amin'izay fotoana izay ihany, amin'ny ankapobeny dia manana ny hevitro manokana momba ny zava-drehetra aho. Ary noheveriko fa marina fa azonao raisina fotsiny ity fahamarinanao ity ary lazainao izany. Indrindra moa fa marina aho tamin'ny ankamaroan'ny fotoana. Ary raha tsy tianao io fomba fiasa io... indrindra raha toa ka miharihary fa diso sy manao zavatra tsy misy dikany ianao... Amin'ny ankapobeny, vitsy ny olona afaka mandefitra amin'izany fomba fifandraisana izany. Na dia mety ho toy ny ahy aza ny sasany. Nanorina ny fiainako manontolo tamin'ny fitsipika mendrika aho. Raha misy zavatra tsy mety asehonao amiko dia hitodika avy hatrany aho ka hiteny hoe: tsy misy dikany ianao. Etsy an-danin'izany, mazava ho azy, miala tsiny sy izany rehetra izany, hanamarika ny fahamendrehana, raha misy, ary handray fepetra hafa mety. Etsy ankilany, tena manafintohina aho momba ny isan-jaton'ny tontalin'ny fotoana. Ary tsy mandeha tsara amin'ny fifandraisana amin'ny olona izany. Tsy miezaka ny ho tsara fanahy aho, fa mametraka ny fanontaniana am-pahatsorana. "Tsy hahomby mihitsy izany, satria iray, roa ary telo." Ary toy ny hoe: "Oh!" Nisy vokany hafa izay mety tsara kokoa raha tsy noraharahiana: ohatra, ireo izay nitarika ny fisaraham-panambadiana tamin’ny vadiko sy ny fahaketrahana folo taona taorian’izay.

Ny fanamby dia tolona amin'ny olona, ​​miaraka amin'ny fahatsapany ny zavatra azonao atao na tsy azonao atao, ny zava-dehibe sy ny tsy tokony hatao. Nisy fanamby maro momba ny fomba fanaovana coding. Mbola manoratra fehezan-dalàna be dia be aho, ary tamin'izany andro izany dia tsy maintsy nihena mihitsy aza aho satria nanao asa mifanitsy be loatra aho ary tsy nanao izany, fa tsy nifantoka tamin'ny iray. Raha mijery ny lasa aho dia nanoratra ny antsasaky ny kaody ho an'ny baiko Java JIT, ny baiko C2. Ny coder haingana indrindra manaraka dia nanoratra ny antsasany ho miadana, ny antsasany manaraka ho miadana, ary nihena be izany. Ny olona fahafito amin'ity laharana ity dia tena miadana be - mitranga foana izany! Nikasika kaody be dia be aho. Nijery izay nanoratra aho, tsy an-kanavaka, nibanjina ny kaodin'izy ireo aho, nandinika ny tsirairay tamin'izy ireo, ary mbola nanohy nanoratra mihoatra noho ny iray tamin'izy ireo aho. Ity fomba ity dia tsy mandeha tsara amin'ny olona. Tsy tian'ny sasany izany. Ary rehefa tsy zakany dia manomboka ny fitarainana rehetra. Ohatra, nilazana aho indray mandeha mba hampitsahatra ny coding satria manoratra code be loatra aho ary mampidi-doza ny ekipa izany, ary toy ny vazivazy izany rehetra izany amiko: ry namana, raha manjavona ny ekipa ambiny ary manohy manoratra code aho, dia ianao. antsasa-tarika ihany no ho resy. Amin'ny lafiny iray, raha manohy manoratra kaody aho ary very ny antsasaky ny ekipa, dia toa tena ratsy ny fitantanana izany. Tsy nieritreritra an'izany mihitsy aho, tsy niresaka momba izany, fa mbola tany an-dohako ihany. Nihodinkodina tao an-tsaiko ilay eritreritra hoe: “Mananihany ahy daholo ve ianareo?” Noho izany, ny olana lehibe indrindra dia izaho sy ny fifandraisako amin'ny olona. Ankehitriny dia takatro kokoa ny tenako, mpitarika ny ekipa ho an'ny programmer aho hatry ny ela, ary izao aho dia miteny mivantana amin'ny olona: fantatrao, izaho no izaho, ary tsy maintsy miatrika ahy ianao - mety ve raha mijoro aho Eto? Ary rehefa nanomboka niatrika izany izy ireo, dia nandeha ny zava-drehetra. Raha ny marina, tsy ratsy na tsara aho, tsy manana fikasana ratsy na faniriana feno fitiavan-tena, fa ny tena maha izy ahy, ary mila miaina miaraka amin'izany aho.

Andrew: Vao tsy ela akory izay dia nanomboka niresaka momba ny fahatsiarovan-tena ho an'ny introverts ny rehetra, ary ny fahaiza-manao malefaka amin'ny ankapobeny. Inona no azonao lazaina momba izany?

harambato: Eny, izany no hevi-baovao sy lesona azoko tamin’ny fisaraham-panambadiana nataoko tamin’ny vadiko. Ny zavatra nianarako tamin’ilay fisaraham-panambadiana dia ny fahatakarana ny tenako. Izany no nanombohako nahafantatra ny hafa. Fantaro ny fomba fiasan'ity fifandraisana ity. Nifandimby nahita izany. Nisy ny fahatsiarovan-tena hoe iza aho ary inona no soloko. Inona no ataoko: na variana amin'ny asa aho, na misoroka ny fifandirana, na zavatra hafa - ary io haavon'ny fahatsiarovan-tena io dia tena manampy amin'ny fitazonana ny tenako. Aorian'izany dia lasa mora kokoa ny zava-drehetra. Ny zavatra iray hitako tsy teo amin'ny tenako ihany, fa tamin'ny programer hafa koa dia ny tsy fahaiza-miteny eritreritra rehefa ao anatin'ny adin-tsaina ara-pihetseham-po ianao. Ohatra, mipetraka eo amin'ny kaody ianao, ao anatin'ny toe-javatra mikoriana, ary avy eo dia mihazakazaka mankany aminao izy ireo ary manomboka mikiakiaka amin'ny hysterics fa misy zavatra tapaka ary ankehitriny dia hisy fepetra henjana horaisina aminao. Ary tsy afaka miteny na dia iray aza ianao satria ao anatin'ny adin-tsaina ara-pihetseham-po. Ny fahalalana azo dia ahafahanao miomana amin'ity fotoana ity, mivelona amin'izany ary mandroso amin'ny drafitra fialan-tsasatra, aorian'izay dia afaka manao zavatra ianao. Ka eny, rehefa manomboka mahatsapa ny fomba fiasan'izy rehetra ianao, dia hetsika lehibe manova fiainana izany. 
Ny tenako dia tsy nahita teny mety, fa tsaroako ny filaharan'ny fihetsika. Ny zava-misy dia ity fihetsika ity dia ara-batana toy ny am-bava, ary mila toerana ianao. Toerana toy izany, amin'ny heviny Zen. Izany indrindra no tokony hazavaina, ary avy eo dia miala sasatra - miala amin'ny vatana fotsiny. Rehefa mangina am-bava aho dia afaka mandamina ny toe-javatra ara-pihetseham-po. Rehefa tonga any amin'ny atidohanao ny adrenaline, dia mamindra anao amin'ny ady na fiaramanidina ianao, tsy afaka miteny na inona na inona intsony ianao, tsia - izao ianao dia adala, injeniera karavasy, tsy mahavita valiny mendrika na manakana ny fanafihana, ary afaka ny mpanafika hanafika hatrany hatrany. Tsy maintsy lasa ny tenanao indray ianao, mahazo fifehezana, miala amin'ny fomba "ady na sidina".

Ary noho izany dia mila toerana am-bava isika. Espace malalaka fotsiny. Raha miteny na inona na inona ianao, dia azonao atao ny milaza izany marina, ary avy eo mandehana ary tena mahita "espace" ho anao: mandehana any amin'ny zaridainam-panjakana, mihidy ao anaty douche - tsy maninona. Ny tena zava-dehibe dia ny fanalana vonjimaika amin'io toe-javatra io. Raha vantany vao miala ianao mandritra ny segondra vitsy, dia miverina ny fanaraha-maso, manomboka mieritreritra tsara ianao. "Eny, tsy karazana adala aho, tsy manao zavatra adala, olona tena ilaina aho." Rehefa afaka mandresy lahatra ny tenanao ianao dia izao no fotoana hirosoana amin'ny dingana manaraka: ny fahatakarana ny zava-nitranga. Voatafika ianao, avy amin'ny toerana tsy ampoizinao ny fanafihana, otrika tsy marina sy ratsy. Ratsy izany. Ny dingana manaraka dia ny mahatakatra ny antony ilain'ny mpanafika izany. Tena nahoana? Angamba satria izy tenany no tezitra? Nahoana izy no tezitra? Ohatra, noho izy nanakorontana ny tenany ka tsy afaka mandray andraikitra? Izany no fomba hikarakarana tsara ny toe-javatra rehetra. Fa izany dia mitaky toerana ho an'ny maneuver, toerana am-bava. Ny dingana voalohany dia ny manapaka ny fifandraisana am-bava. Halaviro ny fifanakalozan-kevitra amin'ny teny. Manafoana izany, mandehana haingana araka izay azo atao. Raha resaka an-telefaonina ilay izy dia atsaharo fotsiny ny fiantsoana azy - izany no fahaizana nianarako tamin'ny fifandraisana tamin'ny vadiko taloha. Raha tsy mandeha na aiza na aiza ny resaka dia mitenena fotsiny hoe "veloma" ary atsaharo ny antso. Avy amin'ny lafiny ilany amin'ny telefaona: "bla blah blah", mamaly ianao hoe: "eny, veloma!" ary hanantona. Hamaranao fotsiny ny resaka. Dimy minitra taty aoriana, rehefa miverina aminao ny fahaizana misaina tsara, dia nihena kely ianao, dia lasa azo atao ny mieritreritra ny zava-drehetra, ny zava-nitranga ary ny ho avy. Ary manomboka mamolavola valin-kafatra feno eritreritra, fa tsy mihetsika amin'ny fihetseham-po fotsiny. Ho ahy, ny fandrosoana amin'ny fahatsiarovan-tena dia ny zava-misy fa raha misy adin-tsaina ara-pihetseham-po dia tsy afaka miteny aho. Miala amin'ity fanjakana ity, mieritreritra sy manomana ny fomba hamaliana sy hanonerana ny olana - ireo no dingana mety amin'ny tranga rehefa tsy afaka miteny ianao. Ny fomba tsotra indrindra dia ny mandositra ny toe-javatra izay miseho ny adin-tsaina ara-pihetseham-po ary mijanona fotsiny amin'ny fandraisana anjara amin'ity adin-tsaina ity. Rehefa afaka izany dia lasa mahay misaina ianao, rehefa afaka misaina dia lasa mahay miteny, sns.

Raha ny marina, eny amin'ny fitsarana, ny mpisolovava mpanohitra dia manandrana manao izany aminao - izao dia mazava ny antony. Satria manana ny fahafahana manindry anao amin'ny fanjakana toy izany izy ka tsy afaka manonona ny anaranao, ohatra. Amin'ny heviny tena izy dia tsy ho afaka hiteny ianao. Raha mitranga aminao izany, ary raha fantatrao fa ho eo amin'ny toerana misy ady am-bava ianao, amin'ny toerana toy ny fitsarana, dia afaka miaraka amin'ny mpisolovava anao ianao. Ny mpisolovava dia hijoro ho anao ary hampitsahatra ny fanafihana am-bava, ary hanao izany amin'ny fomba ara-dalàna tanteraka, ary hiverina aminao ny habaka Zen very. Ohatra, tsy maintsy niantso ny fianakaviako imbetsaka aho, sariaka ny mpitsara momba izany, saingy nikiakiaka sy nikiakiaka tamiko ilay mpisolovava mpanohitra, tsy afaka nahazo teny akory aho. Amin'ireny tranga ireny, ny fampiasana mpanelanelana dia mety indrindra amiko. Ny mpanelanelana dia manakana izany fanerena rehetra izany izay mirotsaka aminao amin'ny renirano mitohy, hitanao ny toerana Zen ilaina, ary miaraka amin'izany ny fahafahana miteny dia miverina. Seha-pahalalana iray manontolo ity izay be dia be ny ianarana, betsaka ny ho hita ao anatinao, ary izany rehetra izany dia mivadika ho fanapahan-kevitra stratejika avo lenta izay tsy mitovy amin'ny olona samihafa. Ny olona sasany dia tsy manana ireo olana voalaza etsy ambony; matetika, ny olona izay mpivarotra matihanina dia tsy manana izany. Ireny olona rehetra mivelona amin’ny teny ireny – mpihira malaza, poeta, mpitondra fivavahana ary mpanao politika, dia manana zavatra holazaina hatrany. Tsy manana olana toy izany izy ireo, fa izaho kosa.

Andrew: Nisy... tsy nampoizina. Tsara fa efa niresaka betsaka izahay ary tonga ny fotoana hamaranana ity tafatafa ity. Azo antoka fa hihaona amin’ny fihaonambe isika ary ho afaka hanohy izany dinika izany. Hitanao ao amin'ny Hydra!

Azonao atao ny manohy ny resakao amin'i Cliff amin'ny fihaonambe Hydra 2019, izay hatao ny 11-12 Jolay 2019 any Saint-Pétersbourg. Ho avy izy hitondra tatitra "Ny traikefan'ny fahatsiarovana Transactional Azul Hardware". Azo vidiana ny tapakila ao amin'ny tranokala ofisialy.

Source: www.habr.com

Add a comment