Kuyankhulana kwakukulu ndi Cliff Click, bambo wa JIT kuphatikiza ku Java

Kuyankhulana kwakukulu ndi Cliff Click, bambo wa JIT kuphatikiza ku JavaCliff Dinani - CTO ya Cratus (IoT sensors for process improvement), woyambitsa ndi woyambitsa nawo oyambitsa angapo (kuphatikiza Rocket Realtime School, Neurensic ndi H2O.ai) okhala ndi zotuluka zingapo zopambana. Cliff adalemba buku lake loyamba ali ndi zaka 15 (Pascal wa TRS Z-80)! Amadziwika kwambiri chifukwa cha ntchito yake pa C2 ku Java (Nyanja ya Nodes IR). Wopangayu adawonetsa dziko lapansi kuti JIT ikhoza kupanga code yapamwamba kwambiri, yomwe inali imodzi mwazinthu zomwe zidayambitsa Java ngati imodzi mwamapulogalamu amakono amakono. Kenako Cliff adathandizira Azul Systems kupanga mainframe 864-core ndi pulogalamu yoyera ya Java yomwe imathandizira GC kuyimitsa pa mulu wa 500-gigabyte mkati mwa 10 milliseconds. Kawirikawiri, Cliff adatha kugwira ntchito pazinthu zonse za JVM.

 
Habrapost iyi ndi zokambirana zabwino ndi Cliff. Tilankhula pamitu iyi:

  • Kusintha kwa kukhathamiritsa kwapang'ono
  • Momwe mungapangire refactoring yayikulu
  • Mtengo Model
  • Maphunziro a kukhathamiritsa otsika
  • Zitsanzo zothandiza za kuwongolera magwiridwe antchito
  • Chifukwa chiyani pangani chilankhulo chanu cha pulogalamu
  • Ntchito ya Engineer Performance
  • Mavuto Aukadaulo
  • Pang'ono za kugawa kaundula ndi ma multi-cores
  • Vuto lalikulu m'moyo

Interview imachitidwa ndi:

  • Andrey Satarin kuchokera ku Amazon Web Services. Mu ntchito yake, adakwanitsa kugwira ntchito zosiyanasiyana: adayesa database ya NewSQL yogawidwa ku Yandex, njira yodziwira mitambo ku Kaspersky Lab, masewera ambiri a Mail.ru ndi ntchito yowerengera mitengo ya ndalama zakunja ku Deutsche Bank. Wokonda kuyesa ma backend akuluakulu ndi machitidwe ogawa.
  • Vladimir Sitnikov kuchokera ku Netcracker. Zaka khumi zogwira ntchito pakuchita komanso kuwopsa kwa NetCracker OS, mapulogalamu omwe amagwiritsidwa ntchito ndi oyendetsa ma telecom kuti azitha kuyendetsa makina ndi zida zogwirira ntchito. Ndimakonda zochitika za Java ndi Oracle Database. Wolemba zakusintha kopitilira khumi ndi awiri mu woyendetsa wovomerezeka wa PostgreSQL JDBC.

Kusintha kwa kukhathamiritsa kwapang'ono

Andrei: Ndinu dzina lalikulu padziko lonse la JIT kuphatikiza, Java, ndi magwiridwe antchito ambiri, sichoncho? 

Cliff: Zili choncho!

Andrei: Tiyeni tiyambe ndi mafunso ena okhudza ntchito yogwira ntchito. Mukuganiza bwanji za kusankha pakati pa kukhathamiritsa kwapamwamba komanso kotsika ngati kugwira ntchito pamlingo wa CPU?

Cliff: Inde, zonse ndi zophweka apa. Khodi yothamanga kwambiri ndi yomwe siyikuyenda. Chifukwa chake, nthawi zonse muyenera kuyamba kuchokera pamlingo wapamwamba, gwiritsani ntchito ma aligorivimu. Kulemba kwa O kwabwinoko kudzaposa mawu oipitsitsa a O, pokhapokha ngati zokhazikika zazikulu zokwanira zitalowererapo. Zinthu zotsika zimapita komaliza. Nthawi zambiri, ngati mwakonza zotsala zanu mokwanira ndipo pali zinthu zina zosangalatsa zomwe zatsala, ndiye kuti ndizochepa. Koma mungayambire bwanji kuchokera pamlingo wapamwamba? Kodi mumadziwa bwanji kuti ntchito zapamwamba zokwanira zachitika? Chabwino ... palibe njira. Palibe maphikidwe okonzeka. Muyenera kumvetsetsa vutoli, sankhani zomwe mukufuna kuchita (kuti musatengepo kanthu mtsogolo) ndiyeno mutha kuwulula wolemba mbiriyo, yemwe anganene chinthu chothandiza. Panthawi ina, mumazindikira kuti mwataya zinthu zosafunikira ndipo ndi nthawi yoti mukonzeko bwino. Izi ndithudi ndi luso lapadera. Pali anthu ambiri omwe amachita zinthu zosafunika, koma akuyenda mofulumira kotero kuti alibe nthawi yodandaula za zokolola. Koma izi zili choncho mpaka funso likubwera momveka bwino. Kawirikawiri 99% ya nthawi palibe amene amasamala zomwe ndikuchita, mpaka nthawi yomwe chinthu chofunika chimabwera panjira yovuta yomwe palibe amene amasamala. Ndipo apa aliyense akuyamba kukuvutitsani za "chifukwa chiyani sizinagwire bwino ntchito kuyambira pachiyambi." Kawirikawiri, nthawi zonse pali chinachake choti chiwongolere pakuchita bwino. Koma 99% ya nthawi mulibe otsogolera! Mukungoyesera kuti chinachake chigwire ntchito ndipo m'kati mwake mumazindikira chomwe chiri chofunikira. Simungathe kudziwa pasadakhale kuti chidutswa ichi chiyenera kukhala changwiro, kotero, kwenikweni, muyenera kukhala angwiro mu chirichonse. Koma izi sizingatheke ndipo simungachite. Nthawi zonse pamakhala zinthu zambiri zokonza - ndipo izi ndizabwinobwino.

Momwe mungapangire refactoring yayikulu

Andrei: Kodi mumagwira ntchito bwanji? Ili ndi vuto lalikulu. Mwachitsanzo, kodi munayamba mwagwirapo ntchito pamavuto omwe amabwera kuchokera pamzere wa magwiridwe antchito ambiri omwe alipo?

Cliff: Ndimayesetsa kupewa. Ngati ndikudziwa kuti kugwira ntchito kudzakhala vuto, ndimaganizira ndisanayambe kukopera, makamaka ndi mapangidwe a data. Koma nthawi zambiri mumazindikira zonsezi pambuyo pake. Ndiyeno muyenera kupita kuzinthu zowonongeka ndikuchita zomwe ndimazitcha "kulembanso ndikugonjetsa": muyenera kutenga chidutswa chachikulu chokwanira. Zina mwazolembazo ziyenera kulembedwanso chifukwa cha zovuta zantchito kapena china chake. Ziribe chifukwa cholemberanso kachidindo, nthawi zonse ndibwino kuti mulembenso chidutswa chachikulu kuposa chaching'ono. Panthawiyi, aliyense akuyamba kunjenjemera ndi mantha: "O Mulungu wanga, simungathe kukhudza code yambiri!" Koma kwenikweni, njira iyi pafupifupi nthawi zonse imagwira ntchito bwino kwambiri. Muyenera kuthana ndi vuto lalikulu nthawi yomweyo, jambulani bwalo lalikulu mozungulira ndikunena kuti: Ndilembanso chilichonse mkati mwa bwalolo. Malire ndi ochepa kwambiri kuposa zomwe zili mkati mwake zomwe ziyenera kusinthidwa. Ndipo ngati kulongosola kwa malire koteroko kumakulolani kuti muchite ntchitoyo mkati mwangwiro, manja anu ali omasuka, chitani zomwe mukufuna. Mukamvetsetsa vutolo, kulemberanso kumakhala kosavuta, choncho ingolumani kwambiri!
Nthawi yomweyo, mukalembanso zazikulu ndikuzindikira kuti ntchito ikhala vuto, mutha kuyamba kuda nkhawa nazo. Izi nthawi zambiri zimasanduka zinthu zosavuta monga "osatengera deta, sungani deta mosavuta momwe mungathere, ichepetseni." M'makalata akuluakulu, pali njira zowonjezera zowonjezera ntchito. Ndipo pafupifupi nthawi zonse amazungulira deta.

Mtengo Model

Andrei: Mu imodzi mwama podcasts mudakamba za zitsanzo zamtengo wapatali pazantchito. Kodi mungafotokoze zomwe munkatanthauza ndi izi?

