Hurukuro huru naCliff Click, baba veJIT kuunganidzwa muJava

Hurukuro huru naCliff Click, baba veJIT kuunganidzwa muJavaCliff Click - CTO yeCratus (IoT sensors yekuvandudza maitiro), muvambi uye co-muvambi we akati wandei ekutanga (kusanganisira Rocket Realtime Chikoro, Neurensic uye H2O.ai) ine akati wandei akabudirira kubuda. Cliff akanyora mugadziri wake wekutanga aine makore gumi nemashanu (Pascal weTRS Z-15)! Anonyanya kuzivikanwa nebasa rake paC80 muJava (Gungwa reNodes IR). Uyu muunganidzi wakaratidza nyika kuti JIT inogona kugadzira kodhi yemhando yepamusoro, yaive imwe yezvikonzero mukubuda kweJava seimwe yemapuratifomu makuru emazuva ano. Ipapo Cliff akabatsira Azul Systems kuvaka 2-musimboti mainframe ine yakachena Java software yakatsigira GC kumbomira pamurwi we864-gigabyte mukati megumi milliseconds. Kazhinji, Cliff akakwanisa kushanda pane ese maficha eJVM.

 
Iyi habrapost hurukuro huru naCliff. Tichataura pamisoro inotevera:

  • Shanduko kune yakaderera-level optimizations
  • Nzira yekuita sei refactoring yakakura
  • Mutengo womuenzaniso
  • Low-level optimization kudzidziswa
  • Mienzaniso inoshanda yekuvandudza kwekuita
  • Sei uchigadzira mutauro wako wepurogiramu
  • Performance Injiniya Basa
  • Matambudziko Ounyanzvi
  • Zvishoma nezve rejista yekugovera uye akawanda-cores
  • Dambudziko guru muupenyu

Hurukuro dzinoitwa ne:

  • Andrey Satarin kubva kuAmazon Web Services. Mubasa rake, akakwanisa kushanda mumapurojekiti akasiyana zvachose: akaedza iyo NewSQL yakagoverwa dhatabhesi muYandex, gore rekuona hurongwa muKaspersky Lab, mutambo wevazhinji muMail.ru uye sevhisi yekuverenga mitengo yekunze muDeutsche Bank. Kufarira kuedza hukuru-hukuru backend uye yakagoverwa masisitimu.
  • Vladimir Sitnikov kubva kuNetcracker. Makore gumi ebasa pakuita uye scalability yeNetCracker OS, software inoshandiswa neve telecom operators kuita otomatiki network uye network michina manejimendi maitiro. Kufarira Java uye Oracle Database kuita nyaya. Munyori weanopfuura gumi nemaviri ekuita ekuvandudza mune yepamutemo PostgreSQL JDBC mutyairi.

Shanduko kune yakaderera-level optimizations

Andrei: Iwe uri zita rakakura munyika yeJIT kuunganidzwa, Java, uye basa rekuita zvakajairika, handiti? 

Cliff: Zvakafanana!

Andrei: Ngatitange nemimwe mibvunzo yakajairika nezve basa rekuita. Iwe unofungei nezve sarudzo pakati pepamusoro-level uye yakaderera-level optimizations sekushanda padanho reCPU?

Cliff: Ehe, zvese zviri nyore pano. Kodhi inokurumidza ndiyo isingambomhanye. Naizvozvo, iwe unogara uchifanirwa kutanga kubva padanho repamusoro, shanda pane algorithms. O notation iri nani inorova O notation yakaipisisa, kunze kwekunge mamwe mahombe akakura akapindira apindira. Zvinhu zvakaderera zvinoenda pekupedzisira. Kazhinji, kana iwe wakakwenenzvera yakasara stack yako zvakakwana uye pachine zvimwe zvinonakidza zvinhu zvasara, iyo yakaderera mwero. Asi ungatanga sei kubva padanho repamusoro? Unoziva sei kuti basa repamusoro rakakwana rakaitwa? Zvakanaka ... hapana nzira. Iko hakuna akagadzirira-akagadzirwa mabikirwo. Iwe unofanirwa kunzwisisa dambudziko, sarudza zvauchaita (kuitira kuti usatora matanho asina kufanira mune ramangwana) uye ipapo iwe unogona kufumura iyo profil, iyo inogona kutaura chimwe chinhu chinobatsira. Pane imwe nguva, iwe pachako unoona kuti wabvisa zvinhu zvisina basa uye yave nguva yekuita imwe yakaderera-nhanho tuning. Zvechokwadi iyi imhando yakakosha yeunyanzvi. Kune vanhu vakawanda vanoita zvinhu zvisina basa, asi vachifamba nekukasira zvekuti havana nguva yekunetseka nezvekubudirira. Asi izvi kusvika mubvunzo wamuka wakajeka. Kazhinji 99% yenguva hapana ane hanya nezvandinoita, kusvikira nguva iyo chinhu chakakosha chinouya munzira yakaoma iyo pasina munhu ane hanya nayo. Uye pano munhu wese anotanga kukunetsa nezve "nei zvisina kunyatsoshanda kubva pakutanga." Kazhinji, pane nguva dzose chimwe chinhu chekuvandudza mukushanda. Asi 99% yenguva iwe hauna anotungamira! Uri kungoedza kuita kuti chimwe chinhu chishande uye mukuita izvi unoona zvakakosha. Iwe haugone kuziva pachine nguva kuti chidimbu ichi chinoda kuve chakakwana, saka, chokwadi, iwe unofanirwa kuve wakakwana mune zvese. Asi izvi hazvigoneke uye iwe hauzviite. Pane nguva dzose zvinhu zvakawanda zvekugadzirisa - uye ndizvo zvakajairika.

Nzira yekuita sei refactoring yakakura

Andrei: Unoshanda sei pakuita? Iri idambudziko rakasiyana-siyana. Semuyenzaniso, wakambofanira kushanda pazvinetso zvinomuka kubva pamharadzano yezvakawanda zvebasa riripo?

Cliff: Ndinoedza kunzvenga. Kana ndikaziva kuita kunenge kuri nyaya, ndinofunga nezvazvo ndisati ndatanga kukodha, kunyanya nematanho edata. Asi kazhinji unowana zvese izvi gare gare. Uye zvino iwe unofanirwa kuenda kumatanho akanyanyisa uye kuita izvo zvandinodaidza kuti "nyorazve uye kukunda": unofanirwa kubata chidimbu chakakura chakaringana. Imwe kodhi ichave ichifanirwa kunyorwazve nekuda kwematambudziko ekuita kana chimwe chinhu. Chero chikonzero chekunyorazve kodhi, zvinenge zviri nani kunyora zvakare chidimbu chikuru pane chidimbu chidiki. Panguva ino, munhu wese anotanga kudedera nekutya: "oh Mwari wangu, haugone kubata kodhi yakawandisa!" Asi kutaura zvazviri, nzira iyi inenge nguva dzose inoshanda zviri nani. Iwe unofanirwa kukurumidza kutora dambudziko rakakura, dhirowa denderedzwa hombe rakaritenderedza uye uti: Ini ndichanyorazve zvese zviri mukati medenderedzwa. Muganhu wacho wakanyanya kudiki pane zviri mukati mawo zvinoda kutsiviwa. Uye kana kutsanangurwa kwakadaro kwemiganhu kuchikubvumira kuita basa mukati zvakakwana, maoko ako akasununguka, ita zvaunoda. Kana uchinge wanzwisisa dambudziko, maitiro ekunyora zvakare ari nyore, saka tora kuruma kukuru!
Panguva imwecheteyo, kana iwe ukanyora hombe patsva uye woona kuti kuita kunenge kuri nyaya, unogona kubva watanga kunetseka nazvo. Izvi zvinowanzo shanduka kuita zvinhu zviri nyore senge "usakope data, tonga data zviri nyore sezvinobvira, ita diki." Mukunyorazve kukuru, kune nzira dzakajairika dzekuvandudza mashandiro. Uye ivo vanenge vanogara vachitenderera data.

Mutengo womuenzaniso

Andrei: Mune imwe podcasts iwe wakataura nezve mutengo wemhando mumamiriro ekugadzirwa. Unogona here kutsanangura zvawaireva neizvi?

