Cliff Cofa - I-CTO yeCratus (iinzwa ze-IoT zokuphucula inkqubo), umseki kunye nomseki weqela lokuqalisa (kubandakanya i-Rocket Realtime School, i-Neurensic kunye ne-H2O.ai) kunye neendlela ezininzi zokuphuma eziyimpumelelo. UCliff wabhala umdidiyeli wakhe wokuqala eneminyaka eyi-15 (uPascal weTRS Z-80)! Waziwa kakhulu ngomsebenzi wakhe kwiC2 eJava (uLwandle lweNodes IR). Lo mqokeleli ubonise ihlabathi ukuba i-JIT inokuvelisa ikhowudi yomgangatho ophezulu, eyayiyenye yezinto ekuveleni kweJava njengenye yeeplatifomu eziphambili zesoftware. Emva koko uCliff wanceda i-Azul Systems yakha i-864-core mainframe kunye ne-software ecocekileyo yeJava exhasa i-GC imisa ikhefu kwi-500-gigabyte heap ngaphakathi kwe-10 millisecond. Ngokubanzi, uCliff ukwazile ukusebenza kuzo zonke iinkalo zeJVM.
Le habrapost ludliwanondlebe olukhulu noCliff. Siza kuthetha ngezi zihloko zilandelayo:
- Ukutshintshela kwizinga eliphantsi lolungiselelo
- Indlela yokwenza i-refactoring enkulu
- Imodeli yeendleko
- Uqeqesho lokuphucula umgangatho ophantsi
- Imizekelo esebenzayo yokuphucula ukusebenza
- Kutheni udala ulwimi lwakho lwenkqubo
- Umsebenzi weNjineli wokuSebenza
- Imingeni yobuGcisa
- Kancinci malunga nolwabiwo lwerejista kunye ne-multi-cores
- Owona mngeni mkhulu ebomini
Udliwano-ndlebe luqhutywa ngu:
- UAndrey Satarin kwiiNkonzo zeWebhu zeAmazon. Ngomsebenzi wakhe, wakwazi ukusebenza kwiiprojekthi ezihluke ngokupheleleyo: wavavanya i-database ye-NewSQL esasazwa kwi-Yandex, inkqubo yokufumanisa ifu kwi-Kaspersky Lab, umdlalo wabadlali abaninzi kwi-Mail.ru kunye nenkonzo yokubala amaxabiso otshintshiselwano lwangaphandle kwi-Deutsche Bank. Unomdla wokuvavanya i-backend enkulu kunye neenkqubo ezisasazwayo.
- UVladimir Sitnikov ukusuka kwiNetcracker. Iminyaka elishumi yomsebenzi ekusebenzeni kunye nokulinganisa kwe-NetCracker OS, isofthiwe esetyenziswa ngabaqhubi be-telecom ukwenza inethiwekhi kunye neenkqubo zokulawula izixhobo zenethiwekhi. Ndinomdla kwimiba yokusebenza kweJava kunye neOracle Database. Umbhali ongaphezulu kweshumi elinesibini lokuphucula ukusebenza kumqhubi osemthethweni wePostgreSQL JDBC.
Ukutshintshela kwizinga eliphantsi lolungiselelo
Андрей: Uligama elikhulu kwihlabathi lokuhlanganiswa kweJIT, iJava, kunye nomsebenzi wokusebenza ngokubanzi, akunjalo?
UCliff: Injalo nje!
Андрей: Masiqale ngeminye imibuzo ngokubanzi malunga nomsebenzi wokusebenza. Ucinga ntoni malunga nokhetho phakathi komgangatho ophezulu kunye nomgangatho ophantsi wokuphucula njengokusebenza kwinqanaba le-CPU?
UCliff: Ewe, yonke into ilula apha. Eyona khowudi ikhawulezayo yile ingazange ibaleke. Ngoko ke, kufuneka uqale ukusuka kwinqanaba eliphezulu, usebenze kwii-algorithms. Ubhalo olungcono lwe-O luyakubetha i-O notation embi ngaphandle kokuba ezinye ezinkulu ngokwaneleyo ezizinzileyo zingenelele. Izinto ezikwinqanaba eliphantsi zihamba mva. Ngokwesiqhelo, ukuba uye walungisa isitaki sakho kakuhle ngokwaneleyo kwaye kusekho izinto ezinomdla ezishiyekileyo, linqanaba eliphantsi elo. Kodwa ungaqala njani ukusuka kwinqanaba eliphezulu? Wazi njani ukuba sele wenziwe umsebenzi okwinqanaba eliphezulu ngokwaneleyo? Ewe ... akukho ndlela. Akukho ziresiphi esele zenziwe. Kufuneka uqonde ingxaki, wenze isigqibo malunga nento oza kuyenza (ukuze ungathathi amanyathelo angeyomfuneko kwixesha elizayo) kwaye emva koko unokutyhila iphrofayili, enokuthi into eluncedo. Ngaxa lithile, wena ngokwakho uyaqonda ukuba uzilahlile izinto ezingeyomfuneko kwaye lixesha lokwenza uhlengahlengiso olukumgangatho ophantsi. Oku ngokuqinisekileyo luhlobo olukhethekileyo lobugcisa. Baninzi abantu abenza izinto ezingeyomfuneko, kodwa bahamba ngokukhawuleza kangangokuba abanaxesha lokukhathazeka ngemveliso. Kodwa oku kude kube umbuzo uvela ngokungafihlisiyo. Ngokuqhelekileyo i-99% yexesha akukho mntu ukhathalela into endiyenzayo, de kube ngumzuzu xa into ebalulekileyo ifika kwindlela ebalulekileyo ekungekho mntu uyikhathaleleyo. Kwaye apha wonke umntu uqala ukukukhathaza malunga "nokuba kutheni kungasebenzi ngokugqibeleleyo kwasekuqaleni." Ngokubanzi, kukho rhoqo into yokuphucula ekusebenzeni. Kodwa i-99% yexesha awunakho umkhombandlela! Uzama nje ukwenza into isebenze kwaye kwinkqubo ufumanisa ukuba yintoni ebalulekileyo. Awunakuze wazi kwangaphambili ukuba esi siqwenga kufuneka sifezeke, ngoko ke, enyanisweni, kufuneka ugqibelele kuyo yonke into. Kodwa oku akunakwenzeka kwaye awukwenzi. Kuhlala kukho izinto ezininzi zokulungisa - kwaye oko kuqhelekile ngokupheleleyo.
Indlela yokwenza i-refactoring enkulu
Андрей: Usebenza njani kwintsebenzo? Le yingxaki enqamlezileyo. Umzekelo, ngaba ukhe wasebenza kwiingxaki ezivela ekudibaneni kwezinto ezininzi ezikhoyo?
UCliff: Ndiyazama ukuyiphepha. Ukuba ndiyazi ukuba ukusebenza kuya kuba ngumba, ndiyayicinga ngaphambi kokuba ndiqalise ukukhowuda, ngakumbi ngezakhiwo zedatha. Kodwa rhoqo ufumanisa konke oku emva kwexesha. Kwaye ke kufuneka uye kumanyathelo agqithisileyo kwaye wenze into endiyibiza ngokuthi "bhala kwakhona kwaye unqobe": kufuneka ubambe isiqwenga esikhulu ngokwaneleyo. Enye ikhowudi kusafuneka iphinde ibhalwe ngenxa yeengxaki zokusebenza okanye enye into. Nokuba sithini na isizathu sokuphinda ubhale ikhowudi, kusoloko kungcono ukubhala kwakhona iqhekeza elikhulu kuneqhekeza elincinci. Ngeli xesha, wonke umntu uqala ukungcangcazela ngoloyiko: "Owu Thixo wam, awukwazi ukuchukumisa ikhowudi eninzi!" Kodwa enyanisweni, le ndlela phantse ihlala isebenza ngcono kakhulu. Kufuneka ngokukhawuleza uthathe ingxaki enkulu, uzobe isangqa esikhulu esijikeleze kuyo kwaye uthi: Ndiza kubhala kwakhona yonke into ngaphakathi kwesangqa. Umda uncinci kakhulu kumxholo ongaphakathi kuwo ofuna ukutshintshwa. Kwaye ukuba ukucaciswa kwemida okunjalo kukuvumela ukuba wenze umsebenzi ngaphakathi ngokugqibeleleyo, izandla zakho zikhululekile, yenza into oyifunayo. Nje ukuba uqonde ingxaki, inkqubo yokubhala kwakhona ilula kakhulu, ngoko ke thatha i-bite enkulu!
Kwangaxeshanye, xa uphinda uphinde ubhale kwaye uqonde ukuba ukusebenza kuya kuba ngumba, ungaqala ukhathazeke ngoko nangoko. Oku kuhlala kuguquka kube zizinto ezilula ezinje "musa ukukopa idatha, lawula idatha ngokulula kangangoko, yenze ibencinci." Ekubhaleni kwakhona okukhulu, kukho iindlela eziqhelekileyo zokuphucula ukusebenza. Kwaye phantse zisoloko zijikeleza idatha.
Imodeli yeendleko
Андрей: Kwenye yeepodcast uthethe ngeemodeli zeendleko kumxholo wemveliso. Ngaba ungacacisa ukuba ubuthetha ukuthini ngoku?
UCliff: Ngokuqinisekileyo. Ndazalwa ngexesha apho ukusebenza kweprosesa kwakubaluleke kakhulu. Kwaye eli xesha libuya kwakhona - ikamva alikho ngaphandle kokuphoxa. Ndaqala ukuphila ngeentsuku zoomatshini abasibhozo; Ngokuchanekileyo ii-bytes. Yonke into yayincinci kakhulu. Imiyalelo kwafuneka ibalwe, kwaye njengoko sasiqalisa ukunyusa istakhi solwimi lwenkqubo, iilwimi zaya zisanda. Kwakukho i-Assembler, emva koko iSiseko, emva koko i-C, kunye no-C yayinyamekela iinkcukacha ezininzi, njengokwabiwa kwerejista kunye nokukhethwa kwemiyalelo. Kodwa yonke into yayicace gca apho, kwaye ukuba ndenze isalathiso kumzekelo woguquguqukayo, ndiza kufumana umthwalo, kwaye ixabiso lalo myalelo liyaziwa. I-hardware ivelisa inani elithile lemijikelo yomatshini, ngoko ke isantya sokwenziwa kwezinto ezahlukeneyo singabalwa ngokulula ngokudibanisa yonke imiyalelo oza kuyiqhuba. Ngalinye thelekisa / uvavanyo / isebe / umnxeba / umthwalo / ivenkile inokongezwa kwaye yathi: lixesha lokuphumeza kuwe. Xa usebenza ekuphuculeni ukusebenza, ngokuqinisekileyo uya kunikela ingqalelo ukuba yeyiphi amanani ahambelana nemijikelo encinci eshushu.
Kodwa kamsinya nje ukuba utshintshele kwiJava, iPython kunye nezinto ezifanayo, ngokukhawuleza usuka kude nehardware yenqanaba elisezantsi. Yintoni indleko yokufowunela i-getter eJava? Ukuba iJIT kwiHotspot ichanekile , izakulayishwa, kodwa ukuba ayikwenzanga oku, iya kuba ngumnxeba womsebenzi. Kuba umnxeba ukwi-loop eshushu, iya kugqitha zonke ezinye izinto ezilungiselelwe kulo loop. Ngoko ke, iindleko zokwenyani ziya kuba phezulu kakhulu. Kwaye ngokukhawuleza ulahlekelwa ukukwazi ukujonga isiqwenga sekhowudi kwaye uqonde ukuba kufuneka siyenze ngokubhekiselele kwisantya sewashi yeprosesa, imemori kunye ne-cache esetyenzisiweyo. Konke oku kuba nomdla kuphela ukuba ungene ngokwenene ekusebenzeni.
Ngoku sizifumana sikwimeko apho izantya zeprosesa azizange zonyuke kakhulu iminyaka elishumi. Iintsuku zakudala zibuyile! Awunakuphinda uthembele ekusebenzeni kakuhle komsonto omnye. Kodwa ukuba ngequbuliso ungene kwi-parallel computing, kunzima kakhulu, wonke umntu ujonge kuwe njengoJames Bond. Ukukhawuleza okuphindwe kalishumi apha kudla ngokwenzeka kwiindawo apho umntu onakalise into ethile. Concurrency ifuna umsebenzi omninzi. Ukufumana i-speedup ye-10x, kufuneka uqonde imodeli yeendleko. Yintoni kwaye yimalini. Kwaye ukwenza oku, kufuneka uqonde indlela ulwimi olungena ngayo kwi-hardware ephantsi.
UMartin Thompson wakhetha igama elihle kwiblogi yakhe ! Kuya kufuneka uqonde ukuba yintoni eza kwenziwa yi-hardware, ukuba iya kuyenza njani kanye, kwaye kutheni yenza le nto iyenzayo kwasekuqaleni. Ukusebenzisa oku, kulula ngokufanelekileyo ukuqala ukubala imiyalelo kunye nokuqonda ukuba ixesha lokuphumeza liya phi. Ukuba awunalo uqeqesho olufanelekileyo, ukhangela nje ikati emnyama kwigumbi elimnyama. Ndibona abantu bephucula ukusebenza ngalo lonke ixesha abangaziyo ukuba benza ntoni na. Babandezeleka kakhulu kwaye abenzi nkqubela ingako. Kwaye xa ndithatha isiqwenga sekhowudi enye, tyibilika kwiihakhi ezimbalwa kwaye ufumane isantya esiphindwe kahlanu okanye esiphindwe kashumi, zifana: Ewe, akulunganga, besisazi ukuba ungcono. Iyamangalisa. Ndithetha ngantoni ... imodeli yeendleko malunga nokuba luhlobo luni lwekhowudi oyibhalayo kunye nendlela ehamba ngayo ngokukhawuleza kumyinge kumfanekiso omkhulu.
Андрей: Kwaye ungayigcina njani ivolumu entloko yakho? Ngaba oku kufezekiswa ngamava amaninzi, okanye? Avela phi amava anjalo?
UCliff: Ewe, andizange ndifumane amava am ngeyona ndlela ilula. I ecwangciswe kwiNdibano emva ngemihla xa unokuqonda yonke imiyalelo eyodwa. Kuvakala ukuba bubudenge, kodwa ukusukela ngoko iseti yemiyalelo ye-Z80 ibisoloko ihleli entlokweni yam, kwinkumbulo yam. Andikhumbuli amagama abantu kumzuzu nje wokuthetha, kodwa ndikhumbula ikhowudi eyabhalwa kwiminyaka engama-40 eyadlulayo. Kuyahlekisa, kubonakala ngathi sisifo "».
Uqeqesho lokuphucula umgangatho ophantsi
Андрей: Ngaba ikho indlela elula yokungena?
UCliff: Ewe kwaye hayi. I-hardware esiyisebenzisayo sonke ayitshintshanga kangako ekuhambeni kwexesha. Wonke umntu usebenzisa i-x86, ngaphandle kwee-smartphones zeArm. Ukuba awenzi uhlobo oluthile lokufakela i-hardcore, wenza into efanayo. Kulungile, qhubeka. Imiyalelo nayo ayizange itshintshe kangangeenkulungwane. Kufuneka uhambe kwaye ubhale into kwiNdibano. Hayi kakhulu, kodwa ngokwaneleyo ukuba uqale ukuqonda. Uncumile, kodwa ndithetha ngokunyanisekileyo. Kufuneka uqonde imbalelwano phakathi kolwimi kunye nehardware. Emva koko kufuneka uhambe kwaye ubhale kancinci kwaye wenze umqokeleli omncinci wokudlala ngolwimi oluncinci lokudlala. Into yokudlala ithetha ukuba kufuneka yenziwe ngexesha elifanelekileyo. Ingalula kakhulu, kodwa kufuneka ivelise imiyalelo. Isenzo sokuvelisa umyalelo siya kukunceda uqonde imodeli yeendleko zebhulorho phakathi kwekhowudi yezinga eliphezulu elibhalwa ngumntu wonke kunye nekhowudi yomshini osebenza kwi-hardware. Le mbalelwano iya kutshiselwa ebuchotsheni ngexesha lokubhala umqambi. Nditsho neyona compiler ilula. Emva koko, ungaqala ukujonga iJava kunye nenyaniso yokuba umsantsa wayo we-semantic unzulu kakhulu, kwaye kunzima kakhulu ukwakha iibhulorho phezu kwayo. KwiJava, kunzima kakhulu ukuqonda ukuba ibhuloho yethu yaphuma ilungile okanye imbi, yintoni eya kubangela ukuba iwele kwaye yintoni engayi kuyenza. Kodwa udinga uhlobo oluthile lwesiqalo apho ujonga ikhowudi kwaye uqonde: "ewe, le getter kufuneka ifakwe ngalo lonke ixesha." Kwaye ke kuvela ukuba ngamanye amaxesha oku kwenzeka, ngaphandle kwemeko xa indlela iba enkulu kakhulu, kwaye i-JIT iqala ukufaka yonke into. Ukusebenza kweendawo ezinjalo kunokuqikelelwa ngoko nangoko. Ngokuqhelekileyo ii-getters zisebenza kakuhle, kodwa emva koko ujonga iilophu ezinkulu ezishushu kwaye uqonde ukuba kukho iminxeba ejikelezayo ejikelezayo apho engaziyo into abayenzayo. Le yingxaki yokusetyenziswa ngokubanzi kwee-getter, isizathu sokuba zingafakwanga kumgca kukuba akucaci ukuba ngaba i-getter. Ukuba unesiseko sekhowudi encinci kakhulu, unokuyikhumbula kwaye emva koko uthi: le yi getter, kwaye le yi setter. Kwisiseko sekhowudi enkulu, umsebenzi ngamnye uhlala kwimbali yawo, leyo, ngokubanzi, awaziwa nakubani na. Iprofayili ithi siphulukene ne-24% yexesha kwi-loop ethile kwaye ukuqonda ukuba le loop yenza ntoni, kufuneka sijonge umsebenzi ngamnye ngaphakathi. Akunakwenzeka ukuqonda oku ngaphandle kokufunda umsebenzi, kwaye oku kunciphisa kakhulu inkqubo yokuqonda. Yiyo loo nto ndingasebenzisi ii-getters kunye neeseta, ndifikelele kwinqanaba elitsha!
Ungayifumana phi imodeli yeendleko? Ewe, unokufunda into, ngokuqinisekileyo ... Kodwa ndicinga ukuba indlela engcono kakhulu kukwenza. Ukwenza i-compiler encinci iya kuba yindlela efanelekileyo yokuqonda imodeli yeendleko kwaye uyifake entloko yakho. Umqokeleli omncinci oya kufaneleka ukucwangcisa i-microwave ngumsebenzi kumntu oqalayo. Ewe, ndiyathetha, ukuba sele unazo izakhono zokucwangcisa, oko kufanele ukuba kwanele. Zonke ezi zinto zinjengokwahlulahlula umtya onawo njengoluhlobo oluthile lokuchazwa kwe-algebra, ukukhupha imiyalelo yokusebenza kwemathematika ukusuka apho ngendlela echanekileyo, ukuthatha amaxabiso achanekileyo kwiirejista - konke oku kwenziwa kanye. Kwaye ngelixa uyenza, iya kufakwa kwingqondo yakho. Ndicinga ukuba wonke umntu uyayazi into eyenziwa ngumqokeleli. Kwaye oku kuya kunika ukuqonda kwemodeli yeendleko.
Imizekelo esebenzayo yokuphucula ukusebenza
Андрей: Yintoni enye ekufuneka uyithathele ingqalelo xa usebenza kwimveliso?
UCliff: Ulwakhiwo lwedatha. Ngendlela, ewe, andizange ndifundise ezi klasi ixesha elide ... . Kwakumnandi, kodwa kufuna umgudu omkhulu, kwaye ndinobomi! KULUNGILE. Ngoko ke, kwenye yeeklasi ezinkulu nezinomdla, "Iyaphi intsebenzo yakho," ndinika abafundi umzekelo: iigigabhayithi ezimbini ezinesiqingatha zedatha ye-fintech zifundwe kwifayile ye-CSV kwaye kufuneka babale inani leemveliso ezithengisiweyo. . Idatha yemarike yamanqaku aqhelekileyo. Iipakethi ze-UDP ziguqulelwe kwifomathi yokubhaliweyo ukususela kwiminyaka engama-70. IChicago Mercantile Exchange - zonke iintlobo zezinto ezifana nebhotolo, umbona, iimbotyi zesoya, izinto ezinjalo. Kwakuyimfuneko ukubala ezi mveliso, inani leentengiselwano, umthamo oqhelekileyo wokuhamba kweemali kunye neempahla, njl. Yimathematika yorhwebo elula kakhulu: fumana ikhowudi yemveliso (eyi-1-2 ngoonobumba kwitheyibhile ye-hash), fumana imali, yongeze kwenye yeeseti zorhwebo, yongeza ivolumu, yongeza ixabiso, kunye nezinye izinto ezimbalwa. Izibalo ezilula kakhulu. Ukuphunyezwa kwamathoyizi kwakuchaneke kakhulu: yonke into ikwifayile, ndifunda ifayile kwaye ndihamba ngayo, ndihlukanise iirekhodi zomntu ngamnye kwiintambo zeJava, ndikhangele izinto eziyimfuneko kuzo kwaye ndongeze ngokwezibalo ezichazwe ngasentla. Kwaye isebenza ngesantya esisezantsi.
Ngale ndlela, kuyacaca ukuba kuqhubeka ntoni, kwaye icomputing efanayo ayizukunceda, akunjalo? Kuvela ukuba ukunyuka okuphindwe kahlanu ekusebenzeni kunokufezekiswa ngokulula ngokukhetha izakhiwo zedatha ezifanelekileyo. Kwaye oku kothusa nabadwelisi benkqubo abanamava! Kwimeko yam ethile, iqhinga yayikukuba akufanele wenze ulwabiwo lwenkumbulo kwilophu eshushu. Ewe, oku ayisiyiyo yonke inyani, kodwa ngokubanzi - akufanele uqaqambise "kanye ku-X" xa i-X inkulu ngokwaneleyo. Xa u-X eziigigabhayithi ezimbini ezinesiqingatha, akufunekanga unikeze nantoni na “kanye ngonobumba”, okanye “kanye ngomgca ngamnye”, okanye “kanye kwindawo nganye”, nantoni na elolo hlobo. Kulapho ixesha lichithwa khona. Isebenza njani le nto? Khawufane ucinge ndifowuna String.split() okanye BufferedReader.readLine(). Readline yenza umtya ukusuka kwiseti yee-bytes eze phezu komsebenzi womnatha, kube kanye kumgca ngamnye, kumakhulu ezigidi zemigca. Ndithatha lo mgca, ndiwucazulule ndiwulahle kude. Kutheni ndiyilahla-ke, sele ndiyilungisile, yiyo yonke loo nto. Ngoko ke, kwi-byte nganye efundwayo kule 2.7G, abalinganiswa ababini baya kubhalwa kumgca, oko kukuthi, sele sele i-5.4G, kwaye andiyifuni enye into eyongezelelweyo, ngoko balahlwa kude. Ukuba ujonga i-bandwidth yememori, silayisha i-2.7G ehamba ngememori kunye nebhasi yememori kwiprosesa, kwaye ngokuphindwe kabini ithunyelwa kumgca olele kwimemori, kwaye konke oku kuphelile xa umgca omtsha udalwa. Kodwa kufuneka ndiyifunde, i-hardware iyayifunda, nokuba yonke into iphelile kamva. Kwaye kufuneka ndiyibhale phantsi kuba ndidale umgca kwaye i-cache igcwele - i-cache ayikwazi ukufumana i-2.7G. Ngoko ke, kwi-byte nganye endiyifundileyo, ndifunda ii-byte ezimbini kwaye ndibhala ii-byte ezimbini, kwaye ekugqibeleni banomlinganiselo we-4: 1 - kulo mlinganiselo sichitha i-memory bandwidth. Kwaye ke kuvela ukuba ndenza njalo String.split() – eli ayisosihlandlo sokugqibela ndisenza oku, kusenokubakho amanye amasimi angama-6-7 ngaphakathi. Ke ikhowudi yakudala yokufunda iCSV kwaye emva koko ukwahlulahlula imitya inkunkuma malunga ne-14:1 ye-bandwidth yememori ongayifuna ngokwenene. Ukuba ulahla olu khetho, unokufumana isantya esiphindwe kahlanu.
Kwaye akukho nzima kangako. Ukuba ujonga ikhowudi kwi-engile elungileyo, konke kuba lula xa uqaphela ingxaki. Akufanele uyeke ukwaba imemori ngokupheleleyo: ingxaki kuphela kukuba unikezela into ethile kwaye iyafa ngokukhawuleza, kwaye endleleni itshisa isibonelelo esibalulekileyo, kule meko imemori bandwidth. Kwaye konke oku kubangela ukuhla kwemveliso. Kwi-x86 uhlala ufuna ukutshisa imijikelo yeprosesa, kodwa apha utshise yonke inkumbulo ngaphambili. Isisombululo kukunciphisa umthamo wokukhutshwa.
Enye inxalenye yengxaki kukuba ukuba uqhuba iprofayili xa umgca wememori uphela, kanye xa kusenzeka, uhlala ulindele ukuba i-cache ibuye ngenxa yokuba igcwele inkunkuma osanda kuvelisa, yonke loo migca. Ke ngoko, wonke umthwalo okanye umsebenzi wevenkile uyacotha, kuba zikhokelela ekuphosweni kwe-cache - yonke i-cache iye yacotha, ilindele ukuba inkunkuma iyishiye. Ke ngoko, iprofayili iya kubonisa ingxolo efudumeleyo engacwangciswanga kuyo yonke loop - akuyi kubakho myalelo wahlukileyo oshushu okanye indawo kwikhowudi. Yingxolo kuphela. Kwaye ukuba ujonga imijikelo yeGC, zonke zisisizukulwana esiselula kwaye zikhawuleza kakhulu-i-microseconds okanye i-millisecond ubuninzi. Emva kwayo yonke loo nto, yonke le nkumbulo ifa ngoko nangoko. Unika iibhiliyoni zeegigabhayithi, kwaye uyazisika, azisike, azisike kwakhona. Konke oku kwenzeka ngokukhawuleza. Kuyavela ukuba kukho imijikelo ye-GC etshiphu, ingxolo efudumeleyo kuwo wonke umjikelo, kodwa sifuna ukufumana isantya se-5x. Ngeli xesha, into kufuneka ivale entlokweni yakho kwaye ivakalise: "Kutheni le nto?!" Ukuphuphuma kwe-Memory strip akuboniswa kwi-debugger yakudala, kufuneka uqhube i-hardware counter debugger kwaye uzibonele ngokwakho kwaye ngokuthe ngqo. Kodwa oku akunakukrokrelwa ngokuthe ngqo kwezi mpawu zintathu. Uphawu lwesithathu xa ujonga into oyigqamisayo, buza iprofayili, kwaye uyaphendula: "Wenze imiqolo yeebhiliyoni, kodwa i-GC isebenze simahla." Ngokukhawuleza ukuba oku kwenzeka, uyaqonda ukuba udale izinto ezininzi kwaye utshise yonke indlela yememori. Kukho indlela yokuyiqonda le nto, kodwa ayicacanga.
Ingxaki ikwisakhiwo sedatha: isakhiwo esingenanto esiphantsi kwayo yonke into eyenzekayo, sikhulu kakhulu, yi-2.7G kwidiski, ngoko ukwenza ikopi yale nto ayinqweneleki kakhulu - ufuna ukuyilayisha ngokukhawuleza kwi-network byte buffer. kwiirejista, ukuze ungafundi-ubhale kumgca ubuye naphambili izihlandlo ezihlanu. Ngelishwa, iJava ayikuniki ithala leencwadi njengenxalenye ye-JDK ngokungagqibekanga. Kodwa oku kuyinto encinci, akunjalo? Ngokusisiseko, ezi zi-5-10 iilayini zekhowudi eza kusetyenziswa ukuphumeza eyakho i-buffered string loader, ephinda impatho yodidi lomtya, ngelixa usisisongelo esingqonge isithinteli se-byte esezantsi. Ngenxa yoko, kuyavela ukuba usebenza phantse ngokungathi uneentambo, kodwa eneneni izikhombisi kwi-buffer ziyahamba apho, kwaye iibytes ezikrwada azikhutshelwa naphi na, kwaye ke ezi buffers ziphinda zisetyenziswe ngokuphindaphindiweyo, kwaye. inkqubo yokusebenza iyakuvuyela ukuthathela kuwe izinto eziyilelweyo, njengokufihlakala kabini kwezi buffers ze-byte, kwaye awusayi kusila ngokusebenzisa umlambo ongapheliyo wedatha engeyomfuneko. Ngendlela, ngaba uyaqonda ukuba xa usebenza ne-GC, kuqinisekisiwe ukuba ulwabiwo lwememori nganye aluyi kubonakala kwiprosesa emva komjikelezo wokugqibela weGC? Ke ngoko, konke oku akunakubakho kwi-cache, kwaye ke ukuphoswa okuqinisekisiweyo kwe-100% kwenzeka. Xa usebenza ngesalathisi, kwi-x86, ukukhupha irejista kwimemori kuthatha i-1-2 imijikelezo yewotshi, kwaye ngokukhawuleza oku kwenzeka, uhlawula, uhlawule, uhlawule, kuba imemori ivuliwe. - kwaye le yindleko yolwabiwo lwememori. Ixabiso lokwenyani.
Ngamanye amazwi, izakhiwo zedatha yeyona nto inzima ukuyitshintsha. Kwaye xa uqaphela ukuba ukhethe ulwakhiwo lwedatha olungalunganga oluya kubulala ukusebenza kamva, kuhlala kukho umsebenzi omninzi ekufuneka wenziwe, kodwa ukuba awenzi njalo, izinto ziya kuba mbi ngakumbi. Okokuqala, kufuneka ucinge malunga nezakhiwo zedatha, oku kubalulekile. Elona xabiso liphambili apha liwela kulwakhiwo lwedatha yamafutha, eqala ukusetyenziswa kwisitayile "Ndikhuphele ubume bedatha X kwisakhiwo sedatha Y kuba ndiyayithanda imilo yeY ngcono." Kodwa umsebenzi wokukhuphela (okubonakala ngathi ungabizi kakhulu) uchitha i-memory bandwidth kwaye kulapho lonke ixesha lokubulala elichithiweyo lingcwatywa khona. Ukuba ndinomtya omkhulu we-JSON kwaye ndifuna ukuyijika ibe ngumthi we-DOM owakhiweyo we-POJOs okanye into ethile, ukusebenza kokwahlulahlula loo mtya kunye nokwakha i-POJO, kwaye emva koko ndifikelele kwi-POJO kwakhona kamva, kuya kubangela iindleko ezingafunekiyo-yiyo. hayi cheap. Ngaphandle kokuba ujikeleza ii-POJO rhoqo kakhulu kunokuba ujikeleza umtya. Ngaphandle koko, endaweni yoko ungazama ukucofa umtya kwaye ukhuphe kuphela into oyifunayo ukusuka apho, ngaphandle kokuyijika ibe kuyo nayiphi na i-POJO. Ukuba konke oku kuyenzeka kwindlela ekufunwa ngayo ukusebenza okuphezulu, akukho POJOs kuwe, kufuneka ngandlela thile umbe kumgca ngokuthe ngqo.
Kutheni udala ulwimi lwakho lwenkqubo
Андрей: Uthe ukuze uqonde imodeli yeendleko, kufuneka ubhale ulwimi lwakho oluncinci...
UCliff: Hayi ulwimi, kodwa compiler. Ulwimi kunye nomqokeleli zizinto ezimbini ezahlukeneyo. Owona mahluko ubalulekileyo usentloko yakho.
Андрей: Ngokwazi kwam, uzama ukwenza iilwimi zakho. Yantoni?
UCliff: Kuba ndiyakwazi! Ndithathe umhlala-phantsi, ke le yindlela yam yokuzonwabisa. Ubomi bam bonke bendisebenzisa iilwimi zabanye abantu. Ndikwasebenze kakhulu kwisitayile sam sekhowudi. Kwaye nangenxa yokuba ndibona iingxaki kwezinye iilwimi. Ndiyabona ukuba kukho iindlela ezingcono zokwenza izinto eziqhelekileyo. Kwaye bendiya kuzisebenzisa. Ndidiniwe nje kukubona iingxaki kum, kwiJava, kwiPython, nangaluphi na olunye ulwimi. Ngoku ndibhala kwi-React Native, JavaScript kunye ne-Elm njengento yokuzonwabisa engekho malunga nomhlalaphantsi, kodwa malunga nomsebenzi osebenzayo. Ndibhala kwakhona kwiPython kwaye, ngokuqinisekileyo, iya kuqhubeka nokusebenza kumatshini wokufunda kwiJava backends. Zininzi iilwimi ezidumileyo kwaye zonke zineempawu ezinomdla. Wonke umntu ulungile ngendlela yakhe kwaye unokuzama ukuhlanganisa zonke ezi mpawu. Ke, ndifunda izinto ezindinika umdla, indlela yokuziphatha yolwimi, ndizama ukuza neesemantics ezifanelekileyo. Kwaye ngoku ndiyaphumelela! Okwangoku ndizamana ne-memory semantics, kuba ndifuna ukuba nayo njengakwi-C kunye ne-Java, kwaye ndifumane imodeli eqinile yememori kunye ne-memory semantics yemithwalo kunye neevenkile. Kwangaxeshanye, yiba nohlobo oluzenzekelayo lwe-inference njengaseHaskell. Apha, ndizama ukuxuba i-Haskell-like inference kunye nomsebenzi wememori kuzo zombini i-C kunye neJava. Ndiye ndenza oku kwiinyanga ezi-2-3 zokugqibela, umzekelo.
Андрей: Ukuba wakha ulwimi oluthatha imiba engcono kwezinye iilwimi, ucinga ukuba kukho umntu oza kwenza okwahlukileyo: thatha izimvo zakho uzisebenzise?
UCliff: Yile ndlela kanye ezibonakala ngayo iilwimi ezintsha! Kutheni iJava ifana noC? Ngenxa yokuba i-C yayine-syntax efanelekileyo eyaqondwa ngumntu wonke kwaye iJava yayiphefumlelwe yile syntax, yongeza ukhuseleko lohlobo, ukukhangela imida yoluhlu, i-GC, kwaye baphucula ezinye izinto ukusuka ku-C. Bongeze ezabo. Kodwa babephefumlelwe kakhulu, akunjalo? Wonke umntu umi emagxeni eengxilimbela ezifike phambi kwenu – injalo ke inkqubela eyenziwayo.
Андрей: Njengoko ndiyiqonda, ulwimi lwakho luya kukhuseleka kwimemori. Ngaba ukhe wacinga malunga nokuphumeza into efana nomkhangeli wemboleko kwi-Rust? Umjongile, ucinga ntoni ngaye?
UCliff: Ewe, kudala ndibhala i-C, nayo yonke le malloc kwaye isimahla, kwaye ndilawula ubomi ubomi. Uyazi, i-90-95% yexesha lokuphila elilawulwa ngesandla linesakhiwo esifanayo. Kwaye kubuhlungu kakhulu ukuyenza ngesandla. Ndingathanda ukuba umqokeleli akuxelele nje okwenzekayo apho kunye nokuba uphumelele ntoni ngezenzo zakho. Kwezinye izinto, umkhangeli-mali uyakwenza oku ngaphandle kwebhokisi. Kwaye kufuneka ibonise ulwazi ngokuzenzekelayo, iqonde yonke into, kwaye ingandithwali umthwalo ngokubonisa oku kuqonda. Kufuneka yenze ubuncinci uhlalutyo lokubaleka kwendawo, kwaye kuphela ukuba iyasilela, ngoko kufuneka yongeze uhlobo lwamanqakwana oluya kuchaza ubomi bonke - kwaye inkqubo enjalo intsonkothe kakhulu kunomkhangeli wemboleki, okanye ngenene nawuphi na umkhangeli wememori okhoyo. Ukukhetha phakathi "konke kulungile" kwaye "andiqondi nto" - hayi, kufuneka kubekho into engcono.
Ngoko ke, njengomntu obhale ikhowudi eninzi kwi-C, ndicinga ukuba ukuba nenkxaso yokulawula ubomi obuzenzekelayo yeyona nto ibalulekileyo. Ndikwadikwe yindlela iJava esebenzisa ngayo imemori kwaye isikhalazo esikhulu yiGC. Xa unikezela ngenkumbulo kwiJava, awuzukufumana umva inkumbulo ebiyindawo kumjikelo weGC wokugqibela. Oku akunjalo kwiilwimi ezinolawulo oluchanekileyo lwememori. Ukuba ubiza i-malloc, ngokukhawuleza ufumana imemori eyayidla ngokusetyenziswa. Ngesiqhelo wenza ezinye izinto zethutyana ngenkumbulo kwaye ngoko nangoko uyibuyisele emva. Kwaye ngokukhawuleza ibuyela kwi-malloc pool, kwaye umjikelezo we-malloc olandelayo uyayikhupha kwakhona. Ke ngoko, ukusetyenziswa kwenkumbulo yokwenyani kuncitshiswe kwiseti yezinto eziphilayo ngexesha elithile, kunye nokuvuza. Kwaye ukuba yonke into ayivuzi ngendlela engafanelekanga ngokupheleleyo, ininzi yememori iphelela kwi-cache kunye neprosesa, kwaye isebenza ngokukhawuleza. Kodwa ifuna ulawulo oluninzi lwememori yesandla kunye ne-malloc kwaye yasimahla ebizwa ngokulandelelana kwayo, kwindawo elungileyo. Umhlwa unokuphatha oku ngokufanelekileyo ngokwawo, kwaye kwiimeko ezininzi unika ukusebenza okungcono ngakumbi, kuba ukusetyenziswa kwememori kucuthelwe ukuya kwi-computing yangoku - ngokuchaseneyo nokulinda umjikelo olandelayo weGC ukukhulula imemori. Ngenxa yoko, sifumene indlela enomdla kakhulu yokuphucula ukusebenza. Kwaye kunamandla kakhulu-ndithetha ukuba, ndenze izinto ezinjalo xa ndilungisa idatha ye-fintech, kwaye oku kundivumele ukuba ndifumane isantya esimalunga namaxesha amahlanu. Lukhuthazo olukhulu olo, ngakumbi kwihlabathi apho iiprosesa zingaqhubeki ngokukhawuleza kwaye sisalinde ukuphuculwa.
Umsebenzi weNjineli wokuSebenza
Андрей: Ndingathanda ukubuza malunga namakhondo ngokubanzi. Uphakame waduma ngomsebenzi wakho weJIT eHotSpot emva koko wafudukela eAzul, eyinkampani yeJVM. Kodwa besisele sisebenza ngakumbi kwihardware kunesoftware. Kwaye ke ngequbuliso batshintshela kwiDatha enkulu kunye nokuFunda koMatshini, kwaye emva koko babhaqa ubuqhetseba. Yenzeka njani le nto? Ezi ziindawo ezahlukeneyo zophuhliso.
UCliff: Kudala ndicwangcisa ixesha elide kwaye ndikwazile ukuthatha iiklasi ezininzi ezahlukeneyo. Kwaye xa abantu besithi: "oh, nguwe owenze iJIT yeJava!", isoloko ihlekisa. Kodwa ngaphambi koko, bendisebenza kwi-clone ye-PostScript-ulwimi olwakhe lwasetyenziswa ngu-Apple kubashicileli bayo belaser. Kwaye ngaphambi koko ndenze ukuphunyezwa kolwimi lwesi-Forth. Ndicinga ukuba umxholo oqhelekileyo kum kuphuhliso lwesixhobo. Ubomi bam bonke bendisenza izixhobo apho abanye abantu babhala iinkqubo zabo ezipholileyo. Kodwa ndaye ndabandakanyeka kuphuhliso lweenkqubo zokusebenza, abaqhubi, i-kernel-level debuggers, iilwimi zophuhliso lwe-OS, eziqale zincinci, kodwa ekuhambeni kwexesha zaba nzima ngakumbi. Kodwa isihloko esiphambili sisekuphuhliso lwezixhobo. Inxalenye enkulu yobomi bam yadlula phakathi kweAzul neLanga, kwaye yayimalunga neJava. Kodwa ndithe ndakungena kwiBig Data kunye nokuFunda koMatshini, ndawubeka umnqwazi wam omnandi ndathi, "Owu, ngoku sinengxaki engeyonto encinci, kwaye zininzi izinto ezinomdla ezenzekayo kwaye abantu benza izinto." Le yindlela enkulu yophuhliso ekufuneka ithathwe.
Ewe, ndiyithanda kakhulu icomputing esasazwayo. Umsebenzi wam wokuqala yayikukufunda eC, kumsebenzi wokubhengeza. Oku kwasasazwa i-computing kwiichips zeZilog Z80 eziqokelele idatha ye-analog OCR, eveliswe ngumhlalutyi we-analog wangempela. Yayingumxholo opholileyo nophambene ngokupheleleyo. Kodwa ke bekukho iingxaki, enye indawo ibingaqatshelwanga kakuhle, bekunyanzelekile ke ukuba ukhuphe umfanekiso uwubonise umntu osele ekwazi ukufunda ngamehlo achaze ukuba ithini na, kwaye ke kukho imisebenzi enedata, kwaye le misebenzi. babenolwimi lwabo . Kwakukho umva owenze konke oku - ii-Z80s ezisebenza ngokunxuseneyo kunye neeterminal ze-vt100 eziqhuba - umntu ngamnye, kwaye bekukho imodeli yenkqubo efanayo kwi-Z80. Elinye iqhekeza eliqhelekileyo lenkumbulo ekwabelwana ngalo zizo zonke ii-Z80s ngaphakathi koqwalaselo lwenkwenkwezi; I-backplane yabelwana nayo, kwaye isiqingatha se-RAM sabelwa ngaphakathi kwenethiwekhi, kwaye esinye isiqingatha sasiyimfihlo okanye siye kwenye into. Inkqubo enentsingiselo edityanisiweyo enxuseneyo esasazwayo enenkumbulo ekwabelwanayo... ekwabelwana ngesiqingatha. Kwakunini oku ... andikhumbuli, kwindawo ethile phakathi kwe-80s. Kudala kakhulu.
Ewe, masicinge ukuba iminyaka engama-30 kudala kakhulu -amaqela. Amaqela anjalo ajongeka ngathi... Umzekelo: kukho i-Ethernet kwaye i-x86 yakho ekhawulezayo iqhagamshelwe kule Ethernet, kwaye ngoku ufuna ukufumana inkumbulo ekwabelwana ngayo, kuba akukho mntu unokwenza usasazo lwekhowudi yecomputing ngoko, bekunzima kakhulu ke ngoko. yayiyinkumbulo ekwabelwana ngayo ngomgunyathi enamaphepha enkumbulo yokhuseleko kwi-x86, kwaye ukuba ubhale kweli phepha, ngoko sixelele abanye abaqhubekekisi ukuba bafikelela kwinkumbulo efanayo ekwabelwana ngayo, kuya kufuneka ukuba ilayishwe kuwe, kwaye ngaloo ndlela into efana neprotocol yokuxhasa. Ukuhambelana kwecache kubonakala kunye nesoftware yale nto. Ingcamango enomdla. Eyona ngxaki yayiyenye into. Konke oku kwasebenza, kodwa ngokukhawuleza wafumana iingxaki zokusebenza, kuba akukho mntu wayeqonda iimodeli zokusebenza kwinqanaba elaneleyo - zeziphi iipateni zokufikelela kwimemori ezazikho, indlela yokuqinisekisa ukuba ii-nodes azizange zidibanise ngokungapheliyo, njalo njalo.
Into endiyifumene nayo kwi-H2O kukuba ngabaphuhlisi ngokwabo abanoxanduva lokugqiba apho ukufana kufihliweyo kwaye apho kungekho khona. Ndeza nemodeli yekhowudi eyenza ukubhala ikhowudi ephezulu yokusebenza kulula kwaye kulula. Kodwa ukubhala ikhowudi ehamba kancinci kunzima, kuya kubonakala kubi. Kuya kufuneka uzame ukubhala ikhowudi ecothayo, kuya kufuneka usebenzise iindlela ezingekho mgangathweni. Ikhowudi ye-braking ibonakala ekuqaleni. Ngenxa yoko, uhlala ubhala ikhowudi ehamba ngokukhawuleza, kodwa kufuneka uqikelele ukuba wenze ntoni kwimeko yememori ekwabelwana ngayo. Konke oku kubotshelelwe kuluhlu olukhulu kunye nokuziphatha apho kuyafana neendawo ezinkulu ezingaguquguqukiyo kwiJava enxuseneyo. Ndiyathetha, khawucinge ukuba imisonto emibini ibhalela kuluhlu oluhambelanayo, enye yazo iyaphumelela, kwaye enye, ngokufanelekileyo, ilahlekile, kwaye awazi ukuba yeyiphi. Ukuba aziguquguquki, ngoko ke umyalelo unokuba yiyo nantoni na oyifunayo - kwaye oku kusebenza kakuhle. Abantu bakhathalele ngokwenene ulungelelwaniso lokusebenza, babeka ukuguquguquka kwiindawo ezifanelekileyo, kwaye balindele iingxaki zokusebenza ezinxulumene nememori kwiindawo ezifanelekileyo. Ngaphandle koko, banokubhala ikhowudi ngendlela ye-loops ukusuka ku-1 ukuya ku-N, apho i-N izizigidi zezigidi, ngethemba lokuba zonke iimeko ezinzima ziya kuhambelana ngokuzenzekelayo - kwaye ayisebenzi apho. Kodwa kwi-H2O le ayiyoJava okanye i-Scala ungayithathela ingqalelo "i-Java minus" ukuba uyafuna. Le yindlela ecacileyo yeprogram kwaye ifana nokubhala ikhowudi ye-C okanye yeJava elula kunye ne-loops kunye ne-arrays. Kodwa kwangaxeshanye, inkumbulo inokucutshungulwa kwi-terabytes. Ndisasebenzisa i-H2O. Ndiyisebenzisa ngamaxesha ngamaxesha kwiiprojekthi ezahlukeneyo - kwaye iseyeyona nto ikhawulezayo, amaxesha amaninzi ngokukhawuleza kunabakhuphisana nabo. Ukuba wenza iDatha enkulu ngedatha yekholomu, kunzima kakhulu ukubetha i-H2O.
Imingeni yobuGcisa
Андрей: Ngowuphi owona mceli mngeni mkhulu emsebenzini wakho wonke?
UCliff: Ngaba sixoxa ngenxalenye yobuchwephesha okanye engeyiyo eyezobugcisa kulo mba? Ndingathi eyona miceli mngeni inkulu ayibobuchwephesha.
Ngokuphathelele imingeni yobugcisa. Ndivele ndaboyisa. Andazi nokuba yeyiphi eyona inkulu, kodwa bekukho ezinye ezinomdla ezithathe ixesha elide, umzabalazo wengqondo. Xa ndaya eLangeni, ndandiqinisekile ukuba ndiza kwenza umqokeleli okhawulezayo, kwaye iqela labadala lathi ukuphendula ukuba andinakuze ndiphumelele. Kodwa ndalandela le ndlela, ndabhala umqokeleli phantsi kwirejista, kwaye yayikhawuleza kakhulu. Yayikhawuleza njenge-C1 yanamhlanje, kodwa i-alllocator yayicotha kakhulu emva koko, kwaye emva koko yayiyingxaki enkulu yolwakhiwo lwedatha. Ndandiyidinga ukuba ibhale irejista ye-graphical allocator kwaye andizange ndiyiqonde ingxaki phakathi kokuchazwa kwekhowudi kunye nesantya, esasikho ngelo xesha kwaye sasibaluleke kakhulu. Kwafumaniseka ukuba ulwakhiwo lwedatha ludla ngokugqitha ubungakanani be-cache kwi-x86s yelo xesha, kwaye ke, ukuba bendicinga ekuqaleni ukuba umamkeli werejista uza kwenza i-5-10 yepesenti yexesha le-jitter lilonke, ngoko ngokwenene kuye kwavela. 50 ekhulwini.
Njengoko ixesha lihamba, umqokeleli uye wacoceka kwaye wasebenza ngakumbi, wayeka ukuvelisa ikhowudi eyoyikekayo kwiimeko ezininzi, kwaye ukusebenza ngokunyuka kwaqala ukufana noko kuveliswa ngumqokeleli we-C Ngaphandle kokuba, ngokuqinisekileyo, ubhala i-crap ukuba i-C ayikhawulezi . Ukuba ubhala ikhowudi efana no-C, uya kufumana ukusebenza okufana no-C kwiimeko ezininzi. Kwaye ngokuya usiya phambili, kokukhona ufumana ikhowudi ehambelana nenqanaba C, umamkeli werejista waqala ukubonakala ngathi yinto epheleleyo... nokuba ikhowudi yakho ibaleka ngokukhawuleza okanye kade. Ndaqhubeka ndisebenza kwi-llocator ukwenza ukhetho olungcono. Wacotha kwaye wacotha, kodwa wanika ukusebenza okungcono kunye nokungcono kwiimeko apho kungekho mntu unokuhlangabezana nazo. Ndiyakwazi ukuntywila kumthengisi werejista, ndingcwabe inyanga yomsebenzi apho, kwaye ngequbuliso yonke ikhowudi iya kuqalisa ukwenza i-5% ngokukhawuleza. Oku kwenzeka emva kwexesha kwaye umamkeli werejista waba yinto yomsebenzi wobugcisa - wonke umntu wayeyithanda okanye wayeyithiyile, kwaye abantu abavela kwi-academy babuza imibuzo ngesihloko esithi "kutheni yonke into yenziwe ngolu hlobo", kutheni kungenjalo , kwaye yintoni umahluko. Impendulo isafana: i-alllocator esekelwe kwipeyinti yegrafu kunye nomsebenzi oqaphela kakhulu kunye nekhowudi ye-buffer ilingana nesixhobo soloyiso, indibaniselwano engcono ekungekho mntu unokuyoyisa. Kwaye le yinto engabonakaliyo. Yonke enye into eyenziwa ngumqokeleli kukho izinto ezifundwe kakuhle, nangona ziye zaziswa kwinqanaba lobugcisa. Ndandisoloko ndisenza izinto ekwakufanele zijike umqokeleli abe ngumsebenzi wobugcisa. Kodwa akukho nanye kwezi yayiyeyona nto ingaqhelekanga - ngaphandle kwalowo wabela irejista. Iqhinga kukulumka phantsi komthwalo kwaye, ukuba oku kwenzeka (ndiyakwazi ukucacisa ngakumbi ukuba unomdla), oku kuthetha ukuba ungangena emgqeni ngokugqithiseleyo, ngaphandle komngcipheko wokuwa kwi-kink kwishedyuli yokusebenza. Ngaloo mihla, kwakukho iqela labaqulunqi abapheleleyo, ababexhonywe ngamabhulu kunye neempempe, ababenabo abagcini bokubhalisa, kodwa akukho mntu wumbi onokuyenza.
Ingxaki kukuba, ukuba wongeza iindlela eziphantsi kokufakwa kwe-inlining, ukwandisa kunye nokwandisa indawo ye-inlining, iseti yamaxabiso asetyenzisiweyo idlula ngokukhawuleza inani leerejista, kwaye kufuneka uzinqumle. Inqanaba elibalulekileyo lidla ngokuza xa umabi enikezela, kwaye omnye umgqatswa olungileyo wokuchitheka uxabisa omnye, uya kuthengisa ezinye izinto zasendle ngokubanzi. Ixabiso le-inlining apha kukuba ulahlekelwe yinxalenye ye-overhead, i-overhead yokufowuna kunye nokugcina, unokuwabona amaxabiso ngaphakathi kwaye unokuwenza ngcono ngakumbi. Iindleko ze-inlining kukuba inani elikhulu lamaxabiso aphilayo liyenziwa, kwaye ukuba umthengisi wakho werejista uyatsha ngaphezulu kunokuba kuyimfuneko, ulahlekelwa ngoko nangoko. Ngoko ke, abaninzi abanikezeli banengxaki: xa i-inlining iwela umgca othile, yonke into ehlabathini iqala ukugawulwa kwaye imveliso inokuchithwa phantsi kwindlu yangasese. Abo baphumeza umqokeleli bongeza ezinye i-heuristics: umzekelo, ukuyeka ukungaphakathi, ukuqala ngobungakanani obukhulu ngokwaneleyo, ekubeni ulwabiwo luya kutshabalalisa yonke into. Le yindlela eyenziwe ngayo i-kink kwigrafu yokusebenza - wena ungaphakathi, ungaphakathi, intsebenzo ikhula ngokucothayo - kwaye emva koko i-boom! - iwela phantsi njengejekhi ekhawulezayo kuba ufolele kakhulu. Le yindlela yonke into eyayisebenza ngayo ngaphambi kokufika kweJava. I-Java idinga ukufakwa kwe-inlining okuninzi, ke kuye kwafuneka ndenze umamkeli wam ukuba abe ndlongondlongo ngakumbi ukuze aphume ngaphandle kunokungqubana, kwaye ukuba ungaphakathi kakhulu, iqala ukuchitheka, kodwa ke umzuzu “wokungaphalali” uyeza. Lo ngumbono onomdla kwaye uvele weza kum ngaphandle kwendawo, kungabonakali, kodwa kuhlawule kakuhle. Ndathatha i-inlining enobudlova kwaye yandithatha ukuya kwiindawo apho ukusebenza kweJava kunye noC kusebenza kunye. Basondele kakhulu-ndingabhala ikhowudi yeJava ekhawuleza kakhulu kunekhowudi ye-C kunye nezinto ezinjalo, kodwa ngokomndilili, kumfanekiso omkhulu wezinto, ziyathelekiseka. Ndicinga ukuba inxalenye yale merit ngumniki-mali werejista, ondivumela ukuba ndingene emgceni ngobudenge kangangoko ndinako. Ndijonge nje yonke into endiyibonayo. Umbuzo apha ngowokuba ngaba i-allocator isebenza kakuhle na, nokuba isiphumo yikhowudi yokusebenza ngobukrelekrele. Oku kwakulucelomngeni olukhulu: ukuqonda yonke le nto nokuyenza isebenze.
Kancinci malunga nolwabiwo lwerejista kunye ne-multi-cores
Владимир: Iingxaki ezinjengokwabiwa kwerejista kubonakala ngathi luhlobo oluthile lwesihloko esingunaphakade, esingenasiphelo. Ndiyazibuza ukuba kukhe kwakho uluvo olubonakala luthembisa kwaye lwasilela ekusebenzeni?
UCliff: Ngokuqinisekileyo! Ulwabiwo lwerejista yindawo apho uzama khona ukufumana ezinye iiheuristics ukusombulula ingxaki yeNP-epheleleyo. Kwaye awunakuze ufezekise isisombululo esigqibeleleyo, akunjalo? Oku akunakwenzeka. Jonga, Phambi kweXesha lokuqulunqa - ikwasebenza kakubi. Incoko apha imalunga neemeko eziqhelekileyo. Malunga nokusebenza okuqhelekileyo, ke unokuya kwaye ulinganise into ocinga ukuba ilungile intsebenzo eqhelekileyo - emva kwayo yonke loo nto, usebenza ukuyiphucula! Ulwabiwo lwerejista sisihloko malunga nomsebenzi. Nje ukuba ube neprototype yokuqala, iyasebenza kwaye ipeyinte oko kufunekayo, umsebenzi wokusebenza uqala. Kufuneka ufunde ukulinganisa kakuhle. Kutheni ibalulekile nje? Ukuba unedatha ecacileyo, unokujonga kwiindawo ezahlukeneyo kwaye ubone: ewe, kuncede apha, kodwa yilapho yonke into yaphuka khona! Ezinye iimbono ezilungileyo zivela, wongeza i-heuristics entsha kwaye ngokukhawuleza yonke into iqala ukusebenza ngcono kancinci kumndilili. Okanye ayiqalisi. Ndandineqela lamatyala apho sasilwela ukusebenza kweepesenti ezintlanu okwahlula uphuhliso lwethu kulowo wayesabelwa ngaphambili. Kwaye ngalo lonke ixesha kubonakala ngathi: kwindawo ethile uphumelele, kwindawo ethile ulahlekelwa. Ukuba unezixhobo ezilungileyo zokuhlalutya ukusebenza, unokufumana iingcamango ezilahlekileyo kwaye uqonde ukuba kutheni zisilela. Mhlawumbi kufanelekile ukushiya yonke into njengoko injalo, okanye mhlawumbi uthathe indlela enzulu yokulungisa kakuhle, okanye uphume uyolungisa enye into. Yintlaninge yezinto! Ndenze le hack ipholileyo, kodwa ndiyayidinga le, kunye nale, kunye nale - kunye nendibaniselwano yabo iyonke inika uphuculo. Kwaye abantu ababodwa banokungaphumeleli. Olu luhlobo lomsebenzi wentsebenzo kwiingxaki ezipheleleyo zeNP.
Владимир: Umntu ufumana imvakalelo yokuba izinto ezifana nokupeyinta kwi-llocators yingxaki esele isonjululwe. Ewe, kugqitywe kuwe, ugweba ngale nto uyithethayo, ifanelekile ke ngoko...
UCliff: Ayisonjululwa ngolo hlobo. Nguwe ekufuneka uyijike ibe “isonjululwe”. Kukho iingxaki ezinzima kwaye kufuneka zisonjululwe. Nje ukuba kwenziwe oku, lixesha lokusebenza kwimveliso. Kuya kufuneka usondele kulo msebenzi ngokufanelekileyo - yenza i-benchmarks, uqokelele i-metrics, uchaze iimeko xa, xa ubuyele kuguqulelo lwangaphambili, i-hack yakho yakudala yaqala ukusebenza kwakhona (okanye ngokuphambeneyo, yayeka). Kwaye unganikezeli de ufezekise into ethile. Njengoko sele nditshilo, ukuba kukho iingcamango ezipholileyo ezingazange zisebenze, kodwa kwintsimi yokwabiwa kweerejista zeengcamango ziphantse zingapheli. Ngokomzekelo, unokufunda iimpapasho zenzululwazi. Nangona ngoku le ndawo sele iqalile ukuhamba kancinci kwaye icace ngakumbi kunobutsha bayo. Nangona kunjalo, kukho abantu abangenakubalwa abasebenza kule ntsimi kwaye zonke iingcamango zabo zifanelekile ukuzama, zonke zilinde emaphikweni. Kwaye awukwazi ukuxelela ukuba zilungile kangakanani ngaphandle kokuba uzame. Badibanisa njani kunye nayo yonke into kwi-llocator yakho, kuba i-llocator yenza izinto ezininzi, kwaye ezinye iingcamango kwi-llocator yakho ethile aziyi kusebenza, kodwa kwenye i-llocator ziya kuba lula. Indlela ephambili yokuphumelela kwi-allocator kukutsala izinto ezicothayo ngaphandle kwendlela ephambili kwaye uyinyanzele ukuba ihlukanise imida yeendlela ezicothayo. Ke ukuba ufuna ukuqhuba i-GC, thatha indlela ecothayo, unciphise, uphose okwahlukileyo, zonke ezo zinto-uyazi ukuba ezi zinto zinqabile. Kwaye zinqabile ngenene, ndajonga. Wenza umsebenzi owongezelelekileyo kwaye isusa imiqobo emininzi kwezi ndlela zicothayo, kodwa ayinamsebenzi kuba ziyacotha kwaye azifane zihambe. Umzekelo, isalathi esingeyonyani - ayinakwenzeka, akunjalo? Kufuneka ube neendlela ezininzi zezinto ezahlukeneyo, kodwa akufanele ziphazamise eyona iphambili.
Владимир: Ucinga ntoni nge-multi-cores, xa kukho amawaka eentsimbi ngexesha elinye? Ngaba le nto iluncedo?
UCliff: Impumelelo yeGPU ibonisa ukuba iluncedo kakhulu!
Владимир: Zizodwa. Kuthekani ngeeprosesa zenjongo ngokubanzi?
UCliff: Ewe, yayiyimodeli yeshishini lika-Azul. Impendulo yabuya ngexesha apho abantu babekuthanda ngokwenene ukusebenza okuqikelelweyo. Kwakunzima ukubhala ikhowudi ehambelanayo ngelo xesha. Imodeli yekhowudi ye-H2O inobungozi kakhulu, kodwa ayisiyonjongo yenjongo jikelele. Mhlawumbi ngokubanzi ngakumbi kunaxa usebenzisa i-GPU. Ngaba sithetha ngokuntsonkotha kokuphuhlisa into enjalo okanye ukuntsonkotha kokuyisebenzisa? Umzekelo, uAzul wandifundisa isifundo esinomdla, esona sicacileyo: iicache ezincinci ziqhelekile.
Owona mngeni mkhulu ebomini
Владимир: Kuthekani ngemingeni engeyiyo eyezobugcisa?
UCliff: Owona mceli mngeni mkhulu yayikukungabi... nobubele nokuba nobubele ebantwini. Kwaye ngenxa yoko, ndandisoloko ndizifumana ndikwiimeko zongquzulwano. Abo ndandisazi ukuba izinto azihambi kakuhle, kodwa ndandingazi ukuba mandiqhubele phambili njani nezo ngxaki kwaye ndandingakwazi ukuzisingatha. Iingxaki ezininzi zexesha elide, ezahlala kangangamashumi eminyaka, zavela ngolu hlobo. Inyaniso yokuba iJava ineC1 kunye neC2 abahlanganisi sisiphumo esithe ngqo soku. Inyaniso yokuba kwakungekho kuhlanganiswa kwamanqanaba amaninzi kwiJava iminyaka elishumi ngokulandelelana nayo isiphumo esithe ngqo. Kucacile ukuba besiyidinga inkqubo enjalo, kodwa akucaci ukuba kutheni ingekho. Ndibe neengxaki ngenjineli enye... okanye iqela leenjineli. Ngesinye isikhathi, xa ndiqala ukusebenza e-Sun, ndandi ... Kulungile, kungekhona nje kuphela, ngokuqhelekileyo ndihlala ndinombono wam kuyo yonke into. Kwaye bendicinga ukuba yinyani ukuba ungavele uthathe le nyani yakho uyithethe ngqo. Ingakumbi kuba ndandisothusa ixesha elininzi. Kwaye ukuba awuyithandi le ndlela ... ngakumbi ukuba uphosakele ngokucacileyo kwaye wenza izinto ezingenangqondo ... Ngokuqhelekileyo, bambalwa abantu abanokunyamezela le ndlela yokunxibelelana. Nangona abanye babenako, njengam. Ndakhe ubomi bam bonke kwimigaqo yokufaneleka. Ukuba undibonisa into engalunganga, ndiza kujika kwangoko ndithi: uthethe ububhanxa. Ngexesha elifanayo, ngokuqinisekileyo, ndicela uxolo kunye nayo yonke loo nto, ndiya kuqaphela ukuxhamla, ukuba kukho, kwaye ndithathe ezinye izenzo ezichanekileyo. Kwelinye icala, ndinyanisile ngendlela eyothusayo malunga nepesenti eyothusayo yexesha lilonke. Kwaye ayisebenzi kakuhle kakhulu kubudlelwane nabantu. Andizami ukuba mhle, kodwa ndibuza umbuzo ngokungafihlisiyo. "Oku akusoze kusebenze, kuba inye, zimbini, zintathu." Kwaye bathi, "Owu!" Kwakukho eminye imiphumo ekusenokwenzeka ukuba kwakubhetele ukuyityeshela: ngokomzekelo, leyo yakhokelela kuqhawulo-mtshato nomfazi wam neminyaka elishumi yokudandatheka emva koko.
Umceli mngeni ngumzabalazo kunye nabantu, kunye nembono yabo malunga nento onokuyenza okanye ongenakuyenza, into ebalulekileyo kunye nengekho. Bekukho imingeni emininzi malunga nesimbo sokubhala iikhowudi. Ndisabhala ikhowudi ezininzi, kwaye ngezo ntsuku ndade ndacotha kuba ndandisenza imisebenzi emininzi ehambelanayo kwaye ndiyenza kakubi, endaweni yokugxila komnye. Ukujonga emva, ndabhala isiqingatha sekhowudi yomyalelo weJava JIT, umyalelo weC2. Ikhowudi elandelayo ekhawulezayo ibhale isiqingatha njengokucotha, isiqingatha esilandelayo sicotha, kwaye ibikukwehla okubonakalayo. Umntu wesixhenxe kulo mqolo wayecotha kakhulu - oko kuyenzeka rhoqo! Ndichukumise ikhowudi eninzi. Ndajonga ukuba ngubani obhale ntoni, ngaphandle kokukhetha, ndajonga ikhowudi yabo, ndaphonononga nganye yazo, kwaye ndaqhubeka ndibhala ngakumbi kunam. Le ndlela yokusebenza ayisebenzi kakuhle kakhulu ebantwini. Abanye abantu abayithandi le nto. Kwaye xa bengenakusingatha, zonke iintlobo zezikhalazo ziqala. Umzekelo, ndakhe kwathiwa mandiyeke ukubhala ikhowudi kuba ndibhala ikhowudi kakhulu kwaye ibeka iqela emngciphekweni, kwaye yonke into yayivakala ngathi yintlekisa kum: mfondini ukuba kunyamalale iqela ndiqhubeke ndibhala ikhowudi, Uyakuphulukana namaqela asiqingatha kuphela. Ngakolunye uhlangothi, ukuba ndihlala ndibhala ikhowudi kwaye ulahlekelwa sisiqingatha seqela, oko kuvakala njengolawulo olubi kakhulu. Andizange ndicinge ngayo, andizange ndithethe ngayo, kodwa yayisendaweni ethile entloko yam. Ingcinga yayijikeleza ngasemva engqondweni yam: “Ngaba nonke niyandiqhula?” Ke, eyona ngxaki inkulu yayindim nobudlelwane bam nabantu. Ngoku ndiyaziqonda ngcono, bendiyiqela elikhokela abadwelisi benkqubo ixesha elide, kwaye ngoku ndixelela abantu ngokuthe ngqo: uyazi, ndinguye, kwaye kuya kufuneka ujongane nam - ngaba kulungile ukuba ndimile. Apha? Kwaye xa baqala ukujongana nayo, yonke into yasebenza. Enyanisweni, andikho mbi okanye ndilungile, andinazo naziphi na iinjongo ezimbi okanye ulangazelelo lokuzingca, zizinto zam nje, yaye kufuneka ndiphile nazo ngandlel’ ithile.
Андрей: Kutshanje wonke umntu waqala ukuthetha ngokuzazi kwii-introverts, kunye nezakhono ezithambileyo ngokubanzi. Ungathini ngale nto?
UCliff: Ewe, leyo yayiyingqiqo nesifundo endasifumana kuqhawulo-mtshato lwam nomfazi wam. Into endayifunda kuqhawulo-mtshato yayikukuqonda nam. Le yindlela endaqalisa ngayo ukubaqonda abanye abantu. Qonda indlela olu nxibelelwano lusebenza ngayo. Oku kwakhokelela ekubeni kufunyaniswe enye emva kwenye. Bekukho ukuzazi ukuba ndingubani kwaye ndimele ntoni. Ndenza ntoni: mhlawumbi ndixakeke ngumsebenzi, okanye ndiphepha ungquzulwano, okanye enye into - kwaye eli nqanaba lokuzazi liyanceda ngokwenene ukuzigcina ndilawula. Emva koku yonke into ihamba lula kakhulu. Inye into endiyifumeneyo kungekuphela kum, kodwa nakwabanye abacwangcisi benkqubo kukungakwazi ukuthetha ngeengcinga xa uphantsi koxinzelelo lweemvakalelo. Ngokomzekelo, uhleli apho ikhowudi, kwisimo sokuhamba, kwaye ke beza bebaleka kuwe kwaye baqale ukukhwaza kwi-hysterics ukuba kukho into ephukile kwaye ngoku kuya kuthathwa amanyathelo aqatha kuwe. Kwaye awukwazi ukuthetha igama ngenxa yokuba ukwimeko yoxinzelelo lweemvakalelo. Ulwazi olufunyenweyo lukuvumela ukuba ulungiselele lo mzuzu, usinde kwaye uqhubele phambili kwisicwangciso sokuhlehla, emva koko unokwenza okuthile. Ke ewe, xa uqala ukuqonda ukuba isebenza njani yonke into, sisiganeko esikhulu esitshintsha ubomi.
Nam ngokwam andizange ndiwafumane amagama afanelekileyo, kodwa ndakhumbula ukulandelelana kwezenzo. Inqaku lelokuba le mpendulo ifana nokwenziwa ngomlomo, kwaye ufuna indawo. Isithuba esinjalo, ngengqiqo yeZen. Yile nto kanye ekufuneka icaciswe, kwaye ngoko nangoko uhlehle ecaleni-ngokusuka ngokwasemzimbeni. Xa ndithe cwaka, ndiyakwazi ukuyiqwalasela le meko ngokweemvakalelo. Njengoko i-adrenaline ifika ebuchotsheni bakho, ikutshintshela kwimodi yokulwa okanye yokubhabha, awusakwazi ukuthetha nantoni na, hayi-ngoku usisidenge, injineli yokubetha, ayikwazi ukuphendula ngokufanelekileyo okanye ukumisa uhlaselo, kwaye umhlaseli ukhululekile. ukuhlasela kwakhona kwaye kwakhona. Kuya kufuneka uqale ube nguwe kwakhona, uphinde ulawule, uphume kwimo "yokulwa okanye yokubhabha".
Kwaye oku sifuna indawo yomlomo. Indawo ekhululekileyo nje. Ukuba uthetha nantoni na, ngoko unokuthetha ngokuthe ngqo, kwaye uhambe kwaye uzifumanele "indawo" ngokwenene: hamba uhambe epakini, uzivalele kwishawa-ayinamsebenzi. Into ephambili kukuqhawula okwethutyana kuloo meko. Nje ukuba ucime imizuzwana embalwa, ulawulo luyabuya, uqala ukucinga nzulu. "Kulungile, andilohlobo oluthile lwesidenge, andenzi izinto ezibudenge, ndingumntu oluncedo kakhulu." Nje ukuba ukwazi ukuziqinisekisa, lixesha lokudlulela kwinqanaba elilandelayo: ukuqonda okwenzekileyo. Uhlaselwe, uhlaselo luvela apho ubungalulindelanga, ibikukunganyaniseki, ukulalela okubi. Oku kubi. Inyathelo elilandelayo kukuqonda ukuba kutheni umhlaseli efuna oku. Ngokwenene, kutheni? Mhlawumbi ngenxa yokuba enomsindo? Kutheni ephambene? Ngokomzekelo, ngenxa yokuba wazikhohlisa kwaye akakwazi ukwamkela uxanduva? Le yindlela yokusingatha ngokucophelela yonke imeko. Kodwa oku kufuna indawo yokulawula, indawo yokuthetha. Inyathelo lokuqala kukuqhawula unxibelelwano lomlomo. Kuphephe ukuxoxa ngamagama. Yirhoxise, hamba ngokukhawuleza. Ukuba yincoko yomnxeba, vele uvale - esi sikhono endisifunde ekunxibelelaneni nomfazi wam wangaphambili. Ukuba incoko ayihambi kakuhle, vele uthi "usale kakuhle" kwaye uvale umnxeba. Ukusuka kwelinye icala lefowuni: "blah blah blah", uyaphendula: "ewe, bye!" kwaye uyibeke phantsi. Ugqiba nje incoko. Kwimizuzu emihlanu kamva, xa amandla okucinga ngengqiqo ebuyela kuwe, upholile kancinci, kunokwenzeka ukuba ucinge ngayo yonke into, oko kwenzekayo kwaye kuya kwenzeka ntoni emva koko. Kwaye qalisa ukuqulunqa impendulo ecingisisiweyo, kunokuba uphendule nje ngeemvakalelo. Kum, ukuphumelela ekuzaziseni kanye yayikukuba kwimeko yoxinezeleko lweemvakalelo andikwazi kuthetha. Ukuphuma kweli lizwe, ukucinga nokucwangcisa indlela yokuphendula kunye nokuhlawulela iingxaki - ezi ngamanyathelo afanelekileyo kwimeko xa ungakwazi ukuthetha. Eyona ndlela ilula kukubaleka imeko apho uxinzelelo lweemvakalelo luzibonakalisa kwaye uyeke nje ukuthatha inxaxheba kolu xinzelelo. Emva koko uye ukwazi ukucinga, xa ukwazi ukucinga, ukwazi ukuthetha, njalo njalo.
Ngendlela, enkundleni, igqwetha elichasayo lizama ukwenza oku kuwe - ngoku kuyacaca ukuba kutheni. Ngenxa yokuba uyakwazi ukukucinezela kangangokuba awukwazi nokulibiza igama lakho, umzekelo. Ngengqiqo yokwenene, akuyi kukwazi ukuthetha. Ukuba oku kuyenzeka kuwe, kwaye ukuba uyazi ukuba uya kuzifumana ukwindawo apho amadabi omlomo agquba khona, kwindawo efana nenkundla, ngoko unokuza negqwetha lakho. Igqwetha liyakumela liyeke uhlaselo lomlomo, kwaye liyakwenza ngendlela esemthethweni ngokupheleleyo, kwaye isithuba seZen esilahlekileyo siyakubuyela kuwe. Umzekelo, kuye kwafuneka ndifowunele usapho lwam amatyeli aliqela, ijaji yayinobuhlobo kakhulu ngale nto, kodwa igqwetha elichasayo lakhala landikhwaza, andizange ndikwazi nokuba nelizwi elibukhali. Kwezi meko, ukusebenzisa umlamli kusebenza kakuhle kum. Umlamli uyalumisa lonke oluxinzelelo olugalela kuwe kumlambo oqhubekayo, ufumana isithuba seZen esiyimfuneko, kunye nayo isakhono sokuthetha siyabuya. Le yinkalo yolwazi apho kuninzi ukufunda, kuninzi ukufumana ngaphakathi kwakho, kwaye konke oku kuguqukela kwizigqibo ezicwangcisiweyo eziphezulu ezihlukeneyo kubantu abahlukeneyo. Abanye abantu abanazo iingxaki ezichazwe ngasentla; Bonke aba bantu baphila ngamazwi - iimvumi ezidumileyo, iimbongi, iinkokeli zonqulo kunye nabezopolitiko, bahlala benento yokuthetha. Abanazo iingxaki ezinjalo, kodwa ndinayo.
Андрей: Yayi...engalindelekanga. Kuhle, sele sithethile kakhulu kwaye lixesha lokuphelisa olu dliwano-ndlebe. Ngokuqinisekileyo siya kudibana kwinkomfa kwaye siya kukwazi ukuqhubeka nale ngxoxo. Ndizakukubona eHydra!
Unokuqhubeka nencoko yakho kunye noCliff kwinkomfa ye-Hydra 2019, eya kubanjwa ngoJulayi 11-12, 2019 eSt. Uya kuza nengxelo . Amatikiti angathengwa .
umthombo: www.habr.com