Cliff: Ndithudi. Ndinabadwa mu nthawi yomwe purosesa inali yofunika kwambiri. Ndipo nthawi iyi ikubwereranso - tsoka silikhala lopanda chisokonezo. Ndinayamba kukhala ndi moyo m'masiku a makina asanu ndi atatu; kompyuta yanga yoyamba inkagwira ntchito ndi 256 byte. Ndendende mabayiti. Zonse zinali zazing'ono kwambiri. Malangizo amayenera kuwerengedwa, ndipo pamene tinkayamba kukweza chinenero cha pulogalamu, zinenero zinawonjezeka kwambiri. Panali Assembler, ndiye Basic, kenako C, ndi C adasamalira zambiri, monga kugawa kaundula ndi kusankha malangizo. Koma zonse zinali zomveka bwino pamenepo, ndipo ngati nditapanga cholozera ku mtundu wosinthika, ndiye kuti ndimapeza katundu, ndipo mtengo wa malangizowa umadziwika. Hardware imapanga kuchuluka kwa makina ozungulira, kotero kuthamanga kwa zinthu zosiyanasiyana kumatha kuwerengedwa mwa kuwonjezera malangizo onse omwe mukuyenda. Kuyerekeza kulikonse / kuyesa / nthambi / kuyimba / katundu / sitolo kutha kuwonjezeredwa ndikunena kuti: ndiyo nthawi yanu yochitira. Pamene mukugwira ntchito kuti muwongolere magwiridwe antchito, mudzamveranso manambala omwe amafanana ndi mafunde ang'onoang'ono otentha. 
Koma mukangosinthira ku Java, Python ndi zinthu zina zofananira, mumachoka mwachangu kuchokera kuzinthu zotsika. Kodi mtengo woyimbira getter ku Java ndi wotani? Ngati JIT mu HotSpot ndiyolondola wokhazikika, idzatsegula, koma ngati sichinachite izi, idzakhala kuyimba foni. Popeza kuyimbako kuli pa loop yotentha, kupitilira kukhathamiritsa kwina konseko. Choncho, mtengo weniweni udzakhala wapamwamba kwambiri. Ndipo nthawi yomweyo mumataya kuthekera koyang'ana kachidindo ndikumvetsetsa kuti tiyenera kuyichita molingana ndi liwiro la wotchi ya purosesa, kukumbukira ndi cache yomwe imagwiritsidwa ntchito. Zonsezi zimakhala zosangalatsa pokhapokha mutalowa muzochitazo.
Tsopano tikupeza kuti tili mumkhalidwe womwe kuthamanga kwa purosesa sikunachuluke kwazaka khumi. Masiku akale abwerera! Simungadalirenso kuchita bwino kwa ulusi umodzi. Koma ngati mwadzidzidzi mulowa mu computing yofanana, ndizovuta kwambiri, aliyense amakuyang'anani ngati James Bond. Kuthamangitsa kakhumi apa nthawi zambiri kumachitika m'malo omwe wina wasokoneza. Concurrency imafuna ntchito yambiri. Kuti mupeze liwiro la XNUMXx, muyenera kumvetsetsa mtengo wake. Kodi ndi ndalama zingati? Ndipo kuti muchite izi, muyenera kumvetsetsa momwe lilime likukhalira pa hardware yapansi.
Martin Thompson adasankha mawu abwino pabulogu yake Chifundo Chamakina! Muyenera kumvetsetsa zomwe hardware idzachita, momwe idzachitire, ndi chifukwa chake imachita zomwe imachita poyamba. Pogwiritsa ntchito izi, ndizosavuta kuyamba kuwerengera malangizo ndikuwona komwe nthawi yopha ikupita. Ngati mulibe maphunziro oyenera, mukungoyang'ana mphaka wakuda m'chipinda chamdima. Ndikuwona anthu akuwongolera magwiridwe antchito nthawi zonse omwe sadziwa zomwe akuchita. Amavutika kwambiri ndipo sakupita patsogolo kwambiri. Ndipo ndikatenga kachidindo komweko, lowetsani ma hacks ang'onoang'ono ndikupeza liwiro la kasanu kapena kakhumi, amakhala ngati: chabwino, sizabwino, tidadziwa kale kuti muli bwino. Zodabwitsa. Ndikulankhula chiyani ... mtengo wamtengo wapatali ndi mtundu wa code yomwe mumalemba komanso momwe imayendera mofulumira pa chithunzi chachikulu.

Andrei: Ndipo mungasunge bwanji voliyumu m'mutu mwanu? Kodi izi zimatheka ndi zokumana nazo zambiri, kapena? Kodi zimenezi zimachokera kuti?

Cliff: Chabwino, sindinapeze chondichitikira changa m'njira yosavuta. Ine anakonza mu Assembly mmbuyo mu masiku pamene inu mukhoza kumvetsa aliyense malangizo. Zikumveka zopusa, koma kuyambira pamenepo malangizo a Z80 akhala akukhalabe m'mutu mwanga, ndikukumbukira. Sindikukumbukira mayina a anthu mkati mwa mphindi imodzi ndikulankhula, koma ndikukumbukira mawu omwe adalembedwa zaka 40 zapitazo. Ndizoseketsa, zikuwoneka ngati syndrome "wasayansi wopusa".

Maphunziro a kukhathamiritsa otsika

Andrei: Kodi pali njira yosavuta yolowera?

Cliff: Inde ndi ayi. Zida zomwe tonse timagwiritsa ntchito sizinasinthe kwambiri pakapita nthawi. Aliyense amagwiritsa ntchito x86, kupatula mafoni a m'manja a Arm. Ngati simukuchita mtundu wina wa hardcore embedding, mukuchita zomwezo. Chabwino, chotsatira. Malangizowo sanasinthe kwa zaka mazana ambiri. Muyenera kupita kukalemba chinachake mu Assembly. Osati zambiri, koma zokwanira kuti tiyambe kumvetsa. Ukumwetulira, koma ndikulankhula motsimikiza. Muyenera kumvetsetsa kulumikizana pakati pa chilankhulo ndi zida. Pambuyo pake muyenera kupita ndikulemba pang'ono ndikupanga chojambula chaching'ono cha chilankhulo chaching'ono. Zofanana ndi zoseweretsa zikutanthauza kuti ziyenera kupangidwa munthawi yoyenera. Zitha kukhala zophweka kwambiri, koma ziyenera kupanga malangizo. Kuchita kupanga malangizo kudzakuthandizani kumvetsetsa mtengo wamtengo wapatali wa mlatho pakati pa code yapamwamba yomwe aliyense amalemba ndi makina a makina omwe amayendetsa pa hardware. Makalata awa adzawotchedwa mu ubongo panthawi yomwe wolembayo amalembedwa. Ngakhale yosavuta compiler. Pambuyo pake, mutha kuyamba kuyang'ana Java komanso kuti phompho lake la semantic ndilozama kwambiri, ndipo zimakhala zovuta kwambiri kumanga milatho pamwamba pake. Ku Java, ndizovuta kwambiri kumvetsetsa ngati mlatho wathu udakhala wabwino kapena woyipa, zomwe zingawapangitse kusweka komanso zomwe sizingachitike. Koma mufunika mtundu wina woyambira pomwe mumayang'ana kachidindo ndikumvetsetsa: "Inde, wojambula uyu ayenera kulembedwa nthawi zonse." Ndiyeno zimakhala kuti nthawi zina izi zimachitika, kupatulapo pamene njirayo imakhala yaikulu kwambiri, ndipo JIT imayamba kulowetsa chirichonse. Kachitidwe ka malo oterowo tinganeneretu nthawi yomweyo. Nthawi zambiri ma getters amagwira ntchito bwino, koma ndiye mumayang'ana malupu akulu otentha ndikuzindikira kuti pali mafoni ena omwe akuyandama pamenepo omwe samadziwa zomwe akuchita. Ili ndilo vuto la kufalikira kwa ma getters, chifukwa chomwe iwo sanalowetsedwe ndikuti sizidziwika ngati iwo ndi getter. Ngati muli ndi kachidindo kakang'ono kwambiri, mutha kungokumbukira ndikunena kuti: iyi ndi getter, ndipo iyi ndi setter. Pazigawo zazikulu za code, ntchito iliyonse imakhala ndi mbiri yake, yomwe, kawirikawiri, sadziwika kwa aliyense. Wolemba mbiriyo akuti tidataya 24% yanthawiyo pa loop ndikumvetsetsa zomwe loop ikuchita, tiyenera kuyang'ana ntchito iliyonse mkati. Ndizosatheka kumvetsetsa izi popanda kuphunzira ntchitoyi, ndipo izi zimachepetsa kwambiri kumvetsetsa. Ichi ndichifukwa chake sindigwiritsa ntchito ma getters ndi setters, ndafika pamlingo watsopano!
Mungapeze kuti mtengo wamtengo wapatali? Chabwino, inu mukhoza kuwerenga chinachake, ndithudi^Koma ine ndikuganiza njira yabwino ndi kuchita. Kupanga compiler yaying'ono kudzakhala njira yabwino kwambiri yomvetsetsa mtengo wamtengo wapatali ndikuwuyika m'mutu mwanu. Kapangidwe kakang'ono kamene kangakhale koyenera kupanga ma microwave ndi ntchito kwa oyamba kumene. Chabwino, ndikutanthauza, ngati muli ndi luso la mapulogalamu, ndiye kuti ziyenera kukhala zokwanira. Zinthu zonsezi monga kugawa chingwe chomwe muli nacho ngati mtundu wa mawu a algebraic, kuchotsa malangizo ogwiritsira ntchito masamu kuchokera pamenepo mu dongosolo lolondola, kutenga mfundo zolondola kuchokera m'kaundula - zonsezi zimachitika nthawi imodzi. Ndipo pamene mukuchita izo, izo zidzasindikizidwa mu ubongo wanu. Ndikuganiza kuti aliyense amadziwa zomwe compiler imachita. Ndipo izi zidzakupatsani kumvetsetsa kwa mtengo wamtengo wapatali.