Cliff: Chokwadi. Ini ndakazvarwa munguva iyo processor kuita kwakakosha zvakanyanya. Uye nguva ino inodzoka zvakare - kuguma hakusi pasina kuseka. Ndakatanga kurarama mumazuva emichina-mabhiti masere; komputa yangu yekutanga yakashanda ne256 bytes. Mabhayiti chaiwo. Zvese zvaive zvidiki. Mirayiridzo yaifanira kuverengwa, uye patakatanga kukwidza murwi wemutauro wepurogiramu, mitauro yakaramba ichiwedzera. Paive neAssembler, ipapo Basic, ipapo C, uye C vakatarisira zvakawanda zvemashoko, sekugoverwa kwerejista uye sarudzo yekuraira. Asi zvese zvaive zvakajeka ipapo, uye kana ndikaita chinongedzo kune chimwe chiitiko chekuchinja, ipapo ndaizowana mutoro, uye mutengo wekuraira uku unozivikanwa. Iyo hardware inogadzira imwe nhamba yemakina ekutenderera, saka kumhanya kwekuita kwezvinhu zvakasiyana kunogona kuverengerwa nekungowedzera mirairo yese yauri kuzomhanya. Imwe neimwe enzanisa / bvunzo / bazi / kufona / mutoro / chitoro inogona kuwedzerwa uye ndokuti: ndiyo nguva yekuuraya iwe. Paunenge uchishanda mukuvandudza mashandiro, iwe unozonyatso teerera kune nhamba dzipi dzinoenderana nediki diki inopisa. 
Asi paunongoshandura kuJava, Python nezvimwe zvinhu zvakafanana, iwe unokurumidza kukurumidza kubva kune yakaderera-level hardware. Ndeipi mari yekufonera getter muJava? Kana JIT muHotSpot iri chokwadi inlined, ichatakura, asi kana isina kuita izvi, ichava runhare rwekuita. Sezvo kufona kuri pane inopisa loop, inodarika mamwe ese ma optimizations mune iyo loop. Nokudaro, mari chaiyo ichave yakakwirira zvikuru. Uye iwe unobva warasikirwa nekukwanisa kutarisa chidimbu chekodhi uye kunzwisisa kuti isu tinofanirwa kuiita maererano ne processor wachi kumhanya, ndangariro uye cache inoshandiswa. Zvese izvi zvinova zvinonakidza chete kana iwe ukanyatsopinda mukuita.
Ikozvino isu tinozviwana tiri mumamiriro ezvinhu apo kumhanya kweprocessor hakuna kumbowedzera kwemakore gumi. Mazuva ekare adzoka! Iwe hauchagone kuvimba nekuita kwakanaka kwe-single-threaded performance. Asi kana ukaerekana wapinda muparallel computing, zvakaoma zvisingaite, munhu wese anotarisa kwauri saJames Bond. Kukwidzira kagumi pano kunowanzoitika munzvimbo dzine munhu akanganisa chimwe chinhu. Concurrency inoda basa rakawanda. Kuti uwane iyo XNUMXx yekumhanyisa, iwe unofanirwa kunzwisisa iyo mutengo modhi. Chii uye marii? Uye kuti uite izvi, unofanirwa kunzwisisa kuti rurimi runokwana sei pane pasi hardware.
Martin Thompson akasarudza izwi rakakura kune blog yake Mechanical Tsitsi! Iwe unofanirwa kunzwisisa kuti iyo hardware ichaitei, kuti ichazviita sei, uye nei ichiita izvo zvainoita pakutanga. Uchishandisa izvi, zviri nyore kutanga kuverenga mirairo uye kufunga kuti nguva yekuuraya iri kuenda kupi. Kana iwe usina kudzidziswa kwakakodzera, uri kungotsvaga katsi nhema muimba ine rima. Ndinoona vanhu vachikwenenzvera kuita nguva dzese vasingazive kuti chii gehena chavari kuita. Vanotambura zvakanyanya uye havasi kufambira mberi zvakanyanya. Uye ini pandinotora chidimbu chimwe chete chekodhi, tsvedza mune akati wandei madiki uye wotora kashanu- kana gumi-kumhanyisa kumhanya, vakaita senge: zvakanaka, hazvina kunaka, isu taitoziva kuti uri nani. Zvinoshamisa. Ndiri kutaura nezvei ... mutengo wemhando ndeyemhando ipi yekodhi yaunonyora uye kuti inokurumidza sei paavhareji mumufananidzo mukuru.

Andrei: Uye ungachengeta sei volume yakadaro mumusoro mako? Izvi zvinowanikwa neruzivo rwakawanda here, kana? Chiitiko chakadaro chinobva kupi?

Cliff: Zvakanaka, handina kuwana ruzivo rwangu nenzira iri nyore. Ini programmed muna Assembly shure mumazuva apo waigona kunzwisisa mumwe murayiridzo chete. Zvinoita sehupenzi, asi kubvira ipapo iyo Z80 yekuraira seti yakagara iri mumusoro mangu, mundangariro dzangu. Handiyeuki mazita evanhu mukati meminiti imwe chete yekutaura, asi ndinorangarira kodhi yakanyorwa makore makumi mana apfuura. Zvinosetsa, zvinoita senge syndrome "idiot musayendisiti".

Low-level optimization kudzidziswa

Andrei: Pane nzira iri nyore yekupinda nayo here?

Cliff: Hongu uye kwete. Hardware yatinoshandisa tese haina kuchinja zvakanyanya nekufamba kwenguva. Wese munhu anoshandisa x86, kunze kweArm smartphones. Kana iwe usiri kuita imwe mhando ye hardcore embedding, uri kuita chinhu chimwe chete. Zvakanaka, chinotevera. Mirayiridzo hainawo kuchinja kwemazana emakore. Iwe unofanirwa kuenda uye kunyora chimwe chinhu muAssembly. Kwete zvakawanda, asi zvakakwana kuti utange kunzwisisa. Muri kunyemwerera, asi ndiri kutaura ndichirevesa. Iwe unofanirwa kunzwisisa kunyorerana pakati pemutauro uye Hardware. Mushure meizvozvo iwe unofanirwa kuenda uye kunyora zvishoma uye kugadzira diki toyi compiler yemutauro mudiki wetoyi. Toy-yakafanana zvinoreva kuti inoda kugadzirwa munguva inonzwisisika. Inogona kunge iri nyore kwazvo, asi inofanirwa kugadzira mirairo. Chiito chekugadzira rairo chichakubatsira iwe kunzwisisa mutengo wemhando yebhiriji pakati peiyo yepamusoro-level kodhi iyo munhu wese anonyora uye yemuchina kodhi inomhanya pane Hardware. Tsamba iyi ichapiswa muuropi panguva iyo mugadziri anyorwa. Kunyangwe iyo yakapfava compiler. Mushure meizvozvo, unogona kutanga kutarisa Java uye chokwadi chekuti semantic chasm yakadzika zvakanyanya, uye zvakanyanya kuoma kuvaka mabhiriji pamusoro payo. MuJava, zvakanyanya kuoma kunzwisisa kuti bhiriji redu rakaita rakanaka kana rakaipa, chii chichaita kuti riparare uye chii chisingaiti. Asi iwe unoda imwe mhando yekutangira paunotarisa kodhi uye wonzwisisa: "ehe, iyi getter inofanirwa kunyorwa nguva dzese." Uye zvino zvinozoitika kuti dzimwe nguva izvi zvinoitika, kunze kwemamiriro ezvinhu apo iyo nzira inova yakakura kwazvo, uye JIT inotanga inlining zvese. Kuita kwenzvimbo dzakadai kunogona kufanotaurwa ipapo ipapo. Kazhinji ma getters anoshanda nemazvo, asi wobva watarisa mahombe anopisa zvishwe wobva waona kuti kune mamwe mabasa ekufona anoyangarara ipapo ayo asingazive zvavari kuita. Iri ndiro dambudziko rekushandiswa kwakapararira kwegetter, chikonzero nei vasina kunyorerwa ndechekuti hazvizivikanwe kuti igeta here. Kana iwe uine super diki kodhi base, unogona kungozvirangarira wobva wati: iyi igeta, uye iyi setter. Mune yakakura kodhi base, yega yega basa rinorarama nhoroondo yaro, iyo, kazhinji, isingazivikanwe kune chero munhu. Iyo profiler inoti isu takarasikirwa ne24% yenguva pane imwe loop uye kuti tinzwisise zviri kuita loop iyi, isu tinofanirwa kutarisa basa rega rega mukati. Hazvibviri kunzwisisa izvi pasina kudzidza basa, uye izvi zvinoderedza zvakanyanya nzira yekunzwisisa. Ndosaka ini ndisingashandisi ma getters nemaseta, ndasvika padanho idzva!
Ndekupi kuwana mutengo wemuenzaniso? Zvakanaka, iwe unogona kuverenga chimwe chinhu, hongu ... Asi ndinofunga nzira yakanakisisa ndeyokuita. Kugadzira diki compiler ichave yakanakisa nzira yekunzwisisa iyo mutengo modhi uye inokwana mumusoro wako wega. Mukopa diki angave akakodzera kugadzira microwave ibasa kune anotanga. Zvakanaka, ndinoreva, kana iwe uchitova nehunyanzvi hwekugadzira, saka izvo zvinofanirwa kunge zvakakwana. Zvese izvi zvinhu zvakaita sekupatsanura tambo yauinayo seimwe mhando yealgebraic kutaura, kutora mirairo yemasvomhu mashandiro kubva ipapo nenzira kwayo, kutora hunhu chaihwo kubva kumarejista - zvese izvi zvinoitwa kamwechete. Uye iwe uchizviita, zvichave zvakadhindwa muuropi hwako. Ndinofunga munhu wese anoziva zvinoita compiler. Uye izvi zvichapa kunzwisisa kweiyo mutengo modhi.