Zitsanzo zothandiza za kuwongolera magwiridwe antchito

Andrei: Ndi chiyani chinanso chomwe muyenera kulabadira mukamagwira ntchito zokolola?

Cliff: Mapangidwe a data. Mwa njira, inde, sindinaphunzitse makalasi awa kwa nthawi yayitali ... Sukulu ya Rocket. Zinali zosangalatsa, koma zinkafuna khama kwambiri, ndipo ndili ndi moyo! CHABWINO. Chifukwa chake, m'makalasi akulu komanso osangalatsa, "Kuchita kwanu kumapita kuti," ndidapereka chitsanzo kwa ophunzira: ma gigabytes awiri ndi theka a data ya fintech adawerengedwa kuchokera ku fayilo ya CSV ndiyeno adayenera kuwerengera kuchuluka kwazinthu zomwe zidagulitsidwa. . Zambiri za msika wa tick. Mapaketi a UDP adasinthidwa kukhala mtundu wamawu kuyambira 70s. Chicago Mercantile Exchange - mitundu yonse ya zinthu monga batala, chimanga, soya, zinthu monga choncho. Zinali zofunikira kuwerengera zinthu izi, kuchuluka kwa zochitika, kuchuluka kwa kayendetsedwe ka ndalama ndi katundu, ndi zina zotero. Ndi masamu osavuta ochita malonda: pezani nambala yamalonda (omwe ndi zilembo 1-2 patebulo la hashi), pezani kuchuluka kwake, onjezani ku imodzi mwazogulitsa, onjezani voliyumu, onjezani mtengo, ndi zina zingapo. Masamu osavuta kwambiri. Kugwiritsa ntchito chidole kunali kolunjika kwambiri: chirichonse chiri mu fayilo, ndinawerenga fayilo ndikudutsamo, ndikugawa zolemba zaumwini mu zingwe za Java, kuyang'ana zinthu zofunika mwa izo ndikuziwonjezera malinga ndi masamu omwe tawafotokozera pamwambapa. Ndipo imagwira ntchito pang'onopang'ono.

Ndi njira iyi, ndizodziwikiratu zomwe zikuchitika, ndipo computing yofanana sikuthandiza, sichoncho? Zikuoneka kuti kuwonjezeka kasanu pa ntchito kungapezeke mosavuta posankha ndondomeko yoyenera ya deta. Ndipo izi zimadabwitsa ngakhale odziwa mapulogalamu! Pankhani yanga, chinyengo chinali chakuti simuyenera kugawa zokumbukira mumtundu wotentha. Chabwino, ichi sichowonadi chonse, koma kawirikawiri - simuyenera kuwunikira "kamodzi mu X" pamene X ndi yaikulu mokwanira. Pamene X ndi magigabaiti awiri ndi theka, simuyenera kugawa kalikonse “kamodzi pa chilembo”, kapena “kamodzi pa mzere”, kapena “kamodzi pagawo lililonse”, china chonga icho. Apa ndi pamene nthawi imathera. Kodi izi zimagwira ntchito bwanji? Tangoganizani ndikuyimba foni String.split() kapena BufferedReader.readLine(). Readline amapanga chingwe kuchokera pagulu la ma byte omwe adabwera pa netiweki, kamodzi pa mzere uliwonse, pamizere mazana mamiliyoni mazana. Ndimatenga mzere uwu, kuudula ndikuutaya. Chifukwa chiyani ndikutaya - chabwino, ndakonza kale, ndizo zonse. Kotero, pa byte iliyonse yowerengedwa kuchokera ku 2.7G iyi, zilembo ziwiri zidzalembedwa pamzere, ndiko kuti, kale 5.4G, ndipo sindikuwafunanso china chirichonse, kotero iwo amatayidwa. Ngati muyang'ana pa bandwidth ya kukumbukira, timanyamula 2.7G yomwe imadutsa mu kukumbukira ndi kukumbukira basi mu purosesa, ndiyeno kawiri kawiri amatumizidwa ku mzere womwe uli mu kukumbukira, ndipo zonsezi zimaphwanyidwa pamene mzere watsopano uliwonse umapangidwa. Koma ndiyenera kuwerenga, hardware imawerenga, ngakhale zonse zitasokonekera pambuyo pake. Ndipo ndiyenera kulemba chifukwa ndidapanga mzere ndipo zosungira zadzaza - nkhokwe silingatenge 2.7G. Chifukwa chake, pa byte iliyonse yomwe ndimawerenga, ndimawerenga ma byte ena awiri ndikulemba ma byte ena awiri, ndipo pamapeto pake amakhala ndi chiŵerengero cha 4: 1 - mu chiŵerengero ichi tikuwononga bandwidth kukumbukira. Ndiyeno zimakhala kuti ngati nditero String.split() - ino si nthawi yomaliza yomwe ndimachita izi, pakhoza kukhala minda ina 6-7 mkati. Chifukwa chake ma code apamwamba owerengera CSV ndikuyika zingwezo kumabweretsa kuwonongeka kwa bandwidth pafupifupi 14: 1 poyerekeza ndi zomwe mungafune kukhala nazo. Ngati mutaya zosankhazi, mutha kupeza liwiro la kasanu.

Ndipo sizovuta. Ngati muyang'ana code kuchokera kumbali yoyenera, zonse zimakhala zosavuta mukazindikira vuto. Simuyenera kusiya kugawa kukumbukira palimodzi: vuto lokha ndiloti mumagawa chinachake ndipo nthawi yomweyo chimafa, ndipo panjira chimawotcha chinthu chofunika kwambiri, chomwe pakali pano ndi kukumbukira kukumbukira. Ndipo zonsezi zimabweretsa kutsika kwa zokolola. Pa x86 nthawi zambiri mumafunika kuwotcha ma processor, koma apa mudawotcha zokumbukira zonse kale. Njira yothetsera vutoli ndi kuchepetsa kuchuluka kwa kutulutsa. 
Gawo lina la vuto ndiloti ngati mutayendetsa profiler pamene mzere wa kukumbukira ukutha, pamene zichitika, nthawi zambiri mumadikirira kuti cache ibwerere chifukwa yadzaza ndi zinyalala zomwe mwangopanga, mizere yonseyo. Chifukwa chake, ntchito iliyonse yonyamula kapena sitolo imakhala yocheperako, chifukwa imatsogolera kuphonya kwa cache - chosungira chonse chakhala chochedwa, kuyembekezera kuti zinyalala zichoke. Chifukwa chake, wojambulayo amangowonetsa phokoso lotentha lopanda phokoso lopaka kuzungulira konseko - sipadzakhalanso malangizo osiyana otentha kapena malo mu code. Phokoso lokha. Ndipo ngati muyang'ana kuzungulira kwa GC, onse ndi Achinyamata Achinyamata komanso othamanga kwambiri - ma microseconds kapena milliseconds maximum. Kupatula apo, kukumbukira zonsezi kumafa nthawi yomweyo. Inu mumagawa mabiliyoni a magigabaiti, ndipo iye amawadula iwo, ndi kuwadula iwo, ndi kuwadula iwo kachiwiri. Zonsezi zimachitika mofulumira kwambiri. Zikuoneka kuti pali ma GC otsika mtengo, phokoso lotentha panthawi yonseyi, koma tikufuna kupeza 5x speedup. Panthawiyi, chinachake chiyenera kutseka m'mutu mwanu ndikumveka: "Chifukwa chiyani?!" Kusefukira kwa Memory strip sikukuwonetsedwa muzosintha zachikale; muyenera kuyendetsa debugger ya hardware performance ndikudziwonera nokha komanso mwachindunji. Koma izi sizingaganizidwe mwachindunji kuchokera ku zizindikiro zitatuzi. Chizindikiro chachitatu ndi pamene muyang'ana zomwe mukuwonetsera, funsani wolemba mbiriyo, ndipo akuyankha kuti: "Munapanga mizere biliyoni, koma GC inagwira ntchito kwaulere." Izi zikangochitika, mumazindikira kuti mwapanga zinthu zambiri ndikuwotcha njira yonse yokumbukira. Pali njira yodziwira izi, koma sizodziwikiratu. 

Vuto liri pamapangidwe a data: mawonekedwe opanda kanthu omwe amayambitsa chilichonse chomwe chimachitika, ndi chachikulu kwambiri, ndi 2.7G pa disk, kotero kupanga kope la chinthu ichi ndikosafunika kwambiri - mukufuna kuyikweza kuchokera pa network byte buffer nthawi yomweyo. m'kaundula, kuti musawerenge-lemba pamzere mpaka kasanu. Tsoka ilo, Java sikukupatsani laibulale yotere ngati gawo la JDK mwachisawawa. Koma izi ndi zazing'ono, sichoncho? Kwenikweni, awa ndi mizere 5-10 yamakhodi yomwe idzagwiritsidwe ntchito kukhazikitsa chojambulira chanu cholumikizira, chomwe chimabwereza machitidwe a gulu la zingwe, ndikukhala chopukutira mozungulira chotchingira choyambira. Zotsatira zake, zikuwoneka kuti mukugwira ntchito ngati ndi zingwe, koma zolozera ku buffer zikuyenda pamenepo, ndipo ma byte aiwisi samakopera paliponse, motero ma buffer omwewo amagwiritsidwanso ntchito mobwerezabwereza, ndipo makina ogwiritsira ntchito amasangalala kudzitengera nokha zinthu zomwe adapangidwira, monga kubisala kawiri kawiri kwa ma bafa awa, ndipo simukugawiranso kudzera mumtsinje wopanda malire wa data yosafunikira. Mwa njira, kodi mukumvetsa kuti pogwira ntchito ndi GC, zimatsimikiziridwa kuti kugawidwa kwa kukumbukira kulikonse sikudzawoneka kwa purosesa pambuyo pa kuzungulira komaliza kwa GC? Chifukwa chake, zonsezi sizingakhale mu cache, ndiye kuti kuphonya kotsimikizika kwa 100% kumachitika. Mukamagwira ntchito ndi cholozera, pa x86, kuchotsa kaundula kuchokera kukumbukira kumatenga mawotchi 1-2, ndipo izi zikangochitika, mumalipira, kulipira, kulipira, chifukwa kukumbukira kuli konse. NINE zosungira - ndipo izi ndi mtengo wa kugawa kukumbukira. Mtengo weniweni.

Mwanjira ina, mapangidwe a data ndizovuta kwambiri kusintha. Ndipo mukazindikira kuti mwasankha njira yolakwika ya data yomwe ingawononge magwiridwe antchito pambuyo pake, nthawi zambiri pamakhala ntchito yambiri yoti ichitike, koma ngati simutero, zinthu zidzaipiraipira. Choyamba, muyenera kuganizira za mapangidwe a data, izi ndizofunikira. Mtengo waukulu pano ukugwera pamapangidwe amafuta, omwe ayamba kugwiritsidwa ntchito ngati "Ndidakopera kapangidwe ka data X mu data Y chifukwa ndimakonda mawonekedwe a Y." Koma ntchito yokopera (yomwe ikuwoneka yotsika mtengo) imawononga bandwidth kukumbukira ndipo ndipamene nthawi yonse yowonongera yotayika imakwiriridwa. Ngati ndili ndi chingwe chachikulu cha JSON ndipo ndikufuna kuchisintha kukhala mtengo wa DOM wokhazikika wa POJOs kapena china chake, kugwira ntchito yodula chingwecho ndikumanga POJO, ndikupezanso POJO pambuyo pake, kumabweretsa mtengo wosafunikira - ndizo. osati wotsika mtengo. Kupatula ngati mumathamanga ma POJO nthawi zambiri kuposa momwe mumathamangira chingwe. Kupatula apo, mutha kuyesa kutsitsa chingwecho ndikuchotsa zomwe mukufuna kuchokera pamenepo, osasintha kukhala POJO. Ngati zonsezi zikuchitika panjira yomwe magwiridwe antchito amafunikira, palibe ma POJO anu, muyenera kukumba mzere mwachindunji.

Chifukwa chiyani pangani chilankhulo chanu cha pulogalamu

Andrei: Munati kuti mumvetsetse mtengo wake, muyenera kulemba chilankhulo chanu chaching'ono ...

Cliff: Osati chinenero, koma wolemba mabuku. Chilankhulo ndi wolemba ndi zinthu ziwiri zosiyana. Kusiyana kwakukulu kuli m'mutu mwanu. 

Andrei: Mwa njira, monga momwe ndikudziwira, mukuyesa kupanga zilankhulo zanu. Zachiyani?

Cliff: Chifukwa ndikhoza! Ndine wopuma pantchito, ndiye ichi ndi chokonda changa. Moyo wanga wonse ndakhala ndikukhazikitsa zilankhulo za anthu ena. Ndinagwiranso ntchito kwambiri pa kalembedwe kanga ka code. Komanso chifukwa ndimawona zovuta m'zilankhulo zina. Ndikuwona kuti pali njira zabwinoko zochitira zinthu zodziwika bwino. Ndipo ndikanawagwiritsa ntchito. Ndangotopa ndikuwona zovuta mwa ine ndekha, mu Java, mu Python, muchilankhulo china chilichonse. Tsopano ndikulemba mu React Native, JavaScript ndi Elm monga chosangalatsa chomwe sichimapuma pantchito, koma za ntchito yogwira ntchito. Ndimalembanso ku Python ndipo, mwina, ndipitiliza kugwira ntchito yophunzirira makina pamakina a Java. Pali zilankhulo zambiri zodziwika ndipo zonse zili ndi zinthu zosangalatsa. Aliyense ndi wabwino mwa njira yake ndipo mutha kuyesa kubweretsa zinthu zonsezi pamodzi. Kotero, ndikuphunzira zinthu zomwe zimandisangalatsa, khalidwe la chinenero, kuyesera kuti ndipeze semantics yololera. Ndipo mpaka pano ndikuchita bwino! Pakalipano ndikulimbana ndi semantics ya kukumbukira, chifukwa ndikufuna kukhala nayo monga C ndi Java, ndikupeza chitsanzo champhamvu cha kukumbukira ndi semantics ya kukumbukira katundu ndi masitolo. Nthawi yomweyo, khalani ndi zolembera zodziwikiratu monga ku Haskell. Apa, ndikuyesera kusakaniza zofananira za mtundu wa Haskell ndi ntchito yokumbukira mu C ndi Java. Izi ndi zomwe ndakhala ndikuchita kwa miyezi 2-3 yapitayi, mwachitsanzo.

Andrei: Ngati mupanga chilankhulo chomwe chimakhala bwino ndi zilankhulo zina, mukuganiza kuti wina angachite mosiyana: tengani malingaliro anu ndikuwagwiritsa ntchito?

Cliff: Umu ndi momwe zilankhulo zatsopano zimawonekera! Chifukwa chiyani Java ikufanana ndi C? Chifukwa C anali ndi mawu abwino omwe aliyense ankamvetsa ndipo Java inauziridwa ndi syntax iyi, kuwonjezera chitetezo chamtundu, kuyang'ana malire, GC, komanso adasintha zinthu zina kuchokera ku C. Iwo anawonjezera zawo. Koma iwo adadzozedwa kwambiri, sichoncho? Aliyense amaima pamapewa a zimphona zomwe zidabwera patsogolo panu - ndi momwe kupita patsogolo kumapangidwira.

Andrei: Monga ndikumvetsetsa, chilankhulo chanu chikhala chotetezeka kukumbukira. Kodi mudaganizapo zogwiritsa ntchito ngati chobwereketsa kuchokera ku Rust? Mwamuyang'ana, mukuganiza bwanji za iye?

Cliff: Chabwino, ndakhala ndikulemba C kwa zaka zambiri, ndi malloc zonsezi ndi zaulere, ndikuwongolera pamanja moyo wonse. Mukudziwa, 90-95% ya nthawi yoyendetsedwa pamanja ili ndi mawonekedwe omwewo. Ndipo ndizowawa kwambiri kuchita pamanja. Ndikufuna wokonzayo kuti akuuzeni zomwe zikuchitika kumeneko ndi zomwe mwapeza ndi zochita zanu. Pazinthu zina, wobwereketsa amachita izi kunja kwa bokosi. Ndipo ikuyenera kuwonetsa chidziwitso, kumvetsetsa chilichonse, komanso osandilemetsa ndikuwonetsa kumvetsetsa kumeneku. Iyenera kusanthula kuthawitsa kwanuko, ndipo pokhapokha ikalephera, ndiye kuti ikufunika kuwonjezera zolemba zomwe zingafotokoze moyo wonse - ndipo chiwembu chotere ndizovuta kwambiri kuposa kubwereketsa, kapena chekeni chilichonse chomwe chilipo. Kusankha pakati pa "zonse zili bwino" ndi "sindikumvetsa kalikonse" - ayi, payenera kukhala china chabwinoko. 
Chifukwa chake, monga munthu yemwe adalemba ma code ambiri mu C, ndikuganiza kuti kukhala ndi chithandizo chowongolera moyo wonse ndichinthu chofunikira kwambiri. Ndakhutitsidwanso ndi kuchuluka kwa Java kumagwiritsira ntchito kukumbukira ndipo kudandaula kwakukulu ndi GC. Mukagawa kukumbukira ku Java, simudzakumbukira kukumbukira komwe kunali komweko panthawi yomaliza ya GC. Izi sizili choncho m'zilankhulo zokhala ndi kasamalidwe kolondola kwambiri. Mukayimba malloc, mumapeza nthawi yomweyo kukumbukira komwe kumangogwiritsidwa ntchito. Nthawi zambiri mumachita zinthu zosakhalitsa ndi kukumbukira ndikuzibwezeranso nthawi yomweyo. Ndipo nthawi yomweyo imabwerera ku dziwe la malloc, ndipo kuzungulira kwa malloc kotsatira kumachikokanso. Chifukwa chake, kugwiritsa ntchito kukumbukira kwenikweni kumachepetsedwa kukhala zinthu zamoyo panthawi yoperekedwa, kuphatikiza kutayikira. Ndipo ngati zonse sizikudumphira mwachisawawa, zokumbukira zambiri zimatha mu cache ndi purosesa, ndipo zimagwira ntchito mwachangu. Koma pamafunika zambiri kasamalidwe pamanja kukumbukira ndi malloc ndi ufulu kuitana mu dongosolo loyenera, m'malo oyenera. Dzimbiri limatha kuchita izi moyenera palokha, ndipo nthawi zambiri limapereka magwiridwe antchito abwinoko, chifukwa kukumbukira kumachepetsedwa mpaka kuwerengera komwe kulipo - kusiyana ndi kuyembekezera kuzungulira kwa GC kumasula kukumbukira. Zotsatira zake, tinali ndi njira yosangalatsa kwambiri yopititsira patsogolo ntchito. Ndipo zamphamvu kwambiri - ndikutanthauza, ndidachita zinthu zotere pokonza deta ya fintech, ndipo izi zidandilola kuti ndifulumire pafupifupi kasanu. Ndiko kulimbikitsa kwakukulu, makamaka m'dziko lomwe mapurosesa sakufulumira ndipo tikudikirira kukonza.