Mienzaniso inoshanda yekuvandudza kwekuita

Andrei: Chii chimwe chaunofanira kutarisisa paunenge uchishanda pakubudirira?

Cliff: Data zvimiro. Nenzira, hongu, handina kudzidzisa makirasi aya kwenguva yakareba ... Rocket Chikoro. Zvainakidza, asi zvaida kushanda nesimba, uye ndinewo upenyu! OK. Saka, mune imwe yemakirasi makuru uye anonakidza, "Kuita kwako kunoendepi," ndakapa vadzidzi muenzaniso: maviri nehafu gigabytes yefintech data yakaverengwa kubva kuCSV faira uyezve vaifanira kuverenga nhamba yezvigadzirwa zvakatengeswa. . Yenguva dzose data yemusika wetiki. UDP mapaketi akashandurwa kuita mavara fomati kubva kuma70s. Chicago Mercantile Exchange - ese marudzi ezvinhu zvakaita sebhota, chibage, soya beans, zvinhu zvakadaro. Zvaive zvakakodzera kuverenga zvigadzirwa izvi, nhamba yekutengeserana, avhareji yevhoriyamu yekufamba kwemari uye zvinhu, nezvimwe. Yakanaka yakapusa kutengesa math: tsvaga chigadzirwa kodhi (ndiyo 1-2 mavara muhashi tafura), tora huwandu, uwedzere kune imwe yemaseti ekutengesa, wedzera huwandu, wedzera kukosha, uye zvimwe zvinhu zvishoma. Masvomhu akareruka kwazvo. Kuitwa kwetoyi kwakanyatsojeka: zvinhu zvose zviri mufaira, ndakaverenga faira uye ndichifamba mairi, ndichiparadzanisa zvinyorwa zvega muJava tambo, ndichitsvaga zvinhu zvinodiwa mazviri uye kuwedzera maererano nemasvomhu anotsanangurwa pamusoro apa. Uye inoshanda pane imwe yakaderera kumhanya.

Neiyi nzira, zviri pachena kuti chii chiri kuitika, uye parallel computing haibatsire, handiti? Zvinoitika kuti kuwedzera kashanu mukuita kunogona kuwanikwa nekungosarudza iwo akakodzera data zvimiro. Uye izvi zvinoshamisa kunyange vane ruzivo programmers! Mune yangu chaiyo kesi, hunyengeri hwaive hwekuti haufanirwe kuita ndangariro kugovera mune inopisa loop. Zvakanaka, ichi hachisi chokwadi chese, asi kazhinji - haufanirwe kuratidza "kamwe muX" apo X yakakura zvakakwana. Kana X ari maviri nechidimbu magigabytes, haufanirwe kugovera chero chinhu β€œkamwechete pabhii”, kana β€œkamwe pamutsara”, kana β€œkamwe pandima”, hapana zvakadaro. Apa ndipo panoperera nguva. Izvi zvinotoshanda sei? Imagine ndirikufona String.split() kana BufferedReader.readLine(). Readline inogadzira tambo kubva kune seti yemabhaiti akauya pamusoro pe network, kamwe chete pamutsara wega wega, kune imwe neimwe yemazana emamiriyoni emitsara. Ndinotora mutsara uyu, ndouparura ndoukanda kure. Sei ndichiirasa - zvakanaka, ini ndatozvigadzirisa, ndizvo chete. Saka, kune imwe neimwe byte inoverengwa kubva kune idzi 2.7G, mavara maviri achanyorwa mumutsara, kureva, atova 5.4G, uye ini handidi ivo kune chimwe chinhu chinowedzera, saka vanoraswa. Kana iwe ukatarisa bhanwidth yekuyeuka, tinotakura 2.7G iyo inopinda nememory uye memory bhasi mu processor, uye zvakapetwa kaviri inotumirwa kumutsara wakarara muchirangaridzo, uye izvi zvose zvinopera kana mutsara wega wega wakasikwa. Asi ini ndinofanira kuiverenga, iyo hardware inoiverenga, kunyange kana zvinhu zvose zvikaparara gare gare. Uye ini ndinofanira kuinyora pasi nekuti ini ndakagadzira mutsara uye macache akazara - iyo cache haigone kugarisa 2.7G. Saka, pabhaiti yega yega yandinoverenga, ndinoverenga mamwe maviri mabheti uye ndinonyora mamwe maviri mabheti, uye pakupedzisira vane 4: 1 chiyero - muchiyero ichi tiri kutambisa memory bandwidth. Uye zvinozoitika kuti kana ndikadaro String.split() - ino haisi nguva yekupedzisira pandinoita izvi, panogona kunge paine mamwe 6-7 minda mukati. Saka iyo yekirasi kodhi yekuverenga CSV uyezve kupatsanura tambo zvinoguma mundangariro bandwidth tsvina ingangoita 14: 1 inoenderana nezvaungade kuva nazvo. Kana iwe ukarasa sarudzo idzi, unogona kuwana kukurumidza kukapetwa kashanu.

Uye hazvina kuoma kudaro. Kana iwe ukatarisa kodhi kubva pakona chaiyo, zvese zvinova nyore kana waona dambudziko. Iwe haufaniri kurega kugovera chiyeuchidzo zvachose: dambudziko chete nderekuti iwe unogovera chimwe chinhu uye pakarepo chinofa, uye munzira iyo inopisa chinhu chinokosha, icho munyaya iyi chiyeuchidzo bandwidth. Uye izvi zvese zvinokonzeresa kudonha mukubudirira. Pa x86 iwe kazhinji unofanirwa kupisa ma processor cycles, asi pano wakapisa ndangariro dzese kare kare. Mhinduro ndeyokuderedza kuwanda kwekubuda. 
The other part of the problem nderekuti ukamhanyisa profiler kana memory stripe yapera, ipapo pazvinenge zvaitika, unenge wakamirira kuti cache idzoke nekuti izere marara awakangoburitsa, iwo malines ese. Naizvozvo, mutoro wega wega kana chitoro kushanda kunononoka, nekuti ivo vanotungamira kune cache misses - iyo cache yese yave kunonoka, kumirira marara kuti aisiye. Naizvozvo, iyo profil inongoratidza inodziya isina ruzha ruzha rwakaiswa mukati mese loop - hapazove neyakasiyana kuraira inopisa kana nzvimbo mukodhi. Ruzha chete. Uye kana iwe ukatarisa kutenderera kweGC, ese ari Vechidiki Chizvarwa uye akanyanya kukurumidza - microseconds kana milliseconds yakakura. Mushure mezvose, ndangariro dzese idzi dzinofa pakarepo. Unogovera mabhiriyoni emagigabytes, uye anoacheka, oacheka, oacheka zvakare. Zvese izvi zvinoitika nekukurumidza. Zvinoitika kuti kune zvakachipa GC matenderedzwa, inodziya ruzha pamwe nekutenderera kwese, asi isu tinoda kuwana 5x yekumhanyisa. Panguva ino, chimwe chinhu chinofanira kuvhara mumusoro mako uye kurira: "Sei izvi?!" Memory strip kufashukira haina kuratidzwa mune yekirasi debugger; iwe unofanirwa kumhanya iyo hardware performance counter debugger uye uzvione iwe pachako uye zvakananga. Asi izvi hazvigone kufungidzirwa zvakananga kubva kune izvi zviratidzo zvitatu. Chiratidzo chechitatu kana iwe ukatarisa pane zvaunosimbisa, bvunza muporofiti, uye anopindura: "Wakaita bhiriyoni mitsara, asi iyo GC yakashanda mahara." Pazvinongoitika izvi, iwe unoona kuti iwe wagadzira zvinhu zvakawandisa uye wakapisa iyo yese memory lane. Pane nzira yekuziva izvi, asi hazvisi pachena. 

Dambudziko riri muchimiro che data: iyo isina dhizaini iri pasi pezvese zvinoitika, yakakura kwazvo, iri 2.7G pa diski, saka kugadzira kopi yechinhu ichi hakuna kudiwa - iwe unoda kuiisa kubva kune network byte buffer nekukurumidza. muzvinyorwa, kuitira kuti usaverenge-kunyora kumutsara kumashure uye mberi kashanu. Nehurombo, Java haipe iwe raibhurari yakadaro sechikamu cheJDK nekusarudzika. Asi izvi zvidiki, handiti? Chaizvoizvo, aya ndiwo mitsara ye5-10 yekodhi iyo ichashandiswa kushandisa yako yako buffered tambo loader, iyo inodzokorora maitiro eiyo tambo kirasi, uku iri wrapper yakatenderedza yepasi byte buffer. Nekuda kweizvozvo, zvinozoitika kuti uri kushanda sekunge netambo, asi kutaura zvazviri anongedzo kune buffer ari kufamba ipapo, uye mabhayiti akaomeswa haana kukopa chero kupi, uye nekudaro mabuffer akafanana anoshandiswa zvakare uyezve, uye iyo inoshanda sisitimu inofara kuzvitorera iwe pachako zvinhu zvayakagadzirirwa, seyakavanzika kaviri-buffering yeaya mabheji e-byte, uye hausisiri kugaya kuburikidza nekusingaperi rukova rwe data risingakoshi. Nenzira, iwe unonzwisisa here kuti kana uchishanda neGC, inovimbiswa kuti yega yega yekugoverwa haizoonekwe kune processor mushure mekupedzisira GC kutenderera? Naizvozvo, zvese izvi hazvigone kunge zviri mu cache, uye ipapo 100% yakavimbiswa kupotsa inoitika. Paunenge uchishanda nechinongedzo, pa x86, kubvisa rejista kubva mundangariro kunotora 1-2 wachi, uye kana izvi zvingoitika, unobhadhara, kubhadhara, kubhadhara, nekuti chiyeuchidzo chiripo. NINE caches - uye uyu ndiwo mutengo wekugoverwa kwendangariro. Kukosha chaiko.