Ntchito ya Engineer Performance

Andrei: Ndikufunanso kufunsa za ntchito zonse. Munayamba kutchuka ndi ntchito yanu ya JIT ku HotSpot kenako ndikupita ku Azul, yomwenso ndi kampani ya JVM. Koma tinali tikugwira kale ntchito pa hardware kuposa mapulogalamu. Ndiyeno mwadzidzidzi anasintha kupita ku Big Data ndi Machine Learning, ndiyeno kuzindikira zachinyengo. Kodi zimenezi zinachitika bwanji? Izi ndi madera osiyana kwambiri a chitukuko.

Cliff: Ndakhala ndikukonza mapulogalamu kwa nthawi yayitali ndipo ndakwanitsa kutenga makalasi ambiri osiyanasiyana. Ndipo pamene anthu amati: "o, ndiwe amene munapanga JIT ku Java!", Nthawi zonse zimakhala zoseketsa. Koma izi zisanachitike, ndinali kugwira ntchito yofanana ndi PostScript - chilankhulo chomwe Apple idagwiritsapo ntchito makina osindikiza a laser. Ndipo izi zisanachitike ndidakhazikitsa chilankhulo cha Forth. Ndikuganiza kuti mutu wamba kwa ine ndi chitukuko cha zida. Moyo wanga wonse ndakhala ndikupanga zida zomwe anthu ena amalemba nawo mapulogalamu awo abwino. Koma ndinali nawonso pakupanga makina opangira opaleshoni, madalaivala, ma kernel-level debuggers, zinenero za chitukuko cha OS, zomwe zinayamba zochepa, koma patapita nthawi zinakhala zovuta kwambiri. Koma mutu waukulu udakali chitukuko cha zida. Gawo lalikulu la moyo wanga linadutsa pakati pa Azul ndi Sun, ndipo zinali za Java. Koma nditalowa mu Big Data ndi Machine Learning, ndidavalanso chipewa changa chapamwamba ndikuti, "O, tsopano tili ndi vuto losachepera, ndipo pali zinthu zambiri zosangalatsa zomwe zikuchitika komanso anthu akuchita zinthu." Iyi ndi njira yabwino yopitira patsogolo.

Inde, ndimakonda kwambiri makompyuta ogawidwa. Ntchito yanga yoyamba inali ngati wophunzira ku C, pa ntchito yotsatsa malonda. Izi zidagawidwa pamakompyuta pa Zilog Z80 tchipisi zomwe zidasonkhanitsa deta ya OCR ya analogi, yopangidwa ndi wosanthula weniweni. Unali mutu wabwino komanso wopenga kotheratu. Koma panali mavuto, gawo lina silinazindikiridwe molondola, kotero mumayenera kutenga chithunzi ndikuwonetsa kwa munthu yemwe amatha kuwerenga kale ndi maso ndikufotokozera zomwe adanena, choncho panali ntchito ndi deta, ndi ntchito izi. anali ndi chinenero chawochawo . Panali kumbuyo komwe kunakonza zonsezi - ma Z80 omwe akuyenda mofanana ndi ma terminals a vt100 akuthamanga - mmodzi pa munthu aliyense, ndipo panali chitsanzo chofananira pa Z80. Chikumbukiro china chomwe chimagawidwa ndi ma Z80 onse mkati mwa kasinthidwe ka nyenyezi; Ndege yam'mbuyo idagawidwanso, ndipo theka la RAM linagawidwa pa intaneti, ndipo theka lina linali lachinsinsi kapena linapita ku chinachake. Dongosolo logawika lovuta kwambiri lomwe lili ndi makumbukidwe ogawana... ogawana pang'ono. Izi zinali liti ... sindingathe kukumbukira, kwinakwake pakati pa zaka za m'ma 80. Kalekale ndithu. 
Inde, tiyerekeze kuti zaka 30 zapita kale kwambiri. Beowulf-magulu. Magulu oterowo amawoneka ngati ... inali kukumbukira kwabodza komwe kumagawana ndi masamba okumbukira chitetezo pa x86, ndipo ngati mutalembera patsamba lino, ndiye kuti tidauza ma processor ena kuti ngati apeza kukumbukira komweko komweko, kuyenera kuchotsedwa kwa inu, motero china chake ngati protocol yothandizira. kugwirizana kwa cache kunawonekera ndi mapulogalamu a izi. Lingaliro losangalatsa. Koma vuto lenileni linali linanso. Zonsezi zinagwira ntchito, koma mwamsanga munapeza zovuta zogwirira ntchito, chifukwa palibe amene anamvetsa zitsanzo za machitidwe pamlingo wokwanira - ndi njira zotani zofikira kukumbukira zomwe zinalipo, momwe mungatsimikizire kuti mfundozo sizimangokhalira kukangana, ndi zina zotero.

Zomwe ndinabwera nazo mu H2O ndikuti ndi omwe akupanga okha omwe ali ndi udindo wodziwa komwe kufanana kumabisika komanso komwe sikuli. Ndinabwera ndi chitsanzo cholembera chomwe chinapangitsa kulemba kachidindo kapamwamba kukhala kosavuta komanso kosavuta. Koma kulemba code yoyenda pang'onopang'ono ndizovuta, zidzawoneka zoipa. Muyenera kuyesetsa kwambiri kulemba code pang'onopang'ono, muyenera kugwiritsa ntchito njira zosavomerezeka. Code braking ikuwonekera poyang'ana koyamba. Zotsatira zake, nthawi zambiri mumalemba kachidindo kamene kamayenda mofulumira, koma muyenera kudziwa zoyenera kuchita pokumbukira nawo. Zonsezi zimamangiriridwa kumagulu akuluakulu ndipo khalidweli limakhala lofanana ndi magulu akuluakulu osasunthika mu Java yofanana. Ndikutanthauza, yerekezani kuti ulusi uwiri umalemba pamndandanda wofananira, umodzi wa iwo upambana, ndipo winayo, motere, wataya, ndipo simudziwa kuti ndi uti. Ngati sizikusinthika, ndiye kuti dongosololi likhoza kukhala chilichonse chomwe mukufuna - ndipo izi zimagwira ntchito bwino. Anthu amasamala kwambiri za dongosolo la magwiridwe antchito, amayika zosakhazikika m'malo oyenera, ndipo amayembekezera zovuta zokhudzana ndi kukumbukira m'malo oyenera. Kupanda kutero, amangolemba kachidindo ngati malupu kuyambira 1 mpaka N, pomwe N ndi ma thililiyoni, ndikuyembekeza kuti milandu yonse yovuta idzakhala yofanana - ndipo sizigwira ntchito pamenepo. Koma mu H2O iyi si Java kapena Scala; mutha kuyiwona ngati "Java minus minus" ngati mukufuna. Iyi ndi ndondomeko yomveka bwino kwambiri ndipo ikufanana ndi kulemba C kapena Java code yosavuta yokhala ndi malupu ndi magulu. Koma nthawi yomweyo, kukumbukira kumatha kukonzedwa mu terabytes. Ndimagwiritsabe ntchito H2O. Ndimagwiritsa ntchito nthawi ndi nthawi pamapulojekiti osiyanasiyana - ndipo akadali chinthu chofulumira kwambiri, kambirimbiri mwachangu kuposa omwe akupikisana nawo. Ngati mukuchita Big Data ndi data columnar, ndizovuta kwambiri kumenya H2O.

Mavuto Aukadaulo

Andrei: Ndi chiyani chomwe chakhala chovuta kwambiri pantchito yanu yonse?

Cliff: Kodi tikukambirana zaukadaulo kapena zosagwirizana ndiukadaulo? Ndikhoza kunena kuti zovuta zazikulu si zaukadaulo. 
Ponena za zovuta zaukadaulo. Ndinangowagonjetsa. Sindikudziwa kuti chachikulu chinali chiyani, koma panali ena osangalatsa omwe adatenga nthawi yayitali, kulimbana ndi malingaliro. Nditapita ku Sun, ndinali wotsimikiza kuti ndipanga compiler yofulumira, ndipo gulu la akuluakulu adanena poyankha kuti sindidzapambana. Koma ndidatsata njira iyi, ndidalemba cholembera ku registry allocator, ndipo idathamanga kwambiri. Zinali zofulumira monga C1 yamakono, koma wopereka ndalamayo anali wocheperapo kale, ndipo poyang'ana kumbuyo kunali vuto lalikulu la deta. Ndidafunikira kuti ndilembe cholembera cholembera ndipo sindimamvetsetsa vuto lomwe limakhalapo pakati pa kufotokoza kwachidziwitso ndi liwiro, zomwe zidalipo nthawi imeneyo ndipo zinali zofunika kwambiri. Zinapezeka kuti mawonekedwe a data nthawi zambiri amaposa kukula kwa cache pa x86s nthawi imeneyo, chifukwa chake, ngati ndimaganiza kuti olembetsa atha kupanga 5-10 peresenti ya nthawi yonse ya jitter, ndiye kuti zidachitikadi. 50 peresenti.

M'kupita kwa nthawi, wolembayo adakhala woyeretsa komanso wogwira ntchito bwino, adasiya kupanga code yowopsya nthawi zambiri, ndipo ntchitoyo inayamba kufanana ndi zomwe compiler C imapanga. . Mukalemba kachidindo ngati C, mupeza magwiridwe antchito ngati C nthawi zambiri. Ndipo mukupita patsogolo, nthawi zambiri mumapeza kachidindo kamene kamayenderana ndi mlingo C, olembetsa olembetsa anayamba kuwoneka ngati chinachake chokwanira ... mosasamala kanthu kuti code yanu ikuyenda mofulumira kapena pang'onopang'ono. Ndinapitiliza kugwira ntchito pa allocator kuti apange zosankha zabwino. Anakhala wodekha komanso wodekha, koma adapereka machitidwe abwino ndi abwino pazochitika zomwe palibe wina angakhoze kupirira. Nditha kulowa mu registry allocator, kuyika mwezi wantchito kumeneko, ndipo mwadzidzidzi code yonse imayamba kuchita 5% mwachangu. Izi zidachitika nthawi ndi nthawi ndipo olembetsa adakhala chinthu chaluso - aliyense adachikonda kapena kudana nacho, ndipo anthu ochokera kusukuluyi adafunsa mafunso pamutu wakuti "chifukwa chiyani zonse zimachitika motere", bwanji osatero. jambulani mzere, ndipo pali kusiyana kotani. Yankho likadali lofanana: chopereka chotengera mtundu wa graph kuphatikiza ntchito yosamala kwambiri yokhala ndi buffer code ndi chofanana ndi chida chopambana, kuphatikiza kopambana komwe palibe amene angagonjetse. Ndipo ichi ndi chinthu chosadziwika bwino. Zina zonse zomwe wopanga amapanga pali zinthu zophunziridwa bwino, ngakhale zabweretsedwanso pamlingo waukadaulo. Nthawi zonse ndimachita zinthu zomwe zimayenera kusandutsa wojambulayo kukhala ntchito yojambula. Koma palibe chilichonse mwa izi chomwe chinali chodabwitsa - kupatula kwa olembetsa. Chinyengo ndicho kusamala kudula pansi pansi pa katundu ndipo, ngati izi zichitika (ndikhoza kufotokoza mwatsatanetsatane ngati mukufuna), izi zikutanthauza kuti mukhoza kutsata mwamphamvu kwambiri, popanda chiopsezo chogwera pa kink mu ndondomeko ya ntchito. M'masiku amenewo, panali gulu la anthu ophatikizira athunthu, opachikidwa ndi zinyalala ndi mluzu, omwe anali ndi ogawa zolembetsa, koma palibe amene adatha kuchita.

Vuto ndiloti ngati muwonjezera njira zomwe zimayenera kulowetsamo, kuwonjezeka ndi kuonjezera malo olowera, zomwe zimagwiritsidwa ntchito nthawi yomweyo zimaposa chiwerengero cha zolembera, ndipo muyenera kuzidula. Mulingo wovuta nthawi zambiri umabwera pomwe woperekayo asiya, ndipo wofuna kutayikira amakhala wofunika wina, mudzagulitsa zinthu zakutchire. Phindu lakuyika apa ndikuti mumataya gawo lapamwamba, pamutu pakuyimba ndi kusunga, mutha kuwona zomwe zili mkati ndikuzikulitsa. Mtengo wa inlining ndikuti kuchuluka kwazinthu zamoyo kumapangidwa, ndipo ngati olembetsa anu amawotcha kuposa momwe amafunikira, mumataya nthawi yomweyo. Choncho, ambiri allocators ali ndi vuto: pamene inlining kuwoloka mzere winawake, chirichonse padziko lapansi chimayamba kudulidwa ndipo zokolola zikhoza kugubuduza pansi chimbudzi. Omwe akugwiritsa ntchito compiler amawonjezera ma heuristics: mwachitsanzo, kusiya kuyika, kuyambira ndi kukula kokwanira, popeza kugawa kumawononga chilichonse. Umu ndi momwe kink mu graph ya magwiridwe antchito amapangidwira - inu okhala pakati, okhala pakati, magwiridwe antchito amakula pang'onopang'ono - kenako kukwera! - imagwera pansi ngati jack yothamanga chifukwa mumatsata kwambiri. Umu ndi momwe zonse zidagwirira ntchito Java isanabwere. Java imafuna kulowetsedwa kochulukirapo, chifukwa chake ndidapangitsa kuti wondigawirayo akhale wolimba mtima kwambiri kuti awonekere m'malo mowonongeka, ndipo ngati mulowa mochulukira, imayamba kutayika, koma mphindi "yopanda kukhetsa" ikubwerabe. Izi ndizosangalatsa ndipo zidangobwera kwa ine modzidzimutsa, osati zowonekeratu, koma zidalipira bwino. Ndinayamba kuchita zaukali ndipo zinanditengera kumalo komwe Java ndi C zimagwirira ntchito limodzi. Ali pafupi kwambiri - nditha kulemba Java code yomwe ili yothamanga kwambiri kuposa C code ndi zinthu monga choncho, koma pafupifupi, pachithunzi chachikulu cha zinthu, ndizofanana. Ndikuganiza kuti gawo lina loyenera ndi lolembetsa, zomwe zimandilola kuti ndizitha kutsata mopusa momwe ndingathere. Ndimangoyang'ana zonse zomwe ndikuwona. Funso apa ndilakuti ngati allocator amagwira ntchito bwino, kaya zotsatira zake ndi code yogwira ntchito mwanzeru. Ili linali vuto lalikulu: kumvetsetsa zonsezi ndikuzipanga kuti zigwire ntchito.

Pang'ono za kugawa kaundula ndi ma multi-cores

Владимир: Mavuto monga kugawa kaundula amawoneka ngati mutu wamuyaya, wopanda malire. Ndikudabwa ngati pakhala pali lingaliro lomwe limawoneka ngati likulonjeza ndiyeno lilephera kuchita?

Cliff: Ndithu! Kugawa kwa registry ndi gawo lomwe mumayesa kupeza ma heuristics kuti muthetse vuto lathunthu la NP. Ndipo simungathe kupeza yankho langwiro, sichoncho? Izi ndizosatheka. Yang'anani, Patsogolo pa Nthawi Yophatikiza - imagwiranso ntchito bwino. Zokambirana pano ndi za zochitika zina. Za magwiridwe antchito, kuti mutha kupita kukayezera china chake chomwe mukuganiza kuti ndichochita bwino - pambuyo pake, mukuyesetsa kukonza! Kugawa kwa registry ndi mutu wokhudza magwiridwe antchito. Mukakhala ndi prototype yoyamba, imagwira ntchito ndikujambula zomwe zikufunika, ntchitoyo imayamba. Muyenera kuphunzira kuyeza bwino. N’chifukwa chiyani kuli kofunikira? Ngati muli ndi deta yomveka bwino, mukhoza kuyang'ana madera osiyanasiyana ndikuwona: eya, zinathandiza apa, koma ndi pamene chirichonse chinasweka! Malingaliro ena abwino amabwera, mumawonjezera ma heuristics atsopano ndipo mwadzidzidzi chirichonse chimayamba kugwira ntchito bwino pang'ono pafupifupi. Kapena sizikuyambira. Ndinali ndi zochitika zambiri zomwe tinali kumenyera ntchito zisanu peresenti zomwe zimasiyanitsa chitukuko chathu ndi omwe adagawana nawo kale. Ndipo nthawi zonse zikuwoneka motere: kwinakwake mumapambana, kwinakwake mumataya. Ngati muli ndi zida zabwino zowunikira magwiridwe antchito, mutha kupeza malingaliro otayika ndikumvetsetsa chifukwa chake amalephera. Mwina ndi bwino kusiya zonse momwe zilili, kapena kutenga njira yowonjezereka yokonza bwino, kapena kutuluka ndi kukakonza zina. Ndi mulu wonse wa zinthu! Ndidapanga kuthyolako kozizira uku, koma ndikufunanso iyi, ndi iyi, ndi iyi - ndipo kuphatikiza kwawo kwathunthu kumapereka zosintha zina. Ndipo osungulumwa akhoza kulephera. Uwu ndiye mtundu wa magwiridwe antchito pamavuto athunthu a NP.