Mune mamwe mazwi, zvimiro zve data ndicho chinhu chakaomesesa kuchinja. Uye kana iwe uchinge waona kuti wasarudza isiriyo data chimiro chinozouraya kuita gare gare, pane kazhinji basa rakawanda rinofanira kuitwa, asi ukasadaro, zvinhu zvinotowedzera. Chekutanga pane zvese, iwe unofanirwa kufunga nezve data zvimiro, izvi zvakakosha. Mutengo mukuru pano unowira pane mafuta data zvimiro, izvo zviri kutanga kushandiswa muchimiro che "Ndakakopa data chimiro X mune data chimiro Y nekuti ini ndinoda chimiro cheY zvirinani." Asi iyo kopi mashandiro (inoita seyakachipa) inotambisa ndangariro bandwidth uye ndipo panovigwa nguva yese yakarasika yekuuraya. Kana ndine hofori tambo yeJSON uye ini ndichida kuishandura kuita yakarongeka DOM muti wePOJOs kana chimwe chinhu, kushanda kwekucheka tambo iyoyo nekuvaka iyo POJO, uyezve kuwana iyo POJO zvakare gare gare, zvinozoguma nemutengo usingakoshi - ndizvo. kwete zvakachipa. Kunze kwekunge iwe uchimhanya uchitenderedza maPOJO kakawanda kupfuura iwe unomhanyisa tambo. Offhand, iwe unogona panzvimbo pacho kuedza kubvisa tambo uye kubvisa chete izvo zvaunoda kubva ipapo, pasina kuishandura kuita chero POJO. Kana zvese izvi zvikaitika munzira inodiwa kuita kwakanyanya, hapana maPOJO ako, iwe unofanirwa kuchera mutsetse zvakananga.

Sei uchigadzira mutauro wako wepurogiramu

Andrei: Iwe wakataura kuti kuti unzwisise mutengo wemhando, unofanirwa kunyora yako wega mutauro mudiki ...

Cliff: Kwete mutauro, asi muunganidzi. Mutauro nemuunganidzi zvinhu zviviri zvakasiyana. Musiyano wakanyanya kukosha uri mumusoro mako. 

Andrei: Nenzira, sekuziva kwangu, uri kuyedza kugadzira mitauro yako. Yechii?

Cliff: Nokuti ndinogona! I'm semi-retired, saka iyi ndiyo hobby yangu. Ndanga ndichishandisa mitauro yevamwe hupenyu hwangu hwese. Iniwo ndakashanda zvakanyanya pamaitiro angu ekukodha. Uye zvakare nekuti ndinoona matambudziko mune mimwe mitauro. Ndinoona kuti kune nzira dziri nani dzekuita zvinhu zvinozivikanwa. Uye ndaizovashandisa. Ndangoneta nekuona matambudziko mandiri, muJava, muPython, mune chero mumwe mutauro. Ini zvino ndinonyora muReact Native, JavaScript uye Elm sechinhu chekuzvivaraidza chisiri chekurega basa, asi nezvebasa rinoshanda. Ini zvakare ndinonyora muPython uye, kazhinji, ndicharamba ndichishanda pamushini wekudzidza kweJava backends. Kune mitauro yakawanda yakakurumbira uye ese ane anonakidza maficha. Wese munhu akanaka munzira yake uye unogona kuedza kuunza zvese izvi maficha pamwechete. Saka, ndiri kudzidza zvinhu zvinondifadza, maitiro emutauro, ndichiedza kuunza semantics inonzwisisika. Uye kusvika ikozvino ndiri kubudirira! Parizvino ndiri kunetsekana nememory semantics, nekuti ndinoda kuva nazvo senge muC neJava, uye ndiwane yakasimba memory modhi uye memory semantics yemitoro nezvitoro. Panguva imwecheteyo, ita otomatiki mhando inference senge muHaskell. Pano, ndiri kuyedza kusanganisa Haskell-senge mhando inference nebasa rekurangarira muC uye Java. Izvi ndizvo zvandanga ndichiita kwekupedzisira 2-3 mwedzi, semuenzaniso.

Andrei: Kana ukavaka mutauro unotora zvinhu zviri nani kubva kune mimwe mitauro, unofunga kuti mumwe munhu achaita zvakapesana here: tora pfungwa dzako wodzishandisa?

Cliff: Izvi ndizvo chaizvo zvinoita mitauro mitsva! Sei Java yakafanana neC? Nemhaka yokuti C yakanga ine syntax yakanaka iyo munhu wose ainzwisisa uye Java yakafuridzirwa neiyi syntax, ichiwedzera rudzi rwekuchengetedzwa, array bounds checking, GC, uye vakavandudzawo zvimwe zvinhu kubva kuC. Vakawedzera ivo pachavo. Asi ivo vakafemerwa zvakanyanya, handiti? Munhu wese anomira pamapendekete ehofori dzakakutangirai - ndiko kufambiswa kunoitwa.

Andrei: Sekunzwisisa kwandinoita, mutauro wako uchachengetedzwa mundangariro. Wakambofunga nezve kuita chimwe chinhu senge yekukwereta cheki kubva kuRust? Wamutarisa, unofungei nezvake?

Cliff: Zvakanaka, ndanga ndichinyora C kwemazera, nezvose izvi malloc uye zvemahara, uye nemaoko kutonga hupenyu hwese. Iwe unoziva, 90-95% yenguva inodzorwa nemaoko yehupenyu ine chimiro chakafanana. Uye zvinorwadza kwazvo kuzviita nemaoko. Ndinoda kuti mugadziri angokuudza zviri kuitika ipapo uye zvawakawana nezviito zvako. Kune zvimwe zvinhu, kukwereta cheki kunoita izvi kunze kwebhokisi. Uye inofanirwa kuratidza ruzivo, kunzwisisa zvese, uye kwete kutondiremedza nekupa kunzwisisa uku. Inofanira kuita kanenge ongororo yekutiza kwenzvimbo, uye chete kana ikatadza, zvino inoda kuwedzera zvinyorwa zvinotsanangura hupenyu hwese - uye chirongwa chakadaro chakaomarara kupfuura cheki chekukwereta, kana zvechokwadi chero chiripo chendangariro chekutarisa. Sarudzo pakati pe "zvose zvakanaka" uye "handinzwisisi chero chinhu" - kwete, panofanira kuva nechimwe chinhu chiri nani. 
Saka, semunhu akanyora yakawanda kodhi muC, ndinofunga kuti kuva nerutsigiro rweotomatiki hupenyu hwekutonga ndicho chinhu chakakosha. Ini zvakare ndakadyiswa nekuti yakawanda sei Java inoshandisa ndangariro uye chichemo chikuru iGC. Paunogovera ndangariro muJava, hauzodzose ndangariro yaive yemunharaunda paGC yekupedzisira kutenderera. Izvi handizvo mumitauro ine ndangariro dzakanyatsoita manejimendi. Kana iwe ukadaidza malloc, unobva wawana ndangariro yaiwanzo shandiswa. Kazhinji iwe unoita zvimwe zvinhu zvenguva pfupi nendangariro uye nekukurumidza unodzosa. Uye pakarepo inodzokera kune malloc dziva, uye inotevera malloc cycle inoiburitsa kunze zvakare. Naizvozvo, kushandiswa chaiko kwendangariro kunoderedzwa kusvika kune seti yezvinhu zvipenyu panguva yakatarwa, pamwe nekuvuza. Uye kana zvese zvikasadonhedza nenzira isina kuchena, yakawanda yendangariro inopera mu cache uye processor, uye inoshanda nekukurumidza. Asi inoda yakawanda yemanyorero ndangariro manejimendi ine malloc uye yemahara yakadanwa nenzira kwayo, munzvimbo chaiyo. Ngura inogona kubata izvi nemazvo pachayo, uye muzviitiko zvakawanda inopa kunyange zvirinani kuita, sezvo ndangariro kushandiswa kwakaderedzwa kusvika kune yazvino computation - kupesana nekumirira inotevera GC kutenderera kusunungura ndangariro. Nekuda kweizvozvo, takawana nzira inonakidza yekuvandudza mashandiro. Uye zvine simba kwazvo - ndinoreva, ndakaita zvinhu zvakadaro pakugadzirisa data yefintech, uye izvi zvakanditendera kuti ndiwane kukurumidza kanosvika kashanu. Uku kukwidziridzwa kukuru, kunyanya munyika umo ma processor asiri kukurumidza uye isu takamirira kuvandudzwa.