Владимир: Munthu amamva kuti zinthu monga kujambula mu allocators ndi vuto lomwe lathetsedwa kale. Chabwino, zakonzedwera inu, kutengera zomwe mukunena, ndiye kuti ndizofunika ndiye ...

Cliff: Sizikuthetsedwa motere. Ndi inuyo amene muyenera kuchisintha kukhala "chothetsedwa". Pali mavuto ovuta ndipo amafunika kuthetsedwa. Izi zikachitika, ndi nthawi yoti mugwiritse ntchito zokolola. Muyenera kuyandikira ntchitoyi moyenerera - chitani zizindikiro, sonkhanitsani ma metric, fotokozani momwe zinthu zinachitikira pamene, mutabwerera ku mtundu wakale, kuthyolako kwanu kwakale kunayambanso kugwira ntchito (kapena mosiyana, kuyimitsa). Ndipo musataye mtima mpaka mutakwaniritsa chinachake. Monga ndanenera kale, ngati pali malingaliro ozizira omwe sanagwire ntchito, koma m'munda wa kugawa kwa zolembera za malingaliro ndi pafupifupi zopanda malire. Mwachitsanzo, mukhoza kuwerenga mabuku asayansi. Ngakhale tsopano derali layamba kusuntha pang'onopang'ono ndipo lakhala lomveka bwino kuposa lachinyamata. Komabe, pali anthu osawerengeka omwe akugwira ntchitoyi ndipo malingaliro awo onse ndi ofunika kuyesera, onse akuyembekezera m'mapiko. Ndipo simungadziwe momwe aliri abwino pokhapokha mutawayesa. Amaphatikizana bwino bwanji ndi china chilichonse mu allocator wanu, chifukwa wogawa amachita zinthu zambiri, ndipo malingaliro ena sangagwire ntchito mu allocator anu enieni, koma mu allocator wina adzachita mosavuta. Njira yayikulu yopambana kwa woperekayo ndikukokera zinthu pang'onopang'ono kunja kwa njira yayikulu ndikukakamiza kuti igawike pamalire anjira zoyenda pang'onopang'ono. Chifukwa chake ngati mukufuna kuyendetsa GC, yendani pang'onopang'ono, chepetsani, perekani zosiyana, zinthu zonsezo - mukudziwa kuti zinthu izi ndizosowa. Ndipo ndizosowa kwenikweni, ndinayang'ana. Mumagwira ntchito yowonjezera ndipo imachotsa zoletsa zambiri pamayendedwe apang'onopang'ono, koma zilibe kanthu chifukwa amachedwa komanso samayenda kawirikawiri. Mwachitsanzo, cholozera chopanda pake - sichichitika, sichoncho? Muyenera kukhala ndi njira zingapo pazinthu zosiyanasiyana, koma zisasokoneze chachikulu. 

Владимир: Mukuganiza bwanji za ma cores ambiri, pomwe pali masauzande ambiri nthawi imodzi? Kodi ichi ndi chinthu chothandiza?

Cliff: Kupambana kwa GPU kukuwonetsa kuti ndiyothandiza!

Владимир: Iwo ndi apadera kwambiri. Nanga bwanji mapurosesa wamba?

Cliff: Chabwino, chimenecho chinali chitsanzo cha bizinesi cha Azul. Yankho linabweranso m'nthawi yomwe anthu ankakonda kwambiri ntchito zodziwikiratu. Zinali zovuta kulemba nambala yofananira nthawi imeneyo. Mtundu wa H2O wokhotakhota ndiwowopsa, koma si mtundu wamba. Mwina wamba pang'ono kuposa kugwiritsa ntchito GPU. Kodi tikukamba za zovuta kupanga chinthu choterocho kapena zovuta kuchigwiritsa ntchito? Mwachitsanzo, Azul adandiphunzitsa phunziro losangalatsa, losadziwikiratu: zosungira zazing'ono ndizabwinobwino. 

Vuto lalikulu m'moyo

Владимир: Nanga bwanji mavuto omwe si aukadaulo?

Cliff: Vuto lalikulu kwambiri silinali kukhala... wokoma mtima ndi wabwino kwa anthu. Ndipo chotsatira chake chinali chakuti nthaŵi zonse ndinkapezeka kuti ndili m’mikangano yoopsa. Omwe ndimadziwa kuti zinthu sizikuyenda bwino, koma sindimadziwa momwe ndingapitire patsogolo ndi zovutazo ndipo sindimatha kuthana nazo. Mavuto ambiri anthaŵi yaitali, amene anakhalapo kwa zaka zambiri, anabuka motere. Mfundo yakuti Java ili ndi C1 ndi C2 compilers ndi zotsatira zachindunji za izi. Mfundo yakuti kunalibe kuphatikizika kwamitundu yambiri ku Java kwa zaka khumi zotsatizana ndi zotsatira zachindunji. N’zachidziŵikire kuti tinkafunikira dongosolo loterolo, koma siziri zodziŵika chifukwa chake silinakhaleko. Ndinali ndi vuto ndi injiniya m'modzi ... kapena gulu la mainjiniya. Kalekale, pamene ndinayamba kugwira ntchito ku Sun, ndinali ... Chabwino, osati pamenepo, nthawi zambiri ndimakhala ndi maganizo anga pa chirichonse. Ndipo ndimaganiza kuti zinali zowona kuti mutha kungotenga chowonadi chanuchi ndikuchinena molunjika. Makamaka popeza ndinali wolondola modabwitsa nthawi zambiri. Ndipo ngati simukukonda njira iyi ... makamaka ngati mwachiwonekere mukulakwitsa ndikuchita zopanda pake ... Kawirikawiri, anthu ochepa amatha kulekerera njira iyi yolankhulirana. Ngakhale ena akhoza, monga ine. Ndakhala moyo wanga wonse pa mfundo zofunika kwambiri. Mukandiwonetsa cholakwika, nditembenuka nthawi yomweyo ndikunena kuti: mwanena zopanda pake. Panthawi imodzimodziyo, ndithudi, ndikupepesa ndi zonsezo, ndiwona zoyenera, ngati zilipo, ndikuchita zina zolondola. Kumbali inayi, ndikulondola modabwitsa pafupifupi gawo lalikulu la nthawi yonse. Ndipo sizikuyenda bwino mu ubale ndi anthu. Sindikuyesera kukhala wabwino, koma ndikufunsa funso mosabisa. "Izi sizigwira ntchito, chifukwa chimodzi, ziwiri ndi zitatu." Ndipo iwo anali ngati, “O!” Panali zotulukapo zina zimene mwina zinali bwino kunyalanyazidwa: mwachitsanzo, zimene zinapangitsa chisudzulo kwa mkazi wanga ndi zaka khumi za kupsinjika maganizo pambuyo pake.

Vuto ndikulimbana ndi anthu, ndi malingaliro awo pa zomwe mungathe kapena simungathe kuchita, zomwe ziri zofunika ndi zomwe siziri. Panali zovuta zambiri za kalembedwe ka code. Ndimalembabe ma code ambiri, ndipo m’masiku amenewo ndinkafunikanso kuchepetsa liwiro chifukwa ndinkagwira ntchito zambiri zofananira ndi kuzichita molakwika, m’malo mongoganizira imodzi. Ndikayang'ana m'mbuyo, ndinalemba theka la code ya Java JIT, lamulo la C2. Chotsatira chofulumira kwambiri chinalemba theka ngati pang'onopang'ono, theka lotsatira monga pang'onopang'ono, ndipo chinali kuchepa kwakukulu. Munthu wachisanu ndi chiwiri pamzerewu anali wodekha kwambiri - zomwe zimachitika nthawi zonse! Ndagwira ma code ambiri. Ndidayang'ana omwe adalemba zomwe, popanda kupatula, ndidayang'ana pama code awo, ndikuwunikanso aliyense wa iwo, ndikupitilizabe kudzilemba ndekha kuposa aliyense wa iwo. Njira imeneyi sigwira ntchito bwino ndi anthu. Anthu ena sakonda izi. Ndipo akalephera kuchitapo kanthu, madandaulo amtundu uliwonse amayamba. Mwachitsanzo, nthawi ina ndinauzidwa kuti ndisiye kupanga ma code chifukwa ndimalemba ma code ambiri ndipo zikuyika timu pachiwopsezo, ndipo zonse zidamveka ngati nthabwala kwa ine: bwana, ngati ena onse asowa ndikulembabe ma code, inu. ndiluza matimu okwana theka. Kumbali ina, ngati ndikupitiriza kulemba kachidindo ndipo mutaya theka la timu, izo zikuwoneka ngati kasamalidwe koipa kwambiri. Sindinaganizepo kwenikweni za izo, sindinalankhulepo za izo, koma zinali zidakali kwinakwake m'mutu mwanga. Lingaliro linali kuzungulira kumbuyo kwa malingaliro anga: "Kodi nonse mukundiseka?" Kotero, vuto lalikulu linali ine ndi maubwenzi anga ndi anthu. Tsopano ndimadzimva bwino kwambiri, ndinali wotsogolera gulu laopanga mapulogalamu kwa nthawi yayitali, ndipo tsopano ndikuuza anthu mwachindunji: mukudziwa, ndine yemwe ndili, ndipo muyenera kuthana nane - zili bwino ngati ndingayime. Pano? Ndipo pamene iwo anayamba kulimbana nazo, chirichonse chinayenda. M'malo mwake, sindine woipa kapena wabwino, ndilibe zolinga zoyipa kapena zikhumbo zodzikonda, ndizofunika zanga, ndipo ndiyenera kukhala nazo mwanjira ina.

Andrei: Posachedwapa aliyense anayamba kulankhula za kudzidziwitsa kwa introverts, ndi luso zofewa ambiri. Munganene chiyani pa izi?

Cliff: Inde, chimenecho chinali chidziŵitso ndi phunziro limene ndinaphunzira pa chisudzulo changa ndi mkazi wanga. Zimene ndinaphunzira pa chisudzulocho zinali zomvetsa ine ndekha. Umu ndi mmene ndinayambira kumvetsa anthu ena. Mvetserani momwe kuyankhulana uku kumagwirira ntchito. Zimenezi zinachititsa kuti atulukira zinthu zambirimbiri. Panali kuzindikira kuti ndine ndani komanso zomwe ndikuyimira. Kodi ndikuchita chiyani: mwina ndikutanganidwa ndi ntchitoyo, kapena ndikupewa mikangano, kapena china chake - ndipo kudzizindikira kumeneku kumathandizadi kudziletsa. Zitatha izi zonse zimapita mosavuta. Chinthu chimodzi chimene ndinachipeza osati mwa ine ndekha, komanso mwa okonza mapulogalamu ena ndikulephera kufotokoza maganizo anu pamene muli mu nkhawa. Mwachitsanzo, mwakhala pamenepo mukulemba, mukuyenda, ndiyeno amabwera akuthamangira kwa inu ndikuyamba kukuwa mwachidwi kuti chinachake chasweka ndipo tsopano njira zowopsya zidzatengedwera inu. Ndipo simunganene mawu chifukwa muli mumkhalidwe wopsinjika maganizo. Chidziwitso chomwe mwapeza chimakupatsani mwayi wokonzekera mphindi ino, kupulumuka ndikusunthira ku dongosolo lothawirako, pambuyo pake mutha kuchitapo kanthu. Chifukwa chake inde, mukayamba kuzindikira momwe zonsezi zimagwirira ntchito, ndizochitika zazikulu zosintha moyo. 
Ine ndekha sindinapeze mawu olondola, koma ndinakumbukira ndondomeko ya zochita. Chowonadi ndi chakuti izi zimakhala zakuthupi monga momwe zimakhalira pakamwa, ndipo mumafunikira malo. Danga loterolo, m'lingaliro la Zen. Izi ndi zomwe ziyenera kufotokozedwa, ndiyeno nthawi yomweyo chokani pambali - kuchokapo mwakuthupi. Ndikakhala chete pakamwa, ndimatha kuchitapo kanthu motengeka mtima. Pamene adrenaline ikufika muubongo wanu, imakusinthirani kunkhondo kapena kuwuluka, simunganenenso kalikonse, ayi - tsopano ndinu chitsiru, injiniya wokwapula, wosakhoza kuyankha mwaulemu kapena kuyimitsa kuwukira, ndipo wowukirayo ndi mfulu. kuukira mobwerezabwereza. Muyenera kukhalanso nokha, kuwongoleranso, tulukani munjira ya "nkhondo kapena kuthawa".

Ndipo pa izi timafunikira malo olankhula. Malo aulere basi. Ngati munganene chilichonse, ndiye kuti mutha kunena ndendende, kenako pitani ndikudzipezera nokha "malo": pitani koyenda mu paki, dzitsekereni mu shawa - zilibe kanthu. Chachikulu ndikuchotsa kwakanthawi kuchokera pamenepo. Mukangozimitsa kwa masekondi pang'ono, kuwongolera kumabwerera, mumayamba kuganiza bwino. "Chabwino, sindine chitsiru, sindichita zopusa, ndine munthu wothandiza kwambiri." Mukatha kudzitsimikizira nokha, ndi nthawi yoti mupite ku gawo lotsatira: kumvetsetsa zomwe zidachitika. Munawukiridwa, kuwukirako kudachokera komwe simunayembekezere, kunali kusakhulupirika, kubisalira koyipa. Izi ndi zoipa. Chotsatira ndikumvetsetsa chifukwa chake woukirayo adafunikira izi. Kwenikweni, chifukwa chiyani? Mwina chifukwa iye mwini wakwiya? Chifukwa chiyani wapenga? Mwachitsanzo, n’chifukwa chiyani anadzichitira nkhanza ndipo sangavomereze udindo? Iyi ndi njira yothanirana ndi vuto lonselo. Koma izi zimafuna malo owongolera, malo ongolankhula. Chinthu choyamba ndi kusiya kulankhulana. Pewani kukambirana ndi mawu. Letsani, chokanipo mwachangu momwe mungathere. Ngati ndikulankhulana patelefoni, ingoyimitsani - ili ndi luso lomwe ndinaphunzira polankhulana ndi mkazi wanga wakale. Ngati zokambirana sizikuyenda bwino, ingonenani kuti "tsanzikani" ndikuyimitsa. Kuchokera mbali ina ya foni: "blah blah blah", mumayankha: "eya, bye!" ndi kuyimitsa. Mungothetsa kukambirana. Mphindi zisanu pambuyo pake, pamene luso loganiza mwanzeru likubwerera kwa inu, mwakhazikika pang'ono, zimakhala zotheka kuganiza za chirichonse, zomwe zinachitika ndi zomwe zidzachitike. Ndipo yambani kuyankha moganizira, osati kungochita mongotengeka mtima. Kwa ine, kupambana kwa kudzizindikira kunali chifukwa chenichenicho chakuti ngati ndikupsinjika maganizo sindingathe kulankhula. Kutuluka mu chikhalidwe ichi, kuganiza ndi kukonzekera momwe mungayankhire ndikubwezera mavuto - awa ndi njira zoyenera pamene simungathe kulankhula. Njira yosavuta ndiyo kuthawa momwe kupsinjika maganizo kumawonekera ndikungosiya kutenga nawo mbali pazovutazi. Pambuyo pake mumatha kuganiza, pamene mungathe kuganiza, mumatha kulankhula, ndi zina zotero.

Mwa njira, kukhoti, loya wotsutsa amayesa kukuchitirani izi - tsopano zikuwonekeratu chifukwa chake. Chifukwa ali ndi mphamvu ya kukuponderezani mpaka kufika polephera kutchula dzina lanu, mwachitsanzo. M’lingaliro lenileni, simudzatha kulankhula. Izi zikakuchitikirani, ndipo ngati mukudziwa kuti mudzapezeka pamalo pomwe mikangano yapakamwa ikuchitika, pamalo ngati khothi, mutha kubwera ndi loya wanu. Loya adzakuimirirani ndikuletsa kuukira kwa mawu, ndipo adzachita mwalamulo kwathunthu, ndipo malo otayika a Zen adzabwerera kwa inu. Mwachitsanzo, ndimayenera kuyitanira banja langa kangapo, woweruzayo anali wochezeka kwambiri ndi izi, koma loya wotsutsa adakuwa ndikundikuwa, sindinathe ngakhale kumva mawu. Muzochitika izi, kugwiritsa ntchito mkhalapakati kumandithandiza bwino. Mkhalapakati amayimitsa kukakamizidwa konseku komwe kukutsanulira mumtsinje wopitilira, mumapeza malo ofunikira a Zen, ndipo ndi mphamvu yolankhula imabwerera. Uwu ndi gawo lonse lachidziwitso momwe muli zambiri zoti muphunzire, zambiri zomwe mungapeze mkati mwanu, ndipo zonsezi zimasanduka zisankho zapamwamba zomwe zimakhala zosiyana kwa anthu osiyanasiyana. Anthu ena alibe mavuto omwe tafotokozawa; nthawi zambiri, anthu omwe amagulitsa malonda alibe. Anthu onsewa amene amakhala ndi mawu - oimba otchuka, olemba ndakatulo, atsogoleri achipembedzo ndi ndale, nthawi zonse amakhala ndi zonena. Iwo alibe mavuto otero, koma ine ndiri nawo.

Andrei: Zinali ... zosayembekezereka. Chabwino, tayankhula kale zambiri ndipo nthawi yakwana yothetsa kuyankhulana uku. Tidzakumanadi pamsonkhanowu ndipo tidzatha kupitiriza zokambiranazi. Tikuwonani ku Hydra!

Mukhoza kupitiriza kukambirana ndi Cliff pamsonkhano wa Hydra 2019, womwe udzachitike pa July 11-12, 2019 ku St. Adzabwera ndi lipoti "The Azul Hardware Transactional Memory". Matikiti angagulidwe patsamba lovomerezeka.

Source: www.habr.com

Kuwonjezera ndemanga