Performance Injiniya Basa

Andrei: Ndokumbirawo kubvunza nezve mabasa mune general. Iwe wakasimuka kuita mukurumbira nebasa rako reJIT kuHotSpot uye wobva watamira kuAzul, iri zvakare kambani yeJVM. Asi isu tanga tave kushanda zvakanyanya pane Hardware pane software. Uye ipapo vakangoerekana vachinja kuenda kuBig Data uye Kudzidza kwemuchina, vobva vaona hutsotsi. Izvi zvakaitika sei? Idzi inzvimbo dzakasiyana dzebudiriro.

Cliff: Ndanga ndichironga kwenguva yakareba uye ndakwanisa kutora akawanda makirasi akasiyana. Uye kana vanhu vachiti: "o, iwe ndiwe wakaita JIT yeJava!", zvinogara zvichisetsa. Asi zvisati zvaitika, ndanga ndichishanda pane imwe clone yePostScript - mutauro wakamboshandiswa naApple kune ayo anodhinda laser. Uye izvi zvisati zvaitika ndakaita kushandiswa kwemutauro weForth. Ini ndinofunga iyo yakajairika dingindira kwandiri ndeyekuvandudza chishandiso. Hupenyu hwangu hwese ndanga ndichigadzira zvishandiso izvo vamwe vanhu vanonyora zvirongwa zvavo zvinotonhorera. Asi ini ndakabatanidzwawo mukugadzirwa kwemaitiro ekushanda, vatyairi, kernel-level debuggers, mitauro yekuvandudza OS, iyo yakatanga zvishoma, asi nekufamba kwenguva yakawedzera kuoma. Asi musoro mukuru uchiri kugadzirwa kwezvishandiso. Chikamu chikuru chehupenyu hwangu chakapfuura pakati peAzul neSun, uye yaive yeJava. Asi pandakapinda muBig Data uye Kudzidza kweMuchina, ndakapfeka ngowani yangu yemhando yepamusoro ndokuti, "Ah, ikozvino tine dambudziko risiri diki, uye kune zvinhu zvakawanda zvinonakidza zviri kuitika uye vanhu vari kuita zvinhu." Iyi inzira huru yebudiriro yekutora.

Hongu, ini ndinoda chaizvo kugoverwa komputa. Basa rangu rokutanga rakanga riri somudzidzi muC, pachirongwa chokushambadzira. Izvi zvakagovaniswa komputa paZilog Z80 machipi akaunganidza data yeanalog OCR, yakagadzirwa neanalog analyzer chaiyo. Yakanga iri nyaya inotonhorera uye inopenga zvachose. Asi paive nemaproblems, chimwe chikamu hachina kuzivikanwa nemazvo, saka waitoda kuburitsa pikicha woratidza munhu anga atoverenga nemeso oreporter zvayataura, saka paive nemabasa ane data, nemabasa aya. vaiva nemutauro wavo . Paive nebackend yakagadzirisa zvese izvi - Z80s ichimhanya ichienderana nevt100 terminals ichimhanya - imwe pamunhu, uye pakanga paine yakafanana programming modhi paZ80. Chimwe chikamu chendangariro chakajairika chakagovaniswa nemaZ80 ese mukati mekugadzirisa nyeredzi; Iyo backplane yakagovaniswawo, uye hafu ye RAM yakagovaniswa mukati metiweki, uye imwe hafu yaive yakavanzika kana kuenda kune chimwe chinhu. A zvine revo yakaoma parallel distributed system ine share... semi-shared memory. Izvi zvaive rini ... ini handitomboyeuke, pane imwe nzvimbo pakati pe80s. Kare kare. 
Hongu, ngatifungei kuti makore 30 inguva refu kwazvo yapfuura. Beowulf-masumbu. Masumbu akadaro anoita senge ... Semuyenzaniso: pane Ethernet uye yako yekukurumidza x86 yakabatana neEthernet iyi, uye ikozvino iwe unoda kuwana fake yakagovaniswa ndangariro, nekuti hapana aigona kuita akagovera computing coding ipapo, zvaive zvakanyanya kuoma uye saka ipapo. yaive yekunyepedzera yakagovaniswa ndangariro nemapeji ekuchengetedza ekuchengetedza pa x86, uye kana ukanyorera kune ino peji, saka takaudza mamwe ma processor kuti kana vakawana imwechete yakagovaniswa ndangariro, inoda kutakurwa kubva kwauri, uye nekudaro chimwe chinhu senge protocol yekutsigira. cache coherence yakaonekwa uye software yeizvi. Inonakidza pfungwa. Chinetso chaicho, chokwadika, chakanga chiri chimwe chinhu. Zvese izvi zvakashanda, asi wakakurumidza kuwana matambudziko ekuita, nekuti hapana ainzwisisa maitiro ekuita padanho rakakwana - ndeapi maitiro ekuwana ndangariro aivepo, maitiro ekuita chokwadi chekuti node hadzina kusingaperi ping imwe neimwe, zvichingodaro.

Zvandakauya nazvo muH2O ndezvekuti ivo vanogadzira ivo pachavo vane basa rekuona kuti parallelism yakavanzika papi uye paisiri. Ndakauya nemhando yekodhi iyo yakaita kuti kunyora kwepamusoro-kuita kodhi kuve nyore uye nyore. Asi kunyora kodhi inononoka kwakaoma, ichaita seyakashata. Iwe unofanirwa kuedza zvakanyanya kunyora zvishoma nezvishoma kodhi, iwe uchafanirwa kushandisa dzisiri-yakajairwa nzira. Iyo braking code inoonekwa pakutanga kuona. Nekuda kweizvozvo, iwe unowanzo nyora kodhi iyo inomhanya nekukurumidza, asi iwe unofanirwa kufunga kuti chii chaunofanira kuita muchiitiko chekugovana ndangariro. Zvese izvi zvakasungirirwa kune akakura arrays uye maitiro aripo akafanana neasina kuvhurika akakura arrays mune yakafanana Java. Ndinoreva, fungidzira kuti tambo mbiri dzinonyora kune dzakafanana, imwe yacho inokunda, uye imwe, saizvozvo, inorasikirwa, uye iwe hauzive kuti ndeipi. Kana zvisiri kushanduka, saka kurongeka kunogona kuve chero chaunoda - uye izvi zvinoshanda chaizvo. Vanhu vane hanya chaizvo nezve kurongeka kwekushanda, vanoisa kusagadzikana munzvimbo chaidzo, uye vanotarisira matambudziko ane chekuita nendangariro munzvimbo chaidzo. Zvikasadaro, vaingonyora kodhi nenzira yezvishwe kubva pa1 kuenda kuN, uko N iri matrillions, netariro yekuti nyaya dzese dzakaomarara dzinozongofanana - uye hazvishande ipapo. Asi muH2O iyi haisi Java kana Scala; unogona kuzvitora se "Java minus minus" kana uchida. Iyi ndiyo yakanyatsojeka programming style uye yakafanana nekunyora nyore C kana Java kodhi ine zvishwe uye arrays. Asi panguva imwecheteyo, chiyeuchidzo chinogona kugadziriswa mu terabytes. Ndichiri kushandisa H2O. Ini ndinoishandisa nguva nenguva mumapurojekiti akasiyana - uye ichiri chinhu chinokurumidza, makumi enguva nekukurumidza kupfuura vakwikwidzi vayo. Kana iwe uri kuita Big Data ine columnar data, zvakanyanya kuoma kurova H2O.

Matambudziko Ounyanzvi

Andrei: Ndeipi yanga iri dambudziko rako guru mubasa rako rose?

Cliff: Tiri kukurukura nezvehunyanzvi kana kwete-technical chikamu chenyaya? Ndingati matambudziko makuru haasi ehunyanzvi. 
Kana zviri zvehunyanzvi matambudziko. Ndakangovakunda. Ini handitomboziva kuti chikuru chaive chii, asi pakanga paine zvimwe zvinonakidza zvaitora nguva yakati rebei, kunetsa kwepfungwa. Pandakaenda kuZuva, ndaiva nechokwadi chokuti ndaizoita muumbi wekukurumidza, uye boka revakuru rakati mukupindura kuti handingambobudiriri. Asi ini ndakatevera nzira iyi, ndakanyora compiler pasi kune register allocator, uye yaimhanya chaizvo. Yakanga yakakurumidza seC1 yemazuva ano, asi iyo allocator yakanga ichinonoka zvikuru kumashure, uye mukutarisa kwaiva dambudziko guru rekugadzirisa data. Ini ndaida kuti inyore graphical register allocator uye ini handina kunzwisisa dambudziko pakati pekutaura kwekodhi uye kumhanya, yaivepo panguva iyoyo uye yaive yakakosha. Zvakazoitika kuti iyo data chimiro kazhinji inodarika saizi yecache pa x86s yenguva iyoyo, uye saka, kana ini pakutanga ndaifunga kuti register allocator yaizoshanda 5-10 muzana yenguva yakazara yejitter, ipapo muchokwadi zvakazoitika. 50 muzana.

Sezvo nguva yaifamba, mugadziri akawedzera kuchena uye akanyatsoshanda, akarega kuunza kodhi inotyisa mune dzimwe nguva, uye kuita kwakawedzera kwakatanga kufanana nezvinogadzirwa nemuumbi weC. Kunze kwekunge, chokwadi, iwe unonyora chimwe chipenga icho kunyange C hachikurumidze. . Kana iwe ukanyora kodhi senge C, iwe unowana kuita senge C mune dzimwe nyaya. Uye iwe uchienda mberi, kazhinji iwe wakawana kodhi iyo asymptotically inoenderana nenhanho C, iyo register allocator yakatanga kutaridzika sechinhu chakakwana ... zvisinei nekuti kodhi yako inomhanya nekukurumidza kana kunonoka. Ndakaramba ndichishanda pane iyo allocator kuti iite sarudzo dziri nani. Akave anononoka uye anononoka, asi akapa zvirinani uye zvirinani kuita mumamiriro ezvinhu apo pasina mumwe munhu aigona kurarama. Ini ndaigona kunyura mune register allocator, kuviga mwedzi webasa ipapo, uye kamwe kamwe kodhi yese yaizotanga kuita 5% nekukurumidza. Izvi zvakaitika nguva nenguva uye mugoveri werejista akava chimwe chinhu chebasa reunyanzvi - munhu wese aiida kana kuvenga, uye vanhu vanobva kuchikoro vakabvunza mibvunzo pamusoro wenyaya "nei zvinhu zvose zvichiitwa nenzira iyi", sei kwete. line scan, uye chii chakasiyana. Mhinduro ichiri yakafanana: allocator yakavakirwa pamavara egirafu pamwe nekuchenjerera kushanda ine buffer kodhi yakaenzana nechombo chekukunda, musanganiswa wakanakisa uyo hapana anogona kukunda. Uye ichi chinhu chisiri pachena. Zvimwe zvese zvinoitwa nemuumbi pane zvinhu zvakadzidzwa zvakanaka, kunyangwe zvakaunzwawo padanho reunyanzvi. Ndaigara ndichiita zvinhu zvaifanira kushandura muunganidzi kuita basa reunyanzvi. Asi hapana chimwe cheizvi chaive chinhu chinoshamisa - kunze kweregister allocator. The trick ndeye kungwarira dzora pasi pemutoro uye, kana izvi zvikaitika (ndinogona kutsanangura zvakadzama kana ndichifarira), izvi zvinoreva kuti iwe unogona inline zvakanyanya nehasha, pasina njodzi yekuwira pamusoro pekink muhurongwa hwekuita. Mumazuva iwayo, kwaiva neboka revanhu vakazara, vakarembera nemabhavu nemiridzo, vaiva nevanogovera mazita, asi hapana mumwe munhu aigona kuzviita.

Dambudziko nderekuti kana iwe ukawedzera nzira dziri pasi pe inlining, kuwedzera uye kuwedzera inlining nzvimbo, seti yemakoshero akashandiswa anobva adarika huwandu hwemarejista, uye unofanirwa kuacheka. Iyo yakakosha nhanho inowanzouya kana mugoveri akakanda mapfumo pasi, uye mumiriri akanaka wekudurura akakosha mumwe, iwe unozotengesa zvimwe zvinhu zvesango. Kukosha kwekuisa mukati apa ndekwekuti iwe unorasikirwa nechikamu chepamusoro, pamusoro pekufona nekuchengetedza, iwe unogona kuona kukosha mukati uye unogona kuwedzera iwo. Mutengo weinlining ndewekuti huwandu hukuru hwehupenyu hwehupenyu hunoumbwa, uye kana yako regista allocator ikapisa kupfuura zvinodikanwa, iwe unobva warasikirwa. Naizvozvo, vazhinji vanogovera vane dambudziko: kana inlining ichiyambuka mutsara, zvese zviri munyika zvinotanga kudzikiswa uye kubereka kunogona kudonhedzwa pasi muchimbuzi. Avo vanoita compiler vanowedzera mamwe heuristics: semuenzaniso, kumisa inlining, kutanga nehukuru hwakakwana, sezvo kugoverwa kuchaparadza zvese. Aya ndiwo magadzirirwo anogadzirwa kink mugirafu rekuita - iwe inline, inline, kuita kunokura zvishoma nezvishoma - uyezve boom! - inowira pasi sejeki inomhanya nekuti wakanyanya kuwanda. Aya ndiwo maitiro akashanda zvese pamberi pekuuya kweJava. Java inoda yakawandisa inlining, saka ndaifanira kuita kuti mugoveri wangu ave nehasha kuitira kuti ikwire kunze kwete kupaza, uye kana iwe ukapinda zvakanyanya, inotanga kupera, asi iyo "hapasisina kudurura" nguva ichiri kuuya. Uku kucherekedza kunonakidza uye zvakangouya kwandiri pasina pese, zvisiri pachena, asi zvakabhadhara zvakanaka. Ndakatora inlining zvine hukasha uye zvakandiendesa kunzvimbo dzinoshanda Java neC padivi nepadivi. Ivo vari pedyo chaizvo - ndinogona kunyora Java kodhi inokurumidza kupfuura C kodhi uye zvinhu zvakadaro, asi paavhareji, mumufananidzo mukuru wezvinhu, zvakada kuenzaniswa. Ini ndinofunga chikamu chekukodzera uku ndeye register allocator, iyo inonditendera kuti ndiite inline sehupenzi sezvinobvira. Ini ndinongoisa zvese zvandinoona. Mubvunzo uri pano ndewekuti mugoveri anoshanda nemazvo, kana mhedzisiro yacho iri nehungwaru kushanda kodhi. Iri rakanga riri dambudziko guru: kunzwisisa zvose izvi uye kuita kuti zvishande.

Zvishoma nezve rejista yekugovera uye akawanda-cores

Vladimir: Matambudziko akaita sekugoverwa kwerejista anoita senge imwe mhando yenyaya isingaperi, isingaperi. Hameno kuti pane pakambove nekamwe kapfungwa kaiita senge kari kuvimbisa ndokuzotadza kushanda here?

Cliff: Zvirokwazvo! Register allocation inzvimbo yaunoyedza kutsvaga mamwe heuristics kugadzirisa NP-yakazara dambudziko. Uye haugone kuwana mhinduro yakakwana, handiti? Izvi hazvigoneki. Tarisa, Pamberi peNguva kuunganidzwa - inoshandawo zvisina kunaka. Nhaurirano pano ndeyedzimwe nyaya dzeavhareji. Nezve kuita kwakajairika, saka iwe unogona kuenda uye kuyera chimwe chinhu chaunofunga kuti chakanaka chakajairika kuita - mushure mezvose, uri kushanda kuti uvandudze! Register allocation inyaya yezvekuita. Paunenge uine yekutanga prototype, inoshanda uye inopenda izvo zvinodiwa, basa rekuita rinotanga. Unofanira kudzidza kuyera zvakanaka. Nei zvichikosha? Kana uine data rakajeka, unogona kutarisa nzvimbo dzakasiyana uye ona: hongu, yakabatsira pano, asi ndipo pakaputsika zvinhu zvose! Mamwe mazano akanaka anouya, iwe unowedzera itsva heuristics uye kamwe kamwe zvese zvinotanga kushanda zvishoma zvirinani paavhareji. Kana kuti haina kutanga. Ndakanga ndiine nyaya dzakawanda dzatairwira kuti tiite zvishanu kubva muzana izvo zvaisiyanisa budiriro yedu kubva kune yakapfuura allocator. Uye pese pazvinotaridzika seizvi: kumwe kwaunohwina, kumwe kwaunorasikirwa. Kana iwe uine yakanaka maturusi ekuongorora maitiro, unogona kuwana anorasika mazano uye unzwisise kuti sei vachikundikana. Zvichida zvakakosha kusiya zvese sezvazviri, kana kutora imwe nzira yakakomba yekugadzirisa zvakanaka, kana kubuda uye kugadzirisa chimwe chinhu. Iboka rose rezvinhu! Ini ndakagadzira iyi inotonhorera hack, asi ini ndinodawo iyi, uye iyi, uye iyi - uye musanganiswa wavo wakakwana unopa kumwe kuvandudzwa. Uye vanosurukirwa vanogona kukundikana. Ichi ndicho chimiro chekushanda kwebasa paNP-yakazara matambudziko.

Vladimir: Mumwe anowana manzwiro ekuti zvinhu zvakaita sekupenda mugorowa idambudziko rakatogadziriswa. Zvakanaka, zvakasarudzirwa iwe, uchitonga nezvauri kutaura, saka zvakatofanira ipapo ...

Cliff: Haina kugadziriswa saizvozvo. Ndiwe unofanira kuishandura kuita "yakagadziriswa". Pane matambudziko akaoma uye anoda kugadziriswa. Kana izvi zvangoitwa, yave nguva yekushanda pakubudirira. Iwe unofanirwa kusvika kune iri basa nenzira kwayo - ita mabhenji, unganidza metrics, tsanangura mamiriro ezvinhu apo, pawakatenderedza uchidzokera kune yakapfuura vhezheni, hack yako yekare yakatanga kushanda zvakare (kana zvinopesana, yakamira). Uye usakanda mapfumo pasi kusvikira wawana chimwe chinhu. Sezvandambotaura, kana paine mazano anotonhorera asina kushanda, asi mumunda wekugoverwa kwemarejista emafungiro anenge asingagumi. Unogona, semuenzaniso, kuverenga zvinyorwa zvesainzi. Kunyangwe iye zvino nzvimbo iyi yakatanga kufamba zvishoma nezvishoma uye yave yakajeka kupfuura muhuduku hwayo. Zvisinei, kune vanhu vasingaverengeki vari kushanda mundima iyi uye mazano avo ose akakodzera kuedza, vose vakamirira mumapapiro. Uye haugone kutaura kuti vakanaka sei kunze kwekunge waedza ivo. Vanobatana sei nezvimwe zvese mugoveri wako, nekuti mugoveri anoita zvinhu zvakawanda, uye mamwe mazano haashande mune yako chaiyo allocator, asi mune imwe allocator ivo vanozviita nyore. Nzira huru yekukunda kune anogovera ndeyekudhonza zvinhu zvinononoka kunze kwenzira huru uye kumanikidzira kuti iparadzanise nemiganhu yenzira dzinononoka. Saka kana iwe uchida kumhanya GC, tora nzira inononoka, gadzirisa, kanda zvakasarudzika, zvese izvo zvinhu - iwe unoziva zvinhu izvi hazviwanzo. Uye ivo vashoma chaizvo, ndakatarisa. Iwe unoita basa rekuwedzera uye rinobvisa zvakawanda zvinorambidzwa munzira idzi dzinononoka, asi hazvina basa nekuti dzinononoka uye hadziwanzo famba. Semuenzaniso, null pointer - hazvimboitika, handiti? Iwe unofanirwa kuve nemakwara akati wandei ezvinhu zvakasiyana, asi haafanire kukanganisa iyo huru. 

Vladimir: Unofungei nezve-multi-cores, kana paine zviuru zvemacores kamwechete? Ichi chinhu chinobatsira here?

Cliff: Kubudirira kweGPU kunoratidza kuti inobatsira!

Vladimir: Ivo vakanyatso hunyanzvi. Zvakadiniko nezve general purpose processors?

Cliff: Zvakanaka, ndiyo yaive bhizinesi reAzul. Mhinduro yakadzoka munguva apo vanhu vainyanya kuda kufanofungidzira kuita. Zvakanga zvakaoma kunyora parallel code kumashure. Iyo H2O coding modhi yakanyanya scalable, asi haisi yemhando yechinangwa modhi. Pamwe zvishoma zvakajairika pane kana uchishandisa GPU. Tiri kutaura pamusoro pekuoma kwekugadzira chinhu chakadaro kana kuoma kwekuishandisa? Semuyenzaniso, Azul akandidzidzisa chidzidzo chinonakidza, chisiri pachena: madiki madiki akajairwa. 

Dambudziko guru muupenyu

Vladimir: Zvakadini nematambudziko asiri ehunyanzvi?

Cliff: Dambudziko guru rakanga risiri rokuva... ane mutsa uye akanaka kuvanhu. Uye somuuyo, ndaigara ndichizviwana ndiri mumigariro yokusawirirana kukuru. Idzo dzandaiziva kuti zvinhu zvakanga zvisina kumira zvakanaka, asi ndakanga ndisingazivi kuti ndofambira mberi sei nematambudziko iwayo uye ndakatadza kuzvigadzirisa. Zvinetso zvakawanda zvenguva refu, zvakagara kwemakumi emakore, zvakamuka nenzira iyi. Icho chokwadi chekuti Java ine C1 uye C2 compilers ndeye yakananga mhedzisiro yeizvi. Icho chokwadi chekuti pakanga pasina kuunganidzwa kwemazinga akawanda muJava kwemakore gumi mumutsara zvakare mhedzisiro yakananga. Zviripachena kuti taida hurongwa hwakadai, asi hazvisi pachena kuti sei hwakanga husipo. Ndakanga ndine matambudziko neimwe injiniya ... kana boka remainjiniya. Pane imwe nguva, pandakatanga kushanda paZuva, ndaive ... Zvakanaka, kwete chete ipapo, ini kazhinji ndinogara ndine maonero angu pane zvose. Uye ini ndaifunga kuti ichokwadi kuti unogona kungotora chokwadi chako ichi wozvitaura pamberi. Kunyanya sezvo ndaikatyamadza chokwadi nguva zhinji. Uye kana iwe usingadi nzira iyi ... kunyanya kana iwe uri pachena usina kururama uye uchiita zvisina maturo ... Kazhinji, vanhu vashomanana vanogona kushivirira iyi nzira yekukurukurirana. Kunyangwe vamwe vaigona, seni. Ndakavaka hupenyu hwangu hwese pamisimboti yakanaka. Kana ukandiratidza chimwe chinhu chakaipa, ndinobva ndatendeuka ndokuti: wataura zvisina maturo. Panguva imwe chete, hongu, ndinokumbira ruregerero uye zvose izvo, ndichacherechedza zvakakodzera, kana zviripo, uye tora zvimwe zviito zvakarurama. Kune rimwe divi, ini ndiri kushamisa kwazvo nezve chikamu chinokatyamadza chikuru chenguva yese. Uye hazvishande zvakanyanya muhukama nevanhu. Handisi kuedza kuva akanaka, asi ndiri kubvunza mubvunzo wakajeka. "Izvi hazvimboshanda, nekuti imwe, mbiri nenhatu." Uye ivo vakati, "Ah!" Kwakanga kune mimwe miuyo iyo zvimwe yakanga iri nani kufuratira: somuenzaniso, iyo yakatungamirira kukurambana nomudzimai wangu uye makore gumi okuora mwoyo pashure paikoko.

Dambudziko kurwa nevanhu, nemaonero avo ezvaunokwanisa kana zvausingakwanise kuita, zvakakosha nezvisina. Paive nematambudziko akawanda pamusoro pemaitiro ekukodha. Ndichiri kunyora kodhi yakawanda, uye mumazuva iwayo ndaitofanira kuderera nokuti ndaiita mabasa akawanda akafanana uye ndichiaita zvisina kunaka, pane kuisa pfungwa pane imwe. Ndichitarisa kumashure, ndakanyora hafu yekodhi yeJava JIT command, iyo C2 command. Iyo inotevera inokurumidza kodha yakanyora hafu ichinonoka, imwe inotevera hafu ichinonoka, uye kwaive kuderera kwakanyanya. Munhu wechinomwe mumutsara uyu ainonoka zvikuru - zvinogara zvichiitika! Ndakabata kodhi yakawanda. Ndakatarisa kuti ndiani akanyora izvo, pasina kunze, ndakatarisa kodhi yavo, ndikaongorora imwe neimwe yadzo, uye ndikaramba ndichinyora ini kupfuura chero ipi zvayo. Iyi nzira haina kunyatsoshanda nevanhu. Vamwe vanhu havadi izvi. Uye kana vasingakwanisi kuzvibata, marudzi ose okunyunyuta anotanga. Semuyenzaniso ndakambonzi ndiregedze kukodha nekuti ndainyora kodhi yakawandisa uye zvaikanganisa timu, uye zvese zvaiita sejee kwandiri: shamwari, kana timu yese ikanyangarika ndikaramba ndichinyora kodhi, iwe. Ndichangorasikirwa nehafu zvikwata. Kune rimwe divi, kana ndikaramba ndichinyora kodhi uye iwe ukarasikirwa nehafu yetimu, izvo zvinonzwika senge zvakaipa manejimendi. Handina kumbofunga nezvazvo, handina kumbotaura nezvazvo, asi zvaive zvichiri kumwe mumusoro mangu. Pfungwa yaitenderera mundangariro dzangu: β€œMese muri kundiseka here?” Saka, dambudziko guru raiva ini uye hukama hwangu nevanhu. Iye zvino ndave kuzvinzwisisa zvirinani, ini ndaive mutungamiriri wechikwata chevagadziri vepurogiramu kwenguva yakareba, uye zvino ndinoudza vanhu zvakananga: munoziva, ndini zvandiri, uye muchafanira kubata neni - zvakanaka here kana ndikamira. here? Uye pavakatanga kubata nazvo, zvese zvakashanda. Muchokwadi, handisi akaipa kana akanaka, handina vavariro dzakaipa kana zvishuvo zvoudyire, zvinongori hunhu hwangu, uye ndinofanira kurarama nazvo neimwe nzira.

Andrei: Nguva pfupi yapfuura munhu wese akatanga kutaura nezvekuzviziva kwevanotanga, uye hunyanzvi hwakapfava kazhinji. Ungati kudii nezveizvi?

Cliff: Hongu, ndiko kwaiva kunzwisisa uye chidzidzo chandakawana pakurambana kwandakaita nemudzimai wangu. Zvandakadzidza pakurambana kwacho kwaiva kuzvinzwisisa. Aya ndiwo matangiro andakaita kunzwisisa vamwe vanhu. Nzwisisa kuti kudyidzana uku kunoshanda sei. Izvi zvakaita kuti zviwanikwe imwe pashure peimwe. Paive nekuziva kuti ndini ani uye zvandinomiririra. Ndiri kuitei: zvimwe ndiri kubatikana nebasa, kana kuti ndiri kudzivisa kunetsana, kana chimwewo chinhu - uye iyi nhanho yekuzviziva inobatsira chaizvo kuzvichengeta ndiri mukutonga. Mushure meizvi zvinhu zvose zvinoenda nyore nyore. Chinhu chimwe chete chandakawana kwete mandiri chete, asiwo mune mamwe maprogrammer kusakwanisa kutaura pfungwa kana uri mukushushikana mupfungwa. Semuenzaniso, iwe wakagara ipapo coding, mumamiriro ekuyerera, uye zvino vanouya vachimhanya kwauri uye vanotanga kupopota mune hysterics kuti chimwe chinhu chakaputsika uye zvino matanho akanyanya achatorwa kwauri. Uye haugone kutaura izwi nekuti uri mumamiriro ekushushikana mupfungwa. Ruzivo rwakawanikwa runokutendera kuti ugadzirire nguva ino, urarame uye uenderere mberi kune chirongwa chekudzokera shure, mushure mezvo iwe unogona kuita chimwe chinhu. Saka hongu, paunotanga kuona kuti zvese zvinoshanda sei, chiitiko chikuru chinoshandura hupenyu. 
Ini pachangu handina kuwana mazwi akakodzera, asi ndakarangarira kutevedzana kwezviito. Chiripo ndechekuti kuita uku kwakangofanana nekutaura, uye unoda nzvimbo. Nzvimbo yakadaro, mupfungwa yeZen. Izvi ndizvo chaizvo zvinoda kutsanangurwa, uye ipapo wobva waenda padivi - kungoenda chaiko. Pandinoramba ndakanyarara nemuromo, ndinokwanisa kugadzirisa mamiriro acho ezvinhu. Sezvo iyo adrenaline inosvika kuhuropi hwako, ichichinjisa iwe kurwa kana kubhururuka mode, iwe hauchakwanisa kutaura chero chinhu, kwete - ikozvino uri benzi, injiniya yekurova, isingakwanise kupindura zvine hunhu kana kumisa kurwisa, uye anorwisa akasununguka. kurwisa zvakare uye zvakare. Iwe unofanirwa kutanga wazviita iwe zvakare, torazve kutonga, buda mu "kurwa kana kutiza" modhi.

Uye nokuda kweizvi tinoda nzvimbo yekutaura. Ingori nzvimbo yemahara. Kana iwe ukataura chero chinhu zvachose, iwe unogona kutaura izvo chaizvo, uye wobva waenda uye unonyatsozvitsvakira "nzvimbo": enda kunofamba mupaki, zvivhare iwe mukugeza - hazvina basa. Chinhu chikuru ndechokubvisa kwenguva pfupi kubva kune iyo mamiriro. Paunongodzima kweanenge masekonzi mashoma, kutonga kunodzoka, unotanga kufunga zvakadzikama. "Zvakanaka, ini handisi rudzi rwebenzi, handiite zvinhu zvakapusa, ndiri munhu anobatsira." Paunenge uchinge wakwanisa kuzvisimbisa, inguva yekuenderera kune inotevera nhanho: kunzwisisa zvakaitika. Iwe wakarwiswa, kurwiswa kwakabva kwawanga usingafungire, kwaive kusatendeseka, kuhwandira kwakashata. Izvi zvakaipa. Danho rinotevera nderokunzwisisa kuti sei munhu ari kurova aida izvi. Chaizvoizvo, nei? Zvichida nokuti iye pachake akatsamwa? Anopenga nei? Somuenzaniso, nokuti akazvinyengera uye haagoni kubvuma mutoro? Iyi ndiyo nzira yekunyatsobata mamiriro ese. Asi izvi zvinoda nzvimbo yekufambisa, nzvimbo yekutaura. Danho rokutanga nderokurega kutaura. Dzivisa nhaurirano nemashoko. Kanzura, famba uende nekukurumidza sezvinobvira. Kana iri nhaurirano parunhare, ingodimbura runhare - uhwu hunyanzvi hwandakadzidza kubva mukutaurirana neaimbova mudzimai wangu. Kana nhaurirano yacho isina kwainoenda, ingoti " mofamba zvakanaka" wobva wavhara. Kubva kune rumwe rutivi rwefoni: "blah blah blah", iwe unopindura: "ehe, bye!" wobva wakata. Unongopedza nhaurirano. Maminitsi mashanu gare gare, apo kugona kufunga zvine musoro kunodzokera kwauri, iwe watonhodzwa zvishoma, zvinova zvinogoneka kufunga nezve zvese, zvakaitika uye zvichaitika. Uye tanga kugadzira mhinduro ine mufungo, pane kungoita zvekunzwa. Kwandiri, budiriro mukuzviziva yakanga iri idi chairoiro rokuti kana kuri kushushikana mupfungwa handigoni kutaura. Kubuda mune ino mamiriro, kufunga uye kuronga mapinduriro uye kubhadhara kune matambudziko - aya ndiwo matanho akakodzera muchiitiko kana iwe usingakwanise kutaura. Nzira iri nyore ndeyekutiza mamiriro ezvinhu umo kushushikana kwepfungwa kunozviratidza uye kungorega kutora chikamu mukushushikana uku. Mushure mezvo unokwanisa kufunga, paunokwanisa kufunga, unokwanisa kutaura, zvichingodaro.

Nenzira, mudare, gweta rinopikisa rinoedza kuita izvi kwauri - zvino zviri pachena kuti nei. Nokuti ane simba rokukudzvanyirira kusvika pakadaro zvokuti haugoni kunyange kududza zita rako, somuenzaniso. Mupfungwa chaiyo, hauzokwanisi kutaura. Kana izvi zvikaitika kwauri, uye kana uchiziva kuti uchazviwana wava munzvimbo ine hondo dzemashoko dziri kurwiwa, munzvimbo yakaita sedare, ipapo unogona kuuya negweta rako. Gweta richakumiririra uye kumisa kurwiswa nemashoko, uye richazviita nenzira yepamutemo zvachose, uye nzvimbo yeZen yakarasika ichadzoka kwauri. Semuenzaniso, ndaifanira kufonera mhuri yangu kakati wandei, mutongi aive neushamwari nezve izvi, asi gweta raipokana rakapopota uye rakandipopotera, handina kana kukwanisa kuwana izwi. Muzviitiko izvi, kushandisa murevereri kunoshanda zvakandinakira. Murevereri anomisa kudzvinyirirwa kwese uku kuri kudururira pauri murukova runoenderera, unowana nzvimbo inodiwa yeZen, uye nayo kugona kutaura kunodzoka. Iyi inzvimbo yeruzivo mune zvakawanda zvekudzidza, zvakawanda zvekuwana mukati mako, uye zvese izvi zvinoshanduka kuita sarudzo dzepamusoro-soro dzakasiyana kune vanhu vakasiyana. Vamwe vanhu havana matambudziko atsanangurwa pamusoro; kazhinji, vanhu vane hunyanzvi hwekutengesa vanhu havana. Vanhu vose ava vanorarama nemashoko - vaimbi vane mukurumbira, vananyanduri, vatungamiriri vezvitendero uye vezvematongerwo enyika, vane zvavanoda kutaura. Havana matambudziko akadaro, asi ini ndine.

Andrei: Zvakanga ... zvisingatarisirwi. Hongu, takatotaura zvakawanda uye yave nguva yekugumisa iyi interview. Zvechokwadi tichasangana pamusangano uye tichakwanisa kuenderera mberi nehurukuro iyi. Ndokuona kuHydra!

Iwe unogona kuenderera mberi nehurukuro yako naCliff pamusangano weHydra 2019, uchaitwa muna July 11-12, 2019 muSt. Achauya nereport "Iyo Azul Hardware Transactional Memory chiitiko". Matikiti anogona kutengwa pane webhusaiti yepamutemo.

Source: www.habr.com

Voeg