{"id":35851,"date":"2019-10-31T22:07:03","date_gmt":"2019-10-31T19:07:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java\/"},"modified":"2019-10-31T22:07:03","modified_gmt":"2019-10-31T19:07:03","slug":"bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java","title":{"rendered":"Nagy interj\u00fa Cliff Click-kel \u2014 a JIT-kompil\u00e1l\u00e1s atyj\u00e1val a Java-ban","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Nagy interj\u00fa Cliff Click-kel \u2014 a JIT-kompil\u00e1l\u00e1s atyj\u00e1val a Java-ban\" src=\"\/wp-content\/uploads\/2019\/07\/9ea9740ef74c0ae14d334482af115222.png\" style=\"display:block;margin: 0 auto;\" \/><strong>Cliff Click<\/strong> \u2014 A Cratus (IoT \u00e9rz\u00e9kel\u0151k a folyamatok jav\u00edt\u00e1s\u00e1hoz) vez\u00e9rigazgat\u00f3ja, t\u00f6bb startup, k\u00f6zt\u00fck a Rocket Realtime School, Neurensic \u00e9s H2O.ai alap\u00edt\u00f3ja \u00e9s t\u00e1rs-alap\u00edt\u00f3ja, sz\u00e1mos sikeres kil\u00e9p\u00e9ssel. Cliff 15 \u00e9vesen \u00edrta meg az els\u0151 ford\u00edt\u00f3j\u00e1t (Pascal a TRS Z-80 sz\u00e1m\u00e1ra)! Legismertebb a Java C2 (a Sea of Nodes IR) munk\u00e1j\u00e1r\u00f3l. Ez a ford\u00edt\u00f3 megmutatta a vil\u00e1gnak, hogy a JIT k\u00e9pes kiv\u00e1l\u00f3 min\u0151s\u00e9g\u0171 k\u00f3dot el\u0151\u00e1ll\u00edtani, amely a Java egyik f\u0151 modern programoz\u00e1si platformm\u00e1 v\u00e1l\u00e1s\u00e1nak egyik t\u00e9nyez\u0151je lett. K\u00e9s\u0151bb Cliff seg\u00edtett az Azul Systems-nek fel\u00e9p\u00edteni egy 864 magos mainframe-et tiszta Java szoftverrel, amely 500 gigab\u00e1jtos halommal 10 milliszekundumon bel\u00fcl t\u00e1mogatta a GC sz\u00fcneteket. Val\u00f3j\u00e1ban Cliff minden JVM aspektus\u00e1val foglalkozott.<br clear=\"all\"><br \/>\n\u00a0<br \/>\nEz a huba-post egy nagy interj\u00fa Cliff-el. A k\u00f6vetkez\u0151 t\u00e9m\u00e1kr\u00f3l fogunk besz\u00e9lni:<\/p>\n<p><\/p>\n<ul>\n<li>\u00c1tt\u00e9r\u00e9s alacsony szint\u0171 optimaliz\u00e1ci\u00f3kra<\/li>\n<li>Hogyan v\u00e9gezz\u00fcnk nagy refaktor\u00e1l\u00e1st<\/li>\n<li>K\u00f6lts\u00e9gmodell<\/li>\n<li>Alacsony szint\u0171 optimaliz\u00e1ci\u00f3k oktat\u00e1sa<\/li>\n<li>Gyakorlati p\u00e9ld\u00e1k a teljes\u00edtm\u00e9ny jav\u00edt\u00e1s\u00e1ra<\/li>\n<li>Mi\u00e9rt hozzunk l\u00e9tre saj\u00e1t programoz\u00e1si nyelvet<\/li>\n<li>Karrier a teljes\u00edtm\u00e9nym\u00e9rn\u00f6ks\u00e9gben<\/li>\n<li>Technikai kih\u00edv\u00e1sok<\/li>\n<li>Egy kis inform\u00e1ci\u00f3 a regiszterek allok\u00e1ci\u00f3j\u00e1r\u00f3l \u00e9s a t\u00f6bbmagoss\u00e1gr\u00f3l<\/li>\n<li>\u00c9letem legnagyobb kih\u00edv\u00e1sa<\/li>\n<\/ul>\n<p><\/p>\n<p>Az interj\u00fat vezeti:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Andrej Satarin<\/strong> az Amazon Web Services-t\u0151l. P\u00e1lyafut\u00e1sa sor\u00e1n teljesen k\u00fcl\u00f6nb\u00f6z\u0151 projekteken dolgozott: tesztelte a Yandex \u00faj SQL elosztott adatb\u00e1zis\u00e1t, a Kaspersky Labor felh\u0151alap\u00fa detekt\u00e1l\u00f3 rendszer\u00e9t, egy t\u00f6bbj\u00e1t\u00e9kos j\u00e1t\u00e9kot a Mail.ru-n, \u00e9s egy deviza\u00e1raz\u00e1si szolg\u00e1ltat\u00e1st a Deutsche Bankn\u00e1l. \u00c9rdekli a nagym\u00e9ret\u0171 backend- \u00e9s elosztott rendszerek tesztel\u00e9se.<\/li>\n<li><strong>Vladimir Sitnikov<\/strong> a Netcracker-t\u0151l. T\u00edz \u00e9ve a NetCracker OS teljes\u00edtm\u00e9ny\u00e9n \u00e9s sk\u00e1l\u00e1zhat\u00f3s\u00e1g\u00e1n dolgozik \u2014 a t\u00e1vk\u00f6zl\u00e9si szolg\u00e1ltat\u00f3k \u00e1ltal a h\u00e1l\u00f3zati folyamatok \u00e9s berendez\u00e9sek automatiz\u00e1l\u00e1s\u00e1hoz haszn\u00e1lt szoftver. \u00c9rdekli a Java \u00e9s az Oracle Database teljes\u00edtm\u00e9nyi k\u00e9rd\u00e9sei. T\u00f6bb mint egy tucat teljes\u00edtm\u00e9nyjav\u00edt\u00e1st \u00edrt a hivatalos PostgreSQL JDBC illeszt\u0151programban.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"perehod-k-nizkourovnevym-optimizaciyam\">\u00c1tt\u00e9r\u00e9s alacsony szint\u0171 optimaliz\u00e1ci\u00f3kra<\/h1>\n<p><\/p>\n<p><strong>Andrej<\/strong>: \u00d6n ismert szem\u00e9ly a JIT-kompil\u00e1l\u00e1s, a Java \u00e9s a teljes\u00edtm\u00e9nnyel kapcsolatos munk\u00e1k vil\u00e1g\u00e1ban, igaz?\u00a0<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: \u00cdgy van!<\/p>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Kezdj\u00fcnk a teljes\u00edtm\u00e9ny optimaliz\u00e1l\u00e1s\u00e1nak \u00e1ltal\u00e1nos k\u00e9rd\u00e9seivel. Mi a v\u00e9lem\u00e9nye a magas \u00e9s alacsony szint\u0171 optimaliz\u00e1l\u00e1sok k\u00f6z\u00f6tti v\u00e1laszt\u00e1sr\u00f3l, mint p\u00e9ld\u00e1ul a CPU szintj\u00e9n v\u00e9gzett munka?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Itt minden egyszer\u0171. A leggyorsabb k\u00f3d az, ami soha nem fut le. Ez\u00e9rt mindig magas szinten kell kezdeni, a algoritmusokon dolgozni. Egy jobb O-not\u00e1ci\u00f3 megveri a gyeng\u00e9bbet, hacsak nem l\u00e9pnek be el\u00e9g nagy konstansok. Az alacsony szint\u0171 dolgok j\u00f6nnek a legutolj\u00e1ra. \u00c1ltal\u00e1ban, ha m\u00e1r el\u00e9g j\u00f3l optimaliz\u00e1ltad a teljes stacket, \u00e9s m\u00e9g mindig maradt valami \u00e9rdekes \u2013 na, az az alacsony szint. De hogyan kezdj\u00fck el a magas szinten? Hogyan tudhatjuk, hogy el\u00e9g munka k\u00e9sz\u00fclt el magas szinten? Nos\u2026 nem lehet tudni. Nincsenek k\u00e9sz receptjeink. Meg kell \u00e9rtened a probl\u00e9m\u00e1t, eld\u00f6nteni, mit akarsz csin\u00e1lni (hogy elker\u00fcld a felesleges l\u00e9p\u00e9seket), \u00e9s csak akkor j\u00f6het el\u0151 a profilerszer, ami hasznos inform\u00e1ci\u00f3t tud adni. Egy id\u0151 ut\u00e1n te is meg\u00e9rted, hogy megszabadult\u00e1l a felesleges dolgokt\u00f3l, \u00e9s itt az ideje a finomhangol\u00e1snak az alacsony szinten. Ez bizonyos \u00e9rtelemben egy k\u00fcl\u00f6nleges m\u0171v\u00e9szeti \u00e1g. Rengeteg ember csin\u00e1l felesleges dolgokat, de olyan gyorsan halad, hogy nincs ideje a teljes\u00edtm\u00e9nyre \u00fcgyelni. De ez addig tart, am\u00edg a k\u00e9rd\u00e9s a sz\u00ednpadra nem ker\u00fcl. \u00c1ltal\u00e1ban az id\u0151 99%-\u00e1ban senkit sem \u00e9rdekel, hogy mit csin\u00e1lok, eg\u00e9szen addig a pillanatig, amikor egy kritikus \u00fatvonalon megjelenik valami fontos, amit valakinek fontos. Itt hirtelen mindenki elkezd t\u00e9ged faggatni arr\u00f3l, hogy \u201emi\u00e9rt nem m\u0171k\u00f6d\u00f6tt t\u00f6k\u00e9letesen az elej\u00e9t\u0151l fogva\u201d. \u00d6sszess\u00e9g\u00e9ben mindig van mit jav\u00edtani a teljes\u00edtm\u00e9nyen. De az id\u0151 99%-\u00e1ban nincsenek kapaszkod\u00f3id! Csak pr\u00f3b\u00e1lod csin\u00e1lni, hogy valami m\u0171k\u00f6dj\u00f6n, \u00e9s k\u00f6zben meg\u00e9rted, hogy mi a fontos. Soha nem tudhatod el\u0151re, hogy ez a r\u00e9szlet t\u00f6k\u00e9letesnek kell lennie, \u00edgy l\u00e9nyeg\u00e9ben mindenben t\u00f6k\u00e9letesnek kell lenned. De ez lehetetlen, \u00e9s nem is csin\u00e1lod \u00edgy. Mindig van egy csom\u00f3 dolog, amit meg kell jav\u00edtani \u2013 \u00e9s ez teljesen norm\u00e1lis.<\/p>\n<p><\/p>\n<h1 id=\"kak-delat-bolshoy-refaktoring\">Hogyan v\u00e9gezz\u00fcnk nagy refaktor\u00e1l\u00e1st<\/h1>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Hogyan dolgozol a teljes\u00edtm\u00e9nyen? Ez egy \u00e1tfog\u00f3 probl\u00e9ma. P\u00e9ld\u00e1ul dolgozt\u00e1l m\u00e1r olyan probl\u00e9m\u00e1kon, amelyek a m\u00e1r megl\u00e9v\u0151 funkcionalit\u00e1sok nagy sz\u00e1mb\u00f3l ad\u00f3dnak?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Pr\u00f3b\u00e1lom elker\u00fclni ezt. Ha tudom, hogy a teljes\u00edtm\u00e9ny probl\u00e9m\u00e1v\u00e1 v\u00e1lik, akkor m\u00e9rlegelni kezdem, miel\u0151tt elkezdek k\u00f3dolni, k\u00fcl\u00f6n\u00f6sen az adatszerkezetekn\u00e9l. De gyakran ezekre a probl\u00e9m\u00e1kra csak sokkal k\u00e9s\u0151bb der\u00fcl f\u00e9ny. \u00c9s akkor k\u00e9nytelen vagyok radik\u00e1lis l\u00e9p\u00e9sekre \u00e9s arra, amit \u00e9n \u201e\u00edrd \u00e1t \u00e9s uralkodj\u201d-nak nevezek: meg kell ragadnod egy el\u00e9g nagy r\u00e9szt. A k\u00f3d egy r\u00e9sz\u00e9t \u00fagyis \u00e1t kell \u00edrni a teljes\u00edtm\u00e9nyprobl\u00e9m\u00e1k miatt, vagy valami m\u00e1s okb\u00f3l. B\u00e1rmilyen okb\u00f3l is legyen sz\u00fcks\u00e9g a k\u00f3d \u00e1t\u00edr\u00e1s\u00e1ra, szinte mindig jobb egy nagyobb r\u00e9szt \u00e1t\u00edrni, mint egy kisebbet. Ekkor mindenki megijed: \u201e\u00d3 istenem, nem szabad ilyen sok k\u00f3dot \u00e9rinteni!\u201d. De a val\u00f3s\u00e1gban ez a megk\u00f6zel\u00edt\u00e9s szinte mindig sokkal jobban m\u0171k\u00f6dik. Azonnal neki kell \u00e1llni a nagy probl\u00e9m\u00e1nak, k\u00f6r\u00fclj\u00e1rni azt nagy k\u00f6rvonalakkal, \u00e9s mondani: mindent, ami a k\u00f6r\u00f6n bel\u00fcl van, \u00e1t\u00edrok. A hat\u00e1r sokkal kisebb, mint a benn\u00fcnket \u00e9rint\u0151 tartalom, amit ki kell cser\u00e9lni. \u00c9s ha egy ilyen hat\u00e1rvonal kijel\u00f6l\u00e9se lehet\u0151v\u00e9 teszi a bels\u0151 munka t\u00f6k\u00e9letes\u00edt\u00e9s\u00e9t \u2013 szabad kezed van, csin\u00e1lj, amit akarsz. Amint meg\u00e9rtetted a probl\u00e9m\u00e1t, a folyamat sokkal egyszer\u0171bb\u00e9 v\u00e1lik, ez\u00e9rt harapj le egy nagy falatot!<br \/>\nUgyanakkor, amikor nagy r\u00e9szt \u00edrsz \u00e1t, \u00e9s meg\u00e9rted, hogy a teljes\u00edtm\u00e9ny probl\u00e9m\u00e1v\u00e1 v\u00e1lik, azonnal elkezdhetsz agg\u00f3dni \u00e9rte. Ez \u00e1ltal\u00e1ban egyszer\u0171 dolgokk\u00e1 alakul, p\u00e9ld\u00e1ul \u201ene m\u00e1sold az adatokat, kezeld az adatokat lehet\u0151 legegyszer\u0171bben, tedd \u0151ket kisebb\u00e9\u201d. Nagy \u00e1t\u00edr\u00e1sok eset\u00e9n norm\u00e1l m\u00f3dszerek vannak a teljes\u00edtm\u00e9ny jav\u00edt\u00e1s\u00e1ra. \u00c9s ezek szinte mindig az adatok k\u00f6r\u00fcl forognak.<\/p>\n<p><\/p>\n<h1 id=\"model-stoimosti\">K\u00f6lts\u00e9gmodell<\/h1>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Egy podcastban a k\u00f6lts\u00e9gmodellekr\u0151l besz\u00e9lt\u00e9l a teljes\u00edtm\u00e9ny kontextus\u00e1ban. El tudn\u00e1d magyar\u00e1zni, mit \u00e9rtett\u00e9l ez alatt?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Term\u00e9szetesen. Egy olyan korszakban sz\u00fclettem, amikor a processzor teljes\u00edtm\u00e9nye rendk\u00edv\u00fcl fontos volt. \u00c9s ez a kor \u00fajra visszat\u00e9r \u2013 a sors nem mentes az ir\u00f3ni\u00e1t\u00f3l. Nyolcbites g\u00e9peken kezdtem el \u00e9lni, az els\u0151 sz\u00e1m\u00edt\u00f3g\u00e9pem 256 b\u00e1jttal dolgozott. Igen, b\u00e1jtokkal. Minden nagyon kicsi volt. Sz\u00e1molni kellett az utas\u00edt\u00e1sokat, \u00e9s amint elkezdt\u00fck felfel\u00e9 haladni a programoz\u00e1si nyelvek rangl\u00e9tr\u00e1j\u00e1n, a nyelvek egyre t\u00f6bbet \u00e9s t\u00f6bbet vettek magukra. Volt Assembler, azt\u00e1n Basic, majd C, \u00e9s a C vette a kez\u00e9be a sok apr\u00f3 r\u00e9szlet kezel\u00e9s\u00e9t, mint a regiszterek eloszt\u00e1sa \u00e9s az utas\u00edt\u00e1sok kiv\u00e1laszt\u00e1sa. De ott minden el\u00e9g vil\u00e1gos volt, \u00e9s ha mutat\u00f3t k\u00e9sz\u00edtettem egy v\u00e1ltoz\u00f3 p\u00e9ld\u00e1nyra, akkor kaptam egy load-ot, \u00e9s ennek az utas\u00edt\u00e1snak a k\u00f6lts\u00e9ge ismert volt. A hardver egy ismert mennyis\u00e9g\u0171 g\u00e9pi ciklust ad ki, \u00edgy a k\u00fcl\u00f6nb\u00f6z\u0151 dolgok v\u00e9grehajt\u00e1si sebess\u00e9g\u00e9t egyszer\u0171en \u00fagy lehet kisz\u00e1molni, hogy \u00f6sszeadjuk azokat az utas\u00edt\u00e1sokat, amelyeket v\u00e9gre akartunk hajtani. Minden compare\/test\/branch\/call\/load\/store \u00f6sszeadhat\u00f3 volt, \u00e9s megmondhattad: \u00edme a v\u00e9grehajt\u00e1si id\u0151. A teljes\u00edtm\u00e9nyjav\u00edt\u00e1s sor\u00e1n mindenk\u00e9ppen \u00e9szre fogod venni, hogy a sz\u00e1mok megfelelnek a forr\u00f3 k\u00f6rtnek.\u00a0<br \/>\nDe ahogy \u00e1tv\u00e1ltasz a Java-ra, Python-ra \u00e9s hasonl\u00f3 dolgokra, nagyon gyorsan elt\u00e1volodsz a low-level hardvert\u0151l. Mi a k\u00f6lts\u00e9ge a getter h\u00edv\u00e1s\u00e1nak Java-ban? Ha a JIT a HotSpotban mindent j\u00f3l <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.openjdk.java.net\/display\/HotSpot\/Inlining\">be\u00e1gyazott<\/a><\/noindex>, akkor ez egy load, de ha nem tette \u2013 akkor ez egy funkci\u00f3h\u00edv\u00e1s lesz. Mivel a h\u00edv\u00e1s a forr\u00f3 ciklusban van, mindent megsemmis\u00edt a ciklusban v\u00e9grehajtott egy\u00e9b optimaliz\u00e1ci\u00f3kkal. Ez\u00e9rt a val\u00f3s k\u00f6lts\u00e9g sokkal magasabb lesz. \u00c9s azonnal elvesz\u00edted a k\u00e9pess\u00e9ged, hogy a k\u00f3d egy r\u00e9sz\u00e9re n\u00e9zve meg\u00e9rtsd, hogy mi\u00e9rt \u00e9rdemes v\u00e9grehajtani a processzor \u00f3rajels\u0171r\u0171s\u00e9g, a haszn\u00e1lt mem\u00f3ria \u00e9s a cache fogalm\u00e1t tekintve. Mindez csak akkor v\u00e1lik \u00e9rdekess\u00e9, ha t\u00e9nyleg alaposan belen\u00e9zt\u00e9l a teljes\u00edtm\u00e9nybe.<br \/>\nJelenleg abban a helyzetben vagyunk, hogy a processzorok sebess\u00e9ge szinte egy \u00e9vtizede m\u00e1r alig n\u00f6vekszik. Visszat\u00e9rnek a r\u00e9gi id\u0151k! M\u00e1r nem sz\u00e1m\u00edthatsz j\u00f3 egy sz\u00e1l\u00fa teljes\u00edtm\u00e9nyre. De ha v\u00e9letlen\u00fcl p\u00e1rhuzamos sz\u00e1m\u00edt\u00e1sokat szeretn\u00e9l v\u00e9gezni \u2013 az \u0151r\u00fclt bonyolult, mindenki \u00fagy n\u00e9z r\u00e1d, mint James Bondra. A t\u00edzszeres gyorsul\u00e1sok \u00e1ltal\u00e1ban ott fordulnak el\u0151, ahol valaki valamit elmulasztott. A p\u00e1rhuzamos\u00edt\u00e1s sok munk\u00e1t ig\u00e9nyel. Ahhoz, hogy megszerezd azt a bizonyos t\u00edzszeres gyorsul\u00e1st, meg kell \u00e9rtened a k\u00f6lts\u00e9gmodellt. Mi \u00e9s mennyibe ker\u00fcl. Ehhez pedig meg kell \u00e9rteni, hogyan illeszkedik a nyelv az alatta l\u00e9v\u0151 hardverhez.<br \/>\nMartin Thompson nagyszer\u0171 sz\u00f3t tal\u00e1lt a blogj\u00e1hoz <noindex><a rel=\"nofollow\" href=\"https:\/\/mechanical-sympathy.blogspot.com\/\">Mechanikai Szimp\u00e1tia<\/a><\/noindex>! Meg kell \u00e9rteni, hogy a hardver mit szeretne tenni, hogyan fogja ezt v\u00e9grehajtani, \u00e9s hogy egy\u00e1ltal\u00e1n mi\u00e9rt csin\u00e1lja azt, amit csin\u00e1l. Ezt kihaszn\u00e1lva viszonylag egyszer\u0171 elkezdeni sz\u00e1ml\u00e1lni az utas\u00edt\u00e1sokat \u00e9s kider\u00edteni, hov\u00e1 t\u0171nik az id\u0151. Ha viszont nincs megfelel\u0151 h\u00e1tt\u00e9rk\u00e9pz\u00e9sed, akkor csak egy fekete macsk\u00e1t keresel egy s\u00f6t\u00e9t szob\u00e1ban. Folyamatosan l\u00e1tom azokat az embereket, akik a teljes\u00edtm\u00e9nyoptimaliz\u00e1l\u00e1ssal foglalkoznak, de fogalmuk sincs, hogy mit csin\u00e1lnak. Nagyon szenvednek, \u00e9s nem haladnak sehov\u00e1. \u00c9s amikor \u00e9n ugyanazt a k\u00f3dot veszem el\u0151, bedobok n\u00e9h\u00e1ny apr\u00f3 hack-et, \u00e9s \u00f6tsz\u00f6r\u00f6s vagy t\u00edzszeres gyorsul\u00e1st \u00e9rek el, akkor \u0151k azt mondj\u00e1k, hogy ez nem fair, tudtuk, hogy te jobb vagy. Meglep\u0151. Mir\u0151l is besz\u00e9ltem\u2026 a k\u00f6lts\u00e9gmodell arr\u00f3l sz\u00f3l, hogy milyen k\u00f3dot \u00edrsz, \u00e9s hogy az \u00e1tlagosan mennyire gyorsan fut a nagyobb k\u00e9pben.<\/p>\n<p><\/p>\n<p><strong>Andrej<\/strong>: \u00c9s hogyan lehet \u00edgy ennyi mindent a fejben tartani? Ez sok tapasztalat r\u00e9v\u00e9n el\u00e9rhet\u0151, vagy? Hol lehet ilyen tapasztalatot szerezni?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Nos, a tapasztalatom nem a legegyszer\u0171bb \u00faton j\u00f6tt. Assembly nyelven programoztam m\u00e9g akkor, amikor minden egyes utas\u00edt\u00e1st meg lehetett \u00e9rteni. Ez h\u00fcly\u00e9n hangzik, de az\u00f3ta a fejemben \u00f6r\u00f6kre megmaradt a Z80 utas\u00edt\u00e1sai. Az emberek neveit nem eml\u00e9kszem p\u00e1r perccel a besz\u00e9lget\u00e9s ut\u00e1n, de eml\u00e9kszem a 40 \u00e9ve \u00edrt k\u00f3dra. Vicces, hogy ez \u00fagy n\u00e9z ki, mint a \"<noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B8%D0%BD%D0%B4%D1%80%D0%BE%D0%BC_%D1%81%D0%B0%D0%B2%D0%B0%D0%BD%D1%82%D0%B0\">tud\u00f3s idi\u00f3ta<\/a><\/noindex>\u00bb.<\/p>\n<p><\/p>\n<h1 id=\"obuchenie-nizkourovnevym-optimizaciyam\">Alacsony szint\u0171 optimaliz\u00e1ci\u00f3k oktat\u00e1sa<\/h1>\n<p><\/p>\n<p><strong>Andrej<\/strong>\": Van valami egyszer\u0171bb m\u00f3d arra, hogy belev\u00e1gj?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Igen \u00e9s nem. Az az eszk\u00f6z, amit mindannyian haszn\u00e1lunk, nem sokat v\u00e1ltozott az\u00f3ta. Mindenki x86-ot haszn\u00e1l, az Arm-on fut\u00f3 okostelefonokat kiv\u00e9ve. Ha nem valami hardcore be\u00e1gyazott rendszerekkel foglalkozol, akkor minden ugyanaz. Rendben, tov\u00e1bb. Az utas\u00edt\u00e1sok sem v\u00e1ltoztak \u00e9vsz\u00e1zadok \u00f3ta. El kell menned, \u00e9s \u00edrnod kell valamit Assembly nyelven. Kicsit, de eleget ahhoz, hogy elkezdj \u00e9rteni. Mosolyogsz, de \u00e9n teljesen komolyan mondom. Meg kell \u00e9rtened a nyelv \u00e9s a hardver k\u00f6z\u00f6tti \u00f6sszef\u00fcgg\u00e9st. Ezt k\u00f6vet\u0151en el kell menned, \u00edrnod kell kicsit, \u00e9s k\u00e9sz\u00edtened kell egy apr\u00f3, j\u00e1t\u00e9kos ford\u00edt\u00f3t egy kis j\u00e1t\u00e9knyelvhez. A \u201ej\u00e1t\u00e9kos\u201d azt jelenti, hogy \u00e9sszer\u0171 id\u0151n bel\u00fcl kell elk\u00e9sz\u00edtened. Lehet nagyon egyszer\u0171, de gener\u00e1lnia kell utas\u00edt\u00e1sokat. Az utas\u00edt\u00e1sgener\u00e1l\u00e1s aktusa seg\u00edt meg\u00e9rteni a k\u00f6lts\u00e9gmodellt a magas szint\u0171 k\u00f3d \u00e9s a g\u00e9pi k\u00f3d k\u00f6z\u00f6tt, amely a hardveren fut. Ez az \u00f6sszef\u00fcgg\u00e9s \u00e9szrevehet\u0151v\u00e9 v\u00e1lik az agyadban, amint meg\u00edrod a ford\u00edt\u00f3t. M\u00e9g a legegyszer\u0171bb ford\u00edt\u00f3 eset\u00e9ben is. Ezt k\u00f6vet\u0151en elkezdhetsz a Jav\u00e1ra n\u00e9zni, \u00e9s l\u00e1thatod, hogy a k\u00f6zte l\u00e9v\u0151 szemantikai szakad\u00e9k sokkal m\u00e9lyebb, \u00e9s sokkal bonyolultabb hidakat kell \u00e9p\u00edtened f\u00f6l\u00e9. A Jav\u00e1ban sokkal nehezebb meg\u00e9rteni, hogy az \u00e1ltalunk \u00e9p\u00edtett h\u00edd j\u00f3 vagy rossz lett, mit\u0151l fog \u00f6sszeomlani \u00e9s mit\u0151l nem. De sz\u00fcks\u00e9ged van valamire, amivel elindulsz, amikor n\u00e9zed a k\u00f3dot, \u00e9s meg\u00e9rted: \u201eaha, ennek a getternek minden alkalommal inline-nak kellene lennie.\u201d Ezut\u00e1n kider\u00fcl, hogy n\u00e9ha val\u00f3ban \u00edgy van, kiv\u00e9ve, amikor a met\u00f3dus t\u00fal nagy lesz, \u00e9s a JIT mindenf\u00e9l\u00e9t kezd inlinelni. Az ilyen helyek teljes\u00edtm\u00e9nye azonnal el\u0151rejelezhet\u0151. \u00c1ltal\u00e1ban a gettereik j\u00f3l m\u0171k\u00f6dnek, de azt\u00e1n a nagy forr\u00f3 ciklusokn\u00e1l \u00e9szreveszed, hogy ott k\u00fcl\u00f6nb\u00f6z\u0151 f\u00fcggv\u00e9nyh\u00edv\u00e1sok \u00faszk\u00e1lnak, amiknek nem tudni, mit csin\u00e1lnak. Ez a probl\u00e9ma a geterek elterjedt haszn\u00e1lat\u00e1val, az oka, ami\u00e9rt nem inline-olj\u00e1k \u0151ket \u2013 nem vil\u00e1gos, hogy getter-e. Ha nagyon kicsi a k\u00f3dalapod, azt egyszer\u0171en meg lehet jegyezni, \u00e9s azt\u00e1n tudod mondani: ez egy getter, az meg egy setter. Nagy k\u00f3dalapn\u00e1l minden egyes f\u00fcggv\u00e9ny a saj\u00e1t t\u00f6rt\u00e9net\u00e9vel rendelkezik, amely senki sz\u00e1m\u00e1ra nem igaz\u00e1n ismert. A profiloz\u00f3 azt mondja, hogy 24%-ot vesz\u00edtett\u00fcnk el az id\u0151nkb\u0151l egy ciklusban, \u00e9s ahhoz, hogy meg\u00e9rts\u00fck, mit csin\u00e1l ez a ciklus, meg kell n\u00e9zn\u00fcnk minden f\u00fcggv\u00e9nyt bel\u00fcl. Ezt nem lehet meg\u00e9rteni an\u00e9lk\u00fcl, hogy a f\u00fcggv\u00e9nyt tanulm\u00e1nyozn\u00e1nk, \u00e9s ez komolyan lelass\u00edtja a meg\u00e9rt\u00e9si folyamatot. Ez\u00e9rt nem haszn\u00e1lok getereket \u00e9s setereket, \u00faj szintre l\u00e9ptem!<br \/>\nHonnan szerezhet\u00fcnk k\u00f6lts\u00e9gmodellt? Nos, olvashatunk valamit, persze... De \u00fagy gondolom, a legjobb m\u00f3d a cselekv\u00e9s. K\u00e9sz\u00edteni egy kis ford\u00edt\u00f3t, \u00e9s ez lesz a legjobb m\u00f3dja, hogy meg\u00e9rts\u00fck a k\u00f6lts\u00e9gmodellt \u00e9s elhelyezz\u00fck a saj\u00e1t fej\u00fcnkben. Egy kis ford\u00edt\u00f3, ami alkalmas lenne a mikros\u00fct\u0151 programoz\u00e1s\u00e1ra - ez egy kezd\u0151knek val\u00f3 feladat. Nos, arra \u00e9rtem, hogy ha m\u00e1r van programoz\u00e1si tud\u00e1sod, akkor el\u00e9gs\u00e9ges lesz. Ezek a dolgok, mint p\u00e9ld\u00e1ul az, hogy parse-oljuk a sztringet, ami b\u00e1rmilyen algebrai kifejez\u00e9s lesz, kiemelni bel\u0151le a matematikai m\u0171veletek utas\u00edt\u00e1sait a megfelel\u0151 sorrendben, a megfelel\u0151 \u00e9rt\u00e9keket venni a regiszterekb\u0151l - mindez nagyon gyorsan megoldhat\u00f3. \u00c9s mik\u00f6zben ezt csin\u00e1lod, beiv\u00f3dik az agyadba. Azt hiszem, mindenki tudja, hogy mit csin\u00e1l egy ford\u00edt\u00f3. \u00c9s ez majd megadja a k\u00f6lts\u00e9gmodell meg\u00e9rt\u00e9s\u00e9t.<\/p>\n<p><\/p>\n<h1 id=\"prakticheskie-primery-uluchsheniya-proizvoditelnosti\">Gyakorlati p\u00e9ld\u00e1k a teljes\u00edtm\u00e9ny jav\u00edt\u00e1s\u00e1ra<\/h1>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Milyen egy\u00e9b dolgokra \u00e9rdemes figyelni a teljes\u00edtm\u00e9ny jav\u00edt\u00e1sa sor\u00e1n?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Adatszerkezetek. Egy\u00e9bk\u00e9nt igen, m\u00e1r r\u00e9g\u00f3ta nem tartottam ilyen \u00f3r\u00e1kat\u2026 <noindex>Rocket School<\/noindex>. Ez sz\u00f3rakoztat\u00f3 volt, de ennyi energi\u00e1t ig\u00e9nyelt, \u00e9s nekem m\u00e9g \u00e9letem is van! Rendben. Sz\u00f3val, az egyik nagy \u00e9s \u00e9rdekes \u00f3r\u00e1n, \u201eHov\u00e1 t\u0171nik a teljes\u00edtm\u00e9nyed\u201d, p\u00e9ld\u00e1t mutattam a di\u00e1koknak: k\u00e9t \u00e9s f\u00e9l gigab\u00e1jt fintech adatot olvastunk CSV f\u00e1jlb\u00f3l, \u00e9s ut\u00e1na meg kellett sz\u00e1molni a eladott term\u00e9kek sz\u00e1m\u00e1t. Szok\u00e1sos tick piaci adatok. UDP csomagok, amelyek sz\u00f6veges form\u00e1tumra lettek \u00e1t\u00edrva, 70-es \u00e9vekt\u0151l kezd\u0151d\u0151en. Chicago Mercantile Exchange \u2013 mindenf\u00e9le dolog, mint olaj, kukorica, sz\u00f3jabab \u00e9s hasonl\u00f3k. Meg kellett sz\u00e1molni ezeket a term\u00e9keket, az \u00fcgyletek sz\u00e1m\u00e1t, a p\u00e9nz \u00e9s javak \u00e1tlagos mozg\u00e1s\u00e1t stb. Ez meglehet\u0151sen egyszer\u0171 kereskedelmi matematika: megkeresni a term\u00e9kk\u00f3dot (ez 1-2 karakter a hash t\u00e1bl\u00e1zatban), megkapni az \u00f6sszeget, hozz\u00e1adni azt az \u00fcgyletek egyik halmaz\u00e1hoz, hozz\u00e1adni a volumen\u00e9t, hozz\u00e1adni a k\u00f6lts\u00e9g\u00e9t \u00e9s n\u00e9h\u00e1ny m\u00e1s dolgot. Nagyon egyszer\u0171 matematika. A j\u00e1t\u00e9kos implement\u00e1ci\u00f3 nagyon egyenes volt: minden a f\u00e1jlban volt, olvastam a f\u00e1jlt \u00e9s haladtam rajta, a k\u00fcl\u00f6n\u00e1ll\u00f3 rekordokat Java sztringekk\u00e9 osztva, megkerestem benn\u00fck a sz\u00fcks\u00e9ges dolgokat \u00e9s \u00f6sszeadtam a fent le\u00edrt matematika szerint. \u00c9s ez bizonyos kis sebess\u00e9ggel m\u0171k\u00f6d\u00f6tt. <\/p>\n<p><\/p>\n<p>Ezzel a megk\u00f6zel\u00edt\u00e9ssel nyilv\u00e1nval\u00f3, hogy mi t\u00f6rt\u00e9nik, \u00e9s a p\u00e1rhuzamos sz\u00e1m\u00edt\u00e1sok itt nem seg\u00edtenek, igaz? Kider\u00fcl, hogy az teljes\u00edtm\u00e9ny \u00f6tsz\u00f6r\u00f6s n\u00f6vel\u00e9s\u00e9t csup\u00e1n a megfelel\u0151 adatszerkezetek kiv\u00e1laszt\u00e1s\u00e1val el lehet \u00e9rni. Ez m\u00e9g a tapasztalt programoz\u00f3kat is meglepi! A konkr\u00e9t esetemben az a l\u00e9nyeg, hogy nem \u00e9rdemes mem\u00f3ri\u00e1t foglalni a forr\u00f3 ciklusban. Nos, ez nem az egyetlen igazs\u00e1g, de alapvet\u0151en nem \u00e9rdemes \u201eX-enk\u00e9nt\u201d foglalni, amikor X el\u00e9g nagy. Amikor X k\u00e9t \u00e9s f\u00e9l gigab\u00e1jt, nem \u00e9rdemes semmit \u201ebet\u0171nk\u00e9nt\u201d, vagy \u201esoronk\u00e9nt\u201d, vagy \u201emez\u0151nk\u00e9nt\u201d foglalni, semmi ilyesmi. Ez viszi el az id\u0151t. Hogyan m\u0171k\u00f6dik ez egy\u00e1ltal\u00e1n? K\u00e9pzeld el, hogy megh\u00edvom a <code>String.split()<\/code> vagy <code>BufferedReader.readLine()<\/code>. <code>Readline<\/code> egy sort k\u00e9sz\u00edt a h\u00e1l\u00f3zaton \u00e9rkez\u0151 b\u00e1jtok halmaz\u00e1b\u00f3l, egyszer minden egyes sorhoz, t\u00f6bb sz\u00e1zmilli\u00f3 sorhoz. Ezt a sort megkapom, elemezgetem, majd eldobom. Mi\u00e9rt dobom el? Nos, m\u00e1r feldolgoztam, ennyi. Teh\u00e1t, minden egyes b\u00e1jtn\u00e1l, amit ezekb\u0151l a 2.7G-b\u00f3l olvasok, k\u00e9t karaktert fogok \u00edrni a sorba, azaz m\u00e1r 5.4G-t, \u00e9s arra nekem tov\u00e1bbra sincs sz\u00fcks\u00e9gem, ez\u00e9rt eldobom. Ha megn\u00e9zed a mem\u00f3ria s\u00e1vsz\u00e9less\u00e9g\u00e9t, akkor bet\u00f6ltj\u00fck a 2.7G-t, ami \u00e1tmegy a mem\u00f3ri\u00e1n \u00e9s a mem\u00f3ria buszon a processzorba, \u00e9s ezut\u00e1n k\u00e9tszer annyi megy a mem\u00f3ri\u00e1ban l\u00e9v\u0151 sorba, \u00e9s mindez elk\u00e9sz\u00fcl minden \u00faj sor l\u00e9trehoz\u00e1sakor. De nekem m\u00e9g olvasnom kell, a hardver olvassa, m\u00e9g ha k\u00e9s\u0151bb mindent \u00fajra feldolgoznak is. \u00cdrnom kell, mert l\u00e9trehoztam egy sort, \u00e9s a cache-ek megteltek \u2013 a cache nem tud 2.7G-t elhelyezni. Teh\u00e1t, minden olvasott b\u00e1jt ut\u00e1n m\u00e9g k\u00e9t tov\u00e1bbi b\u00e1jtot olvasok \u00e9s kett\u0151t \u00edrok, \u00edgy a viszonyuk 4:1 \u2013 ebben a viszonyban pazarl\u00f3an haszn\u00e1ljuk a mem\u00f3ria s\u00e1vsz\u00e9less\u00e9g\u00e9t. Azt\u00e1n kider\u00fcl, hogy ha csin\u00e1lom <code>String.split()<\/code> \u2013 akkor ezt messze nem az utols\u00f3 alkalommal teszem, bel\u00fcl m\u00e9g 6-7 mez\u0151 is lehet. Ez\u00e9rt a klasszikus CSV olvas\u00e1si k\u00f3d, amely ut\u00e1n a sorokat elemzi, a mem\u00f3ria s\u00e1vsz\u00e9less\u00e9g elveszt\u00e9s\u00e9hez vezet 14:1 ar\u00e1nyban ahhoz k\u00e9pest, amit val\u00f3j\u00e1ban szeretn\u00e9l. Ha ezeket a foglal\u00e1sokat elt\u00e1vol\u00edtod, \u00f6tsz\u00f6r\u00f6s gyors\u00edt\u00e1st \u00e9rhetsz el. <\/p>\n<p><\/p>\n<p>\u00c9s ez nem is olyan neh\u00e9z. Ha a k\u00f3dra a megfelel\u0151 sz\u00f6gb\u0151l n\u00e9zel, minden meglehet\u0151sen egyszer\u0171v\u00e9 v\u00e1lik, amint meg\u00e9rted a probl\u00e9ma l\u00e9nyeg\u00e9t. Soha ne hagyd abba a mem\u00f3ria allok\u00e1l\u00e1s\u00e1t: a probl\u00e9ma csup\u00e1n annyi, hogy valamit allok\u00e1lsz, \u00e9s az azonnal elhal\u00e1lozik, mik\u00f6zben fontos er\u0151forr\u00e1st \u00e9get el, amely ebben az esetben a mem\u00f3ria s\u00e1vsz\u00e9less\u00e9ge. Mindez teljes\u00edtm\u00e9nycs\u00f6kken\u00e9shez vezet. Az x86-os rendszereken \u00e1ltal\u00e1ban akt\u00edvan kell \u00e9getni a processzorciklusokat, de itt m\u00e1r j\u00f3val kor\u00e1bban el\u00e9getted az \u00f6sszes mem\u00f3ri\u00e1t. A megold\u00e1s \u2013 cs\u00f6kkenteni kell az allok\u00e1l\u00e1sok sz\u00e1m\u00e1t.\u00a0<br \/>\nA probl\u00e9ma m\u00e1sik r\u00e9sze, hogy ha a profiler-t akkor ind\u00edtod el, amikor a mem\u00f3ria s\u00e1vsz\u00e9less\u00e9ge elfogyott, \u00e9ppen abban a pillanatban, amikor ez t\u00f6rt\u00e9nik, \u00e1ltal\u00e1ban a cache visszat\u00e9r\u00e9s\u00e9re v\u00e1rsz, mert tele van a szem\u00e9ttel, amit \u00e9ppen gener\u00e1lt\u00e1l, mindezekkel a sorokkal. Ez\u00e9rt minden load vagy store m\u0171velet lass\u00fav\u00e1 v\u00e1lik, mivel cache miss-hez vezetnek \u2013 az eg\u00e9sz cache lass\u00fa lett, mik\u00f6zben arra v\u00e1r, hogy a szem\u00e9t elt\u0171nj\u00f6n. A profiler teh\u00e1t csak meleg, v\u00e9letlenszer\u0171 zajt mutat, amely az eg\u00e9sz ciklus sor\u00e1n elmos\u00f3dik \u2013 nem lesz k\u00fcl\u00f6n forr\u00f3 utas\u00edt\u00e1s vagy hely a k\u00f3dban. Csak zaj. \u00c9s ha megn\u00e9zed a GC ciklusokat, azok mind a Young Generation-ben lesznek, \u00e9s szupergyorsak \u2013 mikro- vagy milliszekundum maximum. Mivel ez a mem\u00f3ria azonnal hal meg. Te milli\u00e1rd gigab\u00e1jtot allok\u00e1lsz, \u00e9s \u0151 v\u00e1gja, \u00e9s v\u00e1gja, \u00e9s \u00fajra v\u00e1gja. Mindez nagyon gyorsan t\u00f6rt\u00e9nik. \u00cdgy olcs\u00f3 GC ciklusaink vannak, meleg zaj az eg\u00e9sz ciklusban, de mi \u00f6tvenszeres teljes\u00edtm\u00e9nyn\u00f6vel\u00e9st akarunk. Ebben a pillanatban valaminek z\u00e1r\u00f3dnia kell a fejedben, \u00e9s megsz\u00f3lalnia: \u201emi\u00e9rt van ez \u00edgy?!\u201d. A mem\u00f3ria s\u00e1vsz\u00e9less\u00e9g t\u00falcsordul\u00e1sa nem jelenik meg a klasszikus debuggerben, a hardveres teljes\u00edtm\u00e9nym\u00e9r\u0151je debuggert kell ind\u00edtanod, hogy ezt \u00f6n\u00e1ll\u00f3an \u00e9s k\u00f6zvetlen\u00fcl l\u00e1thasd. K\u00f6zvetetten ezt a h\u00e1rom t\u00fcnetb\u0151l lehet gyan\u00edtani. A harmadik t\u00fcnet az, amikor n\u00e9zed, mit allok\u00e1lsz, megk\u00e9rdezed a profilt, \u00e9s \u0151 v\u00e1laszol: \u201eTe milli\u00e1rd sort k\u00e9sz\u00edtett\u00e9l, de a GC ingyen dolgozott.\u201d Amint ez megt\u00f6rt\u00e9nik, r\u00e1j\u00f6ssz, hogy t\u00fal sok objektumot gener\u00e1lt\u00e1l, \u00e9s el\u00e9gett\u00e9l minden mem\u00f3ria s\u00e1vsz\u00e9less\u00e9get. Van m\u00f3d arra, hogy ezzel foglalkozz, de nem nyilv\u00e1nval\u00f3.\u00a0<\/p>\n<p><\/p>\n<p>A probl\u00e9ma az adatszerkezetben rejlik: a m\u00f6g\u00f6ttes alapstrukt\u00fara t\u00fal nagy, 2.7G a lemezen, ez\u00e9rt nagyon nem k\u00edv\u00e1natos ezt a dolgot lem\u00e1solni - szeretn\u00e9nk k\u00f6zvetlen\u00fcl a h\u00e1l\u00f3zati b\u00e1jtbuferb\u0151l bet\u00f6lteni a regiszterekbe, hogy ne olvassunk-\u00edrjunk \u00f6t alkalommal oda-vissza. Sajnos a Java alap\u00e9rtelmez\u00e9s szerint nem biztos\u00edt ilyen k\u00f6nyvt\u00e1rat a JDK-ban. De igaz\u00e1b\u00f3l ez trivi\u00e1lis, nem? L\u00e9nyeg\u00e9ben 5-10 sor k\u00f3d sz\u00fcks\u00e9ges a saj\u00e1t pufferezett sorbet\u00f6lt\u0151nk megval\u00f3s\u00edt\u00e1s\u00e1hoz, amely a karakterl\u00e1nc oszt\u00e1ly viselked\u00e9s\u00e9t ut\u00e1nozza, mik\u00f6zben a m\u00f6g\u00f6ttes b\u00e1jtbufert burkolja. Ennek eredm\u00e9nyek\u00e9nt \u00fagy t\u0171nik, hogy szinte karakterl\u00e1ncokkal dolgozol, de val\u00f3j\u00e1ban a mutat\u00f3k mozognak a bufferben, \u00e9s a nyers b\u00e1jtok nem m\u00e1sol\u00f3dnak sehova, \u00edgy ugyanazokat a buffereket haszn\u00e1lod \u00fajra \u00e9s \u00fajra, mik\u00f6zben az oper\u00e1ci\u00f3s rendszer boldogan \u00e1tv\u00e1llalja azokat a feladatokat, amelyekre k\u00e9sz\u00fclt, \u00edgy p\u00e9ld\u00e1ul a l\u00e1thatatlan duplapufferez\u00e9st ezekkel a b\u00e1jtbuferekkel, \u00e9s te m\u00e1r nem \u0151rl\u00f6d a sz\u00fcks\u00e9gtelen adatfolyamot. \u00dcdv\u00f6z\u00f6lj\u00fck! Tudj\u00e1k, hogy a GC haszn\u00e1latakor garant\u00e1lt, hogy a mem\u00f3ria minden egyes kioszt\u00e1sa nem l\u00e1that\u00f3 a processzor sz\u00e1m\u00e1ra az utols\u00f3 GC ciklus ut\u00e1n? Ez\u00e9rt mindez nem lehet a gyors\u00edt\u00f3t\u00e1rban, \u00e9s ezut\u00e1n egy 100%-os hib\u00e1t okoz. Az ir\u00e1ny\u00edt\u00f3 haszn\u00e1lata sor\u00e1n az x86-on a regiszter mem\u00f3riaolvas\u00e1sa 1-2 ciklusba telik, \u00e9s amint ez megt\u00f6rt\u00e9nik, neked fizetned kell, fizetned kell, fizetned kell, mert az \u00f6sszes mem\u00f3ria a <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cache_inclusion_policy\">NINE gyors\u00edt\u00f3t\u00e1rakban<\/a><\/noindex> \u2013 \u00e9s ez az a val\u00f3di k\u00f6lts\u00e9g, ami a mem\u00f3ria kioszt\u00e1s\u00e1b\u00f3l sz\u00e1rmazik. Val\u00f3di k\u00f6lts\u00e9g.<\/p>\n<p><\/p>\n<p>M\u00e1s sz\u00f3val, az adatszerkezetek azok, amik a legnehezebben m\u00f3dos\u00edthat\u00f3k. Amint bel\u00e1tja, hogy rossz adatszerkezetet v\u00e1lasztott, ami k\u00e9s\u0151bb rontani fogja a teljes\u00edtm\u00e9nyt, \u00e1ltal\u00e1ban jelent\u0151s munk\u00e1t kell elv\u00e9geznie, de ha ezt nem teszi meg, a helyzet csak rosszabb lesz. Mindenekel\u0151tt az adatszerkezetekre kell gondolni, ez fontos. A f\u0151 k\u00f6lts\u00e9g itt a neh\u00e9z adatszerkezetekre h\u00e1rul, amelyeket az \u201eX adatszerkezetet \u00e1tm\u00e1soltam a Y adatszerkezetbe, mert Y nekem jobban tetszik\u201d st\u00edlusban kezdenek haszn\u00e1lni. De a m\u00e1sol\u00e1si m\u0171velet (amely olcs\u00f3nak t\u0171nik) val\u00f3j\u00e1ban mem\u00f3ri\u00e1t ig\u00e9nyel, \u00e9s itt van eltemetve az elveszett fut\u00e1si id\u0151. Ha van egy hatalmas JSON sz\u00f6vegem, \u00e9s azt szeretn\u00e9m \u00e1talak\u00edtani egy struktur\u00e1lt DOM-f\u00e1v\u00e1 POJO-b\u00f3l vagy valami ilyesmib\u0151l, az e sz\u00f6veg feldolgoz\u00e1si m\u0171velete \u00e9s a POJO fel\u00e9p\u00edt\u00e9se, majd k\u00e9s\u0151bb \u00fajabb h\u00edv\u00e1s a POJO-ra extrak\u00f6lts\u00e9gg\u00e9 v\u00e1lik \u2013 ami nem olcs\u00f3. Kiv\u00e9ve, ha sokkal gyakrabban fut ezek k\u00f6z\u00f6tt a POJO-k k\u00f6z\u00f6tt, mint a sz\u00f6veg k\u00f6z\u00f6tt. \u00c9ppen ez\u00e9rt, pr\u00f3b\u00e1lhatja dek\u00f3dolni a sz\u00f6veget, \u00e9s csak a sz\u00fcks\u00e9ges dolgokat kiemelni an\u00e9lk\u00fcl, hogy b\u00e1rmilyen POJO-ba \u00e1talak\u00edtan\u00e1. Ha mindez a maxim\u00e1lis teljes\u00edtm\u00e9nyt ig\u00e9nyl\u0151 \u00faton t\u00f6rt\u00e9nik, semmif\u00e9le POJO-ra nincs sz\u00fcks\u00e9g \u2013 k\u00f6zvetlen\u00fcl a sz\u00f6vegben kell matatni.<\/p>\n<p><\/p>\n<h1 id=\"zachem-sozdavat-svoy-yazyk-programmirovaniya\">Mi\u00e9rt hozzunk l\u00e9tre saj\u00e1t programoz\u00e1si nyelvet<\/h1>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Azt mondta, hogy az \u00e1rmodell meg\u00e9rt\u00e9s\u00e9hez, sz\u00fcks\u00e9g van egy kis saj\u00e1t nyelvet \u00edrni...<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Nem nyelvet, hanem ford\u00edt\u00f3t. A nyelv \u00e9s a ford\u00edt\u00f3 k\u00e9t k\u00fcl\u00f6n dolog. A legfontosabb k\u00fcl\u00f6nbs\u00e9g \u2013 a fej\u00fcnkben van.\u00a0<\/p>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Egy\u00e9bk\u00e9nt, amennyire tudom, \u00d6n k\u00eds\u00e9rletezik saj\u00e1t nyelvek l\u00e9trehoz\u00e1s\u00e1val. Mi\u00e9rt?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Mert az\u00e9rt csin\u00e1lom! F\u00e9lig nyugd\u00edjas vagyok, \u00edgy ez a hobbim. \u00c9letem sor\u00e1n mindig m\u00e1sok nyelveit val\u00f3s\u00edtottam meg. R\u00e1ad\u00e1sul sokat dolgoztam a k\u00f3dol\u00e1si st\u00edluson is. Ezen k\u00edv\u00fcl l\u00e1tom a probl\u00e9m\u00e1kat m\u00e1s nyelvekben. L\u00e1tom, hogy vannak jobb m\u00f3dok a megszokott dolgok elv\u00e9gz\u00e9s\u00e9re. \u00c9n is ig\u00e9nybe venn\u00e9m \u0151ket. Egyszer\u0171en elegem van abb\u00f3l, hogy probl\u00e9m\u00e1kat l\u00e1tok magamban, a Java-ban, a Python-ban, b\u00e1rmely m\u00e1s nyelvben. Jelenleg React Native, JavaScript \u00e9s Elm nyelven \u00edrok, mint hobbi, ami nem a nyugd\u00edjr\u00f3l sz\u00f3l, hanem az akt\u00edv munk\u00e1r\u00f3l. Python-on is \u00edrok, \u00e9s val\u00f3sz\u00edn\u0171leg tov\u00e1bbra is a g\u00e9pi tanul\u00e1sra fogok \u00f6sszpontos\u00edtani a Java backendekhez. Sz\u00e1mos n\u00e9pszer\u0171 nyelv l\u00e9tezik, \u00e9s mindegyiknek megvannak az \u00e9rdekes saj\u00e1toss\u00e1gai. Mindegyik valamiben j\u00f3, \u00e9s meg lehet pr\u00f3b\u00e1lni ezeket az \u00e9rdekess\u00e9geket egyes\u00edteni. Sz\u00f3val, \u00e9rdekes dolgok tanulm\u00e1nyoz\u00e1s\u00e1val foglalkozom, a nyelv viselked\u00e9s\u00e9vel, pr\u00f3b\u00e1lok \u00e9sszer\u0171 szemantik\u00e1t kital\u00e1lni. \u00c9s eddig j\u00f3l megy! Jelenleg a mem\u00f3ria szemantik\u00e1j\u00e1val k\u00fczd\u00f6k, mert olyat szeretn\u00e9k, mint a C \u00e9s Java, \u00e9s szeretn\u00e9k egy er\u0151s mem\u00f3ria modellt \u00e9s mem\u00f3ria szemantik\u00e1t a bet\u00f6lt\u00e9sekhez \u00e9s t\u00e1rol\u00e1sokhoz. K\u00f6zben szeretn\u00e9m, ha automatikusan k\u00f6vetkezne a t\u00edpuskiad\u00e1s, mint a Haskell-n\u00e9l. Na ez az, amit az utols\u00f3 2-3 h\u00f3napban pr\u00f3b\u00e1lok \u00f6sszekombin\u00e1lni, p\u00e9ld\u00e1ul.<\/p>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Ha egy olyan nyelvet \u00e9p\u00edtesz, ami a t\u00f6bbi nyelv legjobb aspektusait veszi \u00e1t, gondolt\u00e1l m\u00e1r arra, hogy valaki visszafel\u00e9 is megteszi: \u00e1tveszi az \u00f6tleteidet, \u00e9s felhaszn\u00e1lja az \u00f6v\u00e9ben?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: \u00cdgy jelennek meg az \u00faj nyelvek! Mi\u00e9rt hasonl\u00edt a Java a C-re? Mert a C-nek volt egy j\u00f3 szintaxisa, amit mindenki \u00e9rtett, \u00e9s a Java inspir\u00e1l\u00f3dott ebb\u0151l a szintaxisb\u00f3l, hozz\u00e1adva a t\u00edpusbiztons\u00e1got, a t\u00f6mbhat\u00e1rok ellen\u0151rz\u00e9s\u00e9t, a GC-t, valamint jav\u00edtva n\u00e9h\u00e1ny dolgot a C-b\u0151l. Alapvet\u0151en saj\u00e1t dolgokat is hozz\u00e1adtak. De er\u0151sen inspir\u00e1l\u00f3dtak, nem igaz? Mindenki \u00f3ri\u00e1sok v\u00e1ll\u00e1n \u00e1ll, akik el\u0151tt\u00fck voltak \u2013 pontosan \u00edgy t\u00f6rt\u00e9nik a fejl\u0151d\u00e9s.<\/p>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Ahogy \u00e9rtem, a nyelved biztons\u00e1gosan fog b\u00e1nni a mem\u00f3ri\u00e1val. Gondolkodt\u00e1l arr\u00f3l, hogy megval\u00f3s\u00edts valami hasonl\u00f3t a Rust-b\u00f3l sz\u00e1rmaz\u00f3 borrow checkerhez? N\u00e9zted m\u00e1r? Mi a v\u00e9lem\u00e9nyed r\u00f3la?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Nos, m\u00e1r egy ideje C nyelven \u00edrok, mindenf\u00e9le malloc-al \u00e9s free-dal, \u00e9s manu\u00e1lisan kezelem az \u00e9lettartamot. Tudj\u00e1tok, az \u00f6sszes manu\u00e1lisan kezelt \u00e9lettartam 90-95%-a ugyanazzal a strukt\u00far\u00e1val rendelkezik. \u00c9s ez nagyon, nagyon f\u00e1jdalmas, hogy ezt manu\u00e1lisan csin\u00e1ljam. J\u00f3 lenne, ha a ford\u00edt\u00f3 csak megmondan\u00e1, hogy mi t\u00f6rt\u00e9nik, \u00e9s mit \u00e9rt\u00e9l el a tetteiddel. Egyes dolgokn\u00e1l a borrow checker ezt automatikusan megteszi. Emellett automatikusan ki kellene \u00edrnia az inform\u00e1ci\u00f3t, mindent \u00e9rtenie kellene, \u00e9s m\u00e9g csak nem is terhelnie engem azzal, hogy ezt az \u00e9rthet\u0151s\u00e9get kifejtse. Legal\u00e1bb helyi escape anal\u00edzist kellene v\u00e9geznie, \u00e9s csak akkor, ha ezzel nem boldogul, lenne sz\u00fcks\u00e9g t\u00edpus annot\u00e1ci\u00f3k hozz\u00e1ad\u00e1s\u00e1ra, amelyek az \u00e9lettartamot \u00edrj\u00e1k le - \u00e9s egy ilyen s\u00e9ma sokkal bonyolultabb, mint a borrow checker, vagy b\u00e1rmilyen l\u00e9tez\u0151 mem\u00f3riaellen\u0151r. A v\u00e1laszt\u00e1s a 'minden rendben' \u00e9s a 'semmit sem \u00e9rtettem' k\u00f6z\u00f6tt - nem, kellene valami jobb.\u00a0<br \/>\nTeh\u00e1t, mint valaki, aki sok k\u00f3dot \u00edrt C-ben, \u00fagy \u00e9rzem, hogy az automatikus \u00e9lettartam-kezel\u00e9s t\u00e1mogat\u00e1sa a legfontosabb dolog. R\u00e1ad\u00e1sul m\u00e1r unom, mennyire nagy mem\u00f3ri\u00e1t haszn\u00e1l a Java, \u00e9s a f\u0151 panasz a GC-re vonatkozik. Amikor mem\u00f3ri\u00e1t foglalsz a Java-ban, nem kapod vissza azt a mem\u00f3ri\u00e1t, amely a legutols\u00f3 GC ciklusban lok\u00e1lis volt. Olyan nyelvekn\u00e9l, ahol a mem\u00f3ria kezel\u00e9se pontosabb, ez nem \u00edgy van. Ha a malloc-ot h\u00edvod, azonnal megkapod a mem\u00f3ri\u00e1t, amit \u00e1ltal\u00e1ban csak most haszn\u00e1ltak. \u00c1ltal\u00e1ban valamilyen ideiglenes dolgot csin\u00e1lsz a mem\u00f3ri\u00e1val, majd azonnal visszaadod. Az pedig azonnal visszaker\u00fcl a malloc poolba, \u00e9s a k\u00f6vetkez\u0151 malloc ciklus ism\u00e9t el\u0151h\u00fazza. Ez\u00e9rt a t\u00e9nyleges mem\u00f3riahaszn\u00e1lat cs\u00f6kken a konkr\u00e9t id\u0151pontban l\u00e9v\u0151 \u00e9l\u0151 objektumok sz\u00e1m\u00e1nak, plusz a mem\u00f3ria sziv\u00e1rg\u00e1sok miatt. \u00c9s ha semmi nem sziv\u00e1rog teljesen tisztess\u00e9gtelen m\u00f3don, a mem\u00f3ria nagy r\u00e9sze a gyors\u00edt\u00f3t\u00e1rakban \u00e9s a processzorban \u00fcl, \u00e9s ez gyorsan m\u0171k\u00f6dik. De sok k\u00e9zi mem\u00f3ria kezel\u00e9s ig\u00e9nyel a malloc \u00e9s free haszn\u00e1lat\u00e1val, a megfelel\u0151 sorrendben, megfelel\u0151 helyen. A Rust helyesen k\u00e9pes kezelni ezt, \u00e9s sok esetben m\u00e9g nagyobb teljes\u00edtm\u00e9nyt is ny\u00fajt, mivel a mem\u00f3riafogyaszt\u00e1s csak az aktu\u00e1lis sz\u00e1m\u00edt\u00e1sokra sz\u0171k\u00fcl \u2013 szemben a k\u00f6vetkez\u0151 GC ciklus v\u00e1rakoz\u00e1s\u00e1val, ami felszabad\u00edtja a mem\u00f3ri\u00e1t. Ennek eredm\u00e9nyek\u00e9nt nagyon \u00e9rdekes m\u00f3dot kaptunk a teljes\u00edtm\u00e9ny jav\u00edt\u00e1s\u00e1ra. R\u00e1ad\u00e1sul el\u00e9g er\u0151s \u2013 tekintve, hogy ilyen dolgokat csin\u00e1ltam a p\u00e9nz\u00fcgyi technol\u00f3gi\u00e1k adatfeldolgoz\u00e1s\u00e1n\u00e1l, \u00e9s ez k\u00f6r\u00fclbel\u00fcl \u00f6tsz\u00f6r\u00f6s gyorsul\u00e1st eredm\u00e9nyezett. Ez el\u00e9g nagy gyorsul\u00e1s, k\u00fcl\u00f6n\u00f6sen egy olyan vil\u00e1gban, ahol a processzorok nem v\u00e1lnak gyorsabb\u00e1, \u00e9s m\u00e9g mindig v\u00e1rjuk a fejleszt\u00e9seket.<\/p>\n<p><\/p>\n<h1 id=\"karera-performans-inzhenera\">Karrier a teljes\u00edtm\u00e9nym\u00e9rn\u00f6ks\u00e9gben<\/h1>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Szeretn\u00e9k m\u00e9g k\u00e9rdezni a karrieredr\u0151l \u00f6sszess\u00e9g\u00e9ben. H\u00edress\u00e9 v\u00e1lt\u00e1l a JIT HotSpot munk\u00e1d miatt, majd \u00e1tker\u00fclt\u00e9l az Azulhoz \u2013 ami szint\u00e9n JVM-c\u00e9g. De m\u00e1r ink\u00e1bb hardverrel foglalkozt\u00e1l, mint szoftverrel. Azt\u00e1n hirtelen \u00e1tv\u00e1ltott\u00e1l a Big Data-ra \u00e9s a g\u00e9pi tanul\u00e1sra, majd a csal\u00e1s\u00e9szlel\u00e9sre. Hogy t\u00f6rt\u00e9nt ez? Ezek nagyon k\u00fcl\u00f6nb\u00f6z\u0151 fejleszt\u00e9si ter\u00fcletek.<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: M\u00e1r egy ideje programoz\u00e1ssal foglalkozom, \u00e9s sokf\u00e9le tev\u00e9kenys\u00e9gben r\u00e9szt vettem. Amikor az emberek azt mondj\u00e1k: \u201e\u00f3, te vagy az, aki a JIT-et k\u00e9sz\u00edtette a Java-hoz!\u201d, mindig vicces. El\u0151tte egy PostScript kl\u00f3nnal foglalkoztam \u2013 azzal a nyelvvel, amelyet az Apple valaha a l\u00e9zernyomtat\u00f3ihoz haszn\u00e1lt. Miel\u0151tt pedig a Forth nyelv megval\u00f3s\u00edt\u00e1s\u00e1val foglalkoztam. A k\u00f6zponti t\u00e9ma sz\u00e1momra mindig az eszk\u00f6z\u00f6k fejleszt\u00e9se volt. Az \u00e9letem sor\u00e1n mindig olyan eszk\u00f6z\u00f6ket k\u00e9sz\u00edtettem, amelyek seg\u00edts\u00e9g\u00e9vel m\u00e1sok nagyszer\u0171 programokat \u00edrhatnak. De foglalkoztam oper\u00e1ci\u00f3s rendszerek, illeszt\u0151programok, kernel szint\u0171 debugger-ek, oper\u00e1ci\u00f3s rendszerek fejleszt\u00e9s\u00e9re sz\u00e1nt nyelvek kidolgoz\u00e1s\u00e1val, amelyeket kezdetben egyszer\u0171nek indultak, de id\u0151vel egyre bonyolultabb\u00e1 v\u00e1ltak. Az alapvet\u0151 t\u00e9ma azonban m\u00e9gis az eszk\u00f6z\u00f6k fejleszt\u00e9se. Nagy r\u00e9sze az \u00e9letemnek az Azul \u00e9s a Sun k\u00f6z\u00f6tt telt el, \u00e9s ez Java-r\u00f3l sz\u00f3lt. De amikor a Big Data \u00e9s a Machine Learning ter\u00fclet\u00e9re terel\u0151dtem, \u00fajra felvettem a \u201eform\u00e1lis kalapomat\u201d, \u00e9s azt mondtam: \u201e\u00d3, most van egy nem trivi\u00e1lis probl\u00e9m\u00e1nk, \u00e9s itt t\u00e9nyleg rengeteg \u00e9rdekes dolog \u00e9s ember van, aki valamit csin\u00e1l.\u201d Ez egy nagyszer\u0171 fejleszt\u00e9si \u00fat, amelyet \u00e9rdemes v\u00e9gigj\u00e1rni. <\/p>\n<p><\/p>\n<p>Igen, nagyon szeretem a diszkr\u00e9t sz\u00e1m\u00edt\u00e1stechnik\u00e1t. Az els\u0151 munk\u00e1m egyetemi \u00e9veim alatt volt C nyelven, egy rekl\u00e1mprojekten. Ez diszkr\u00e9t sz\u00e1m\u00edt\u00e1sokat v\u00e9gzett Zilog Z80 chipeken, amelyek adatokat gy\u0171jt\u00f6ttek anal\u00f3g optikai sz\u00f6vegfelismer\u00e9shez, amit egy val\u00f3di anal\u00f3g elemz\u0151 v\u00e9gzett. Ez egy izgalmas \u00e9s teljesen szokatlan t\u00e9ma volt. De probl\u00e9m\u00e1k mer\u00fcltek fel, egyes r\u00e9szeket nem ismertek fel j\u00f3l, ez\u00e9rt a k\u00e9pet ki kellett venni \u00e9s megmutatni egy olyan szem\u00e9lynek, aki m\u00e1r l\u00e1tta a sz\u00f6veget, \u00e9s k\u00f6z\u00f6lte, hogy mi \u00e1ll benne, ez\u00e9rt ott adatokkal foglalkoz\u00f3 feladatok voltak, \u00e9s ezeknek a feladatoknak saj\u00e1t nyelv\u00fck volt. Volt egy backend, ami mindezt feldolgozta \u2013 p\u00e1rhuzamosan m\u0171k\u00f6d\u0151 Z80-asok, mindegyikhez egy vt100 termin\u00e1l, \u00e9s volt egy p\u00e1rhuzamos programoz\u00e1si modell Z80-on. Egy k\u00f6z\u00f6s mem\u00f3ria, amit az \u00f6sszes Z80 megosztott egy csillag t\u00edpus\u00fa konfigur\u00e1ci\u00f3n bel\u00fcl; a backplane \u00e9s a RAM fele megosztott volt a h\u00e1l\u00f3zatban, a m\u00e1sik fele pedig priv\u00e1t vagy m\u00e1s c\u00e9lokra ment. \u00c9rtelmesen bonyolult p\u00e1rhuzamos elosztott rendszer megosztott... f\u00e9lig megosztott mem\u00f3ri\u00e1val. Mikor is volt ez... M\u00e1r nem is eml\u00e9kszem, valamikor a 80-as \u00e9vek k\u00f6zep\u00e9n. El\u00e9g r\u00e9gen.\u00a0<br \/>\nIgen, tekints\u00fck \u00fagy, hogy 30 \u00e9v el\u00e9g r\u00e9gen van. A diszkr\u00e9t sz\u00e1m\u00edt\u00e1stechnik\u00e1val kapcsolatos feladatok m\u00e1r r\u00e9g\u00f3ta l\u00e9teznek, az emberek r\u00e9g\u00f3ta k\u00fczdenek ezzel. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Beowulf_(%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80)\">Beowulf<\/a><\/noindex>- klaszterekkel. Az ilyen klaszterek \u00fagy n\u00e9znek ki, mint\u2026 P\u00e9ld\u00e1ul: van Ethernet, \u00e9s a gyors x86 g\u00e9ped csatlakozik ehhez az Ethernethez, \u00e9s most szeretn\u00e9l egy hamis megosztott mem\u00f3ri\u00e1t kapni, mert akkor senki sem tudott foglalkozni a p\u00e1rhuzamos sz\u00e1m\u00edt\u00e1ssal, ez t\u00fals\u00e1gosan bonyolult volt, ez\u00e9rt k\u00e9sz\u00fclt egy hamis megosztott mem\u00f3ria x86-on, amely mem\u00f3riav\u00e9delemmel rendelkezett, \u00e9s ha \u00edrt\u00e1l ebbe az oldalba, akkor azt mondtuk a t\u00f6bbi processzornak, hogy ha hozz\u00e1f\u00e9rnek ugyanahhoz a megosztott mem\u00f3ri\u00e1hoz, akkor azt t\u0151led kellett bet\u00f6lteni, \u00edgy j\u00f6tt l\u00e9tre valami a gyors\u00edt\u00f3t\u00e1rkoherencia t\u00e1mogat\u00e1si protokollj\u00e1b\u00f3l \u00e9s a szoftverb\u0151l. \u00c9rdekes koncepci\u00f3. A val\u00f3di probl\u00e9ma nyilv\u00e1nval\u00f3an m\u00e1s volt. Mindez m\u0171k\u00f6d\u00f6tt, de gyorsan teljes\u00edtm\u00e9nyprobl\u00e9m\u00e1k mer\u00fcltek fel, mert senki sem \u00e9rtette a teljes\u00edtm\u00e9ny modellj\u00e9t el\u00e9g j\u00f3l \u2013 mik a mem\u00f3ria-hozz\u00e1f\u00e9r\u00e9si mint\u00e1k, hogyan lehet \u00fagy be\u00e1ll\u00edtani, hogy a csom\u00f3pontok ne pingelj\u00e9k egym\u00e1st v\u00e9gtelen\u00fcl, \u00e9s \u00edgy tov\u00e1bb. <\/p>\n<p><\/p>\n<p>Az H2O-ban azt tal\u00e1lta ki, hogy maguk a fejleszt\u0151k felel\u0151sek az\u00e9rt, hogy meghat\u00e1rozz\u00e1k, hol rejlik a p\u00e1rhuzamoss\u00e1g \u00e9s hol nem. Olyan k\u00f3dol\u00e1si modellt tal\u00e1ltam ki, ami lehet\u0151v\u00e9 tette, hogy k\u00f6nnyen \u00e9s egyszer\u0171en \u00edrjunk nagy teljes\u00edtm\u00e9ny\u0171 k\u00f3dot. Ellenben neh\u00e9z lass\u00fa k\u00f3dot \u00edrni, az rosszul fog mutatni. Komoly er\u0151fesz\u00edt\u00e9st ig\u00e9nyel, hogy lass\u00fa k\u00f3dot \u00edrjunk, szokatlan m\u00f3dszereket kell alkalmaznunk. A lass\u00edt\u00f3k\u00f3d azonnal l\u00e1that\u00f3. Ennek k\u00f6vetkezm\u00e9nyek\u00e9nt \u00e1ltal\u00e1ban gyorsan fut\u00f3 k\u00f3dot \u00edrunk, de k\u00f6zben meg kell \u00e9rten\u00fcnk, hogy mit kell tenni megosztott mem\u00f3ria eset\u00e9n. Mindez nagy t\u00f6mb\u00f6kh\u00f6z k\u00f6t\u0151dik, \u00e9s a viselked\u00e9s\u00fck hasonl\u00edt a nem volatilis nagy t\u00f6mb\u00f6kh\u00f6z a p\u00e1rhuzamos Java-ban. K\u00e9pzelje el, hogy k\u00e9t sz\u00e1l p\u00e1rhuzamos t\u00f6mbbe \u00edr, az egyik nyer, a m\u00e1sik elvesz\u00edt, \u00e9s nem tudja, ki melyik. Ha nem volatilisak, akkor a sorrend b\u00e1rmi lehet \u2013 \u00e9s ez val\u00f3ban j\u00f3l m\u0171k\u00f6dik. Az emberek val\u00f3ban t\u00f6r\u0151dnek a m\u0171veletek sorrendj\u00e9vel, helyesen helyezik el a volatilis kulcssz\u00f3t, \u00e9s a megfelel\u0151 helyeken el\u0151re v\u00e1rj\u00e1k a mem\u00f3ri\u00e1val kapcsolatos teljes\u00edtm\u00e9nyprobl\u00e9m\u00e1kat. Ellenkez\u0151 esetben csak k\u00f3dot \u00edrn\u00e1nak 1-t\u0151l N-ig, ahol N valamilyen trilli\u00f3, abban a rem\u00e9nyben, hogy az \u00f6sszes bonyolult eset automatikusan p\u00e1rhuzamoss\u00e1 v\u00e1lik \u2013 \u00e9s itt ez nem m\u0171k\u00f6dik. De az H2O nem Java, \u00e9s nem is Scala, ha \u00fagy tetszik, nevezz\u00fck \u201eJava minus minus\u201d-nak. Ez egy nagyon \u00e9rthet\u0151 programoz\u00e1si st\u00edlus, \u00e9s hasonl\u00edt a C vagy a Java egyszer\u0171 k\u00f3dj\u00e1nak \u00edr\u00e1s\u00e1ra, ciklusokkal \u00e9s t\u00f6mb\u00f6kkel. De emellett terab\u00e1jtokkal lehet dolgozni a mem\u00f3ri\u00e1ban. M\u00e9g mindig haszn\u00e1lom az H2O-t. Id\u0151r\u0151l id\u0151re k\u00fcl\u00f6nb\u00f6z\u0151 projektekben alkalmazom \u2013 \u00e9s ez m\u00e9g mindig a leggyorsabb dolog, t\u00f6bb t\u00edzszeresen megel\u0151zve a versenyt\u00e1rsakat. Ha Big Data-val dolgozik oszlopos adatokkal, nagyon neh\u00e9z fel\u00fclm\u00falni az H2O-t.<\/p>\n<p><\/p>\n<h1 id=\"tehnicheskie-chellenzhi\">Technikai kih\u00edv\u00e1sok<\/h1>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Mi volt a legnagyobb kih\u00edv\u00e1s a karrierje sor\u00e1n?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: A technikai vagy nem technikai r\u00e9sz\u00e9t besz\u00e9lj\u00fck a k\u00e9rd\u00e9snek? Azt mondan\u00e1m, a legnagyobb kih\u00edv\u00e1sok nem technikaiak.\u00a0<br \/>\nAmi a technikai kih\u00edv\u00e1sokat illeti. Egyszer\u0171en legy\u0151ztem \u0151ket. Nem is tudom, mi volt a legnagyobb, de volt n\u00e9h\u00e1ny el\u00e9g \u00e9rdekes, amire sok id\u0151t \u00e9s ment\u00e1lis k\u00fczdelmet ford\u00edtottam. Amikor a Sunhoz mentem, biztos voltam benne, hogy gyors ford\u00edt\u00f3t k\u00e9sz\u00edtek, de sok id\u0151sebb koll\u00e9ga azt mondta, hogy soha nem fog siker\u00fclni. De elindultam ezen az \u00faton, meg\u00edrtam a ford\u00edt\u00f3t a regiszterallok\u00e1torig, \u00e9s el\u00e9g gyors lett. Olyan gyors volt, mint a modern C1, de akkor a regiszterallok\u00e1tor sokkal lassabb volt, \u00e9s visszatekintve \u2013 ez nagy adatszerkezet probl\u00e9m\u00e1ja volt. Sz\u00fcks\u00e9gem volt r\u00e1, hogy meg\u00edrjam a grafikus regiszterallok\u00e1tort, \u00e9s nem \u00e9rtettem a k\u00f3d kifejez\u0151ereje \u00e9s a sebess\u00e9ge k\u00f6z\u00f6tti dilemm\u00e1t, ami abban az id\u0151ben l\u00e9tezett \u00e9s nagyon fontos volt. Kider\u00fclt, hogy az adatszerkezet \u00e1ltal\u00e1ban meghaladja a cache m\u00e9ret\u00e9t az akkori x86-okon, \u00e9s ez\u00e9rt, ha eredetileg arra sz\u00e1m\u00edtottam, hogy a regiszterallok\u00e1tor 5-10 sz\u00e1zal\u00e9k\u00e1t fogja elt\u00f6lteni a JIT-el\u00e9s idej\u00e9nek, a val\u00f3s\u00e1gban ez 50 sz\u00e1zal\u00e9kra n\u0151tt. <\/p>\n<p><\/p>\n<p>Az id\u0151 telt, a ford\u00edt\u00f3 egyre vil\u00e1gosabb\u00e1 \u00e9s teljes\u00edtm\u00e9nyesebb\u00e9 v\u00e1lt, egyre ritk\u00e1bban gener\u00e1lt borzalmas k\u00f3dot, \u00e9s a teljes\u00edtm\u00e9ny egyre ink\u00e1bb hasonl\u00edtott arra, amit a C ford\u00edt\u00f3 ny\u00fajt. Ha persze nem egy olyan vacakot \u00edrsz, amit m\u00e9g a C sem gyors\u00edt. Ha C-szer\u0171en \u00edrsz k\u00f3dot, akkor t\u00f6bb esetben is olyan teljes\u00edtm\u00e9nyt kapsz, mint a C. \u00c9s min\u00e9l messzebb jutottam, ann\u00e1l gyakrabban adott k\u00f3dot, amely aszimptotikusan megegyezett a C szintj\u00e9vel, a regiszterallok\u00e1tor kezdetben valami befejezett dolognak t\u0171nt... f\u00fcggetlen\u00fcl att\u00f3l, hogy a k\u00f3dod gyorsan vagy lassan fut. Folytattam az allok\u00e1tor fejleszt\u00e9s\u00e9t, hogy jobb allok\u00e1ci\u00f3kat v\u00e9gezzen. Egyre lassabb lett, de egyre jobb teljes\u00edtm\u00e9nyt ny\u00fajtott azokban az esetekben, amikor senki m\u00e1s nem tudta. Be tudtam mer\u00fclni a regiszterallok\u00e1torba, h\u00f3napokat \u00e1stam el benne, \u00e9s hirtelen az eg\u00e9sz k\u00f3d 5%-kal gyorsabban kezdett futni. Ez \u00fajra \u00e9s \u00fajra megt\u00f6rt\u00e9nt, \u00e9s a regiszterallok\u00e1tor valami m\u0171v\u00e9szeti alkot\u00e1ss\u00e1 v\u00e1lt \u2013 mindenki im\u00e1dta vagy ut\u00e1lta, \u00e9s az akad\u00e9mikusok k\u00e9rd\u00e9seket tettek fel, hogy \"mi\u00e9rt \u00fagy csin\u00e1lt\u00e1l mindent\". <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Register_allocation#Linear_Scan\">line\u00e1ris keres\u00e9s<\/a><\/noindex>, \u00e9s mi a k\u00fcl\u00f6nbs\u00e9g. A v\u00e1lasz ugyanaz: a gr\u00e1f sz\u00ednez\u00e9s\u00e9n alapul\u00f3 allo\u00e1tor \u00e9s egy nagyon pontos pufferk\u00f3d-kezel\u00e9s egy\u00fctt a gy\u0151zelem eszk\u00f6ze, a legjobb kombin\u00e1ci\u00f3, amit senki sem tud legy\u0151zni. \u00c9s ez meglehet\u0151sen nem nyilv\u00e1nval\u00f3 dolog. Minden m\u00e1s, amit a ford\u00edt\u00f3 csin\u00e1l \u2013 ezek meglehet\u0151sen j\u00f3l ismert dolgok, b\u00e1r m\u0171v\u00e9szi szintre emelt\u00e9k \u0151ket. Mindig olyan dolgokat csin\u00e1ltam, amik a ford\u00edt\u00f3t m\u0171alkot\u00e1ss\u00e1 kellett volna var\u00e1zsolniuk. De semmi ebb\u0151l nem volt rendk\u00edv\u00fcli \u2013 kiv\u00e9ve a regiszterek allo\u00e1tor\u00e1t. A l\u00e9nyeg, hogy \u00f3vatosan <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Register_allocation\">lev\u00e1gni<\/a><\/noindex> terhel\u00e9s alatt, \u00e9s ha ez megt\u00f6rt\u00e9nik (r\u00e9szletesebben elmagyar\u00e1zhatom, ha \u00e9rdekes), az azt jelenti, hogy agressz\u00edvebben lehet inline-olni, an\u00e9lk\u00fcl, hogy kock\u00e1ztatn\u00e1nk a teljes\u00edtm\u00e9nyg\u00f6rbe \u00e1th\u00e1g\u00e1s\u00e1t. Akkoriban rengeteg teljes k\u00f6r\u0171 ford\u00edt\u00f3 l\u00e9tezett, tele tr\u00fckk\u00f6kkel \u00e9s csilingel\u0151kkel, amelyekben voltak regiszter allo\u00e1torok, de senki m\u00e1s nem tudta ezt \u00edgy megval\u00f3s\u00edtani. <\/p>\n<p><\/p>\n<p>A probl\u00e9ma az, hogy ha inline m\u00f3dszereket adsz hozz\u00e1, \u00e9s ezzel folyamatosan n\u00f6veled az inline ter\u00fcletet, a felhaszn\u00e1lt \u00e9rt\u00e9kek k\u00e9szlete azonnal meghaladja a regiszterek sz\u00e1m\u00e1t, \u00e9s spillage-hez vezet. A kritikus szint gyakran akkor \u00e9rkezik el, amikor az allok\u00e1tor feladja, \u00e9s egy j\u00f3 spillage-jel\u00f6lt fel\u00e9r egy m\u00e1sikkal, teh\u00e1t val\u00f3ban furcsa dolgokat spillelsz el. Az inline \u00e9rt\u00e9k\u00e9nek l\u00e9nyege, hogy elvesz\u00edtesz egy r\u00e9szt a h\u00edv\u00e1s \u00e9s t\u00e1rol\u00e1s k\u00f6lts\u00e9g\u00e9b\u0151l, szemben l\u00e1thatod az \u00e9rt\u00e9keket, \u00e9s tov\u00e1bb optimaliz\u00e1lhatod azokat. Az inline k\u00f6lts\u00e9ge abban rejlik, hogy nagy mennyis\u00e9g\u0171 \u00e9l\u0151 \u00e9rt\u00e9k keletkezik, \u00e9s ha az allok\u00e1torod regiszterb\u0151l t\u00f6bbet spillel, mint amennyire sz\u00fcks\u00e9g van, azonnal vesztesz. \u00c9ppen ez\u00e9rt a legt\u00f6bb allok\u00e1tor h\u00e1tr\u00e1nyban van: amikor az inline egy bizonyos hat\u00e1rt \u00e1tl\u00e9p, mindent spill el, \u00e9s a teljes\u00edtm\u00e9nyed elmegy a v\u00e9c\u00e9be. Azok, akik a ford\u00edt\u00f3t implement\u00e1lj\u00e1k, bizonyos heurisztik\u00e1kat adnak hozz\u00e1: p\u00e9ld\u00e1ul meg\u00e1ll\u00edtj\u00e1k az inline-t, ha egy elegend\u0151en nagy m\u00e9retet el\u00e9r, mivel az allok\u00e1ci\u00f3k mindent elrontanak. \u00cdgy keletkezik a teljes\u00edtm\u00e9nyg\u00f6rbe t\u00f6r\u00e9se - inline-olsz, inline-olsz, a teljes\u00edtm\u00e9ny lassan n\u0151 - azt\u00e1n puff! - hirtelen esik egy nagyot, mert t\u00fal sokat inline-olt\u00e1l. \u00cdgy m\u0171k\u00f6d\u00f6tt minden, eg\u00e9szen a Java megjelen\u00e9s\u00e9ig. A Java sokkal t\u00f6bb inlininget ig\u00e9nyel, ez\u00e9rt sokkal agressz\u00edvebb allok\u00e1torra volt sz\u00fcks\u00e9gem, hogy az egyens\u00falyban maradjon, \u00e9s ne ess\u00e9k vissza, \u00e9s ha t\u00fal sokat inline-olt\u00e1l - elkezd spillage-t csin\u00e1lni, de v\u00e9g\u00fcl m\u00e9gis el\u00e9rkezik az a pillanat, amikor \u201enincs t\u00f6bb spillage\u201d. Ez egy \u00e9rdekes megfigyel\u00e9s, \u00e9s szinte a semmib\u0151l \u00e9rkezett, nem nyilv\u00e1nval\u00f3, de j\u00f3l megt\u00e9r\u00fclt. Aggressz\u00edv inline-oz\u00e1sba kezdtem, \u00e9s ez olyan helyekre vezetett, ahol a Java \u00e9s a C teljes\u00edtm\u00e9nye p\u00e1rhuzamosan fut. Val\u00f3ban k\u00f6zel \u00e1llnak egym\u00e1shoz \u2013 tudok olyan Java k\u00f3dot \u00edrni, amely jelent\u0151sen gyorsabb, mint a C k\u00f3d, \u00e9s hasonl\u00f3k, de \u00e1tlagosan, a nagy k\u00e9p szempontj\u00e1b\u00f3l, k\u00f6r\u00fclbel\u00fcl hasonl\u00f3ak. Azt hiszem, ennek a r\u00e9sz\u00e9nek k\u00f6sz\u00f6nhet\u0151 az allok\u00e1tor, amely lehet\u0151v\u00e9 teszi sz\u00e1momra, hogy a lehet\u0151 legegyszer\u0171bben inline-oljak. Egyszer\u0171en mindent inline-olok, amit l\u00e1tok. A k\u00e9rd\u00e9s itt az, hogy j\u00f3l m\u0171k\u00f6dik-e az allok\u00e1tor, \u00e9s az eredm\u00e9ny egy \u00e9rtelmesen m\u0171k\u00f6d\u0151 k\u00f3dot ad-e. Ez volt a nagy kih\u00edv\u00e1s: mindezt meg\u00e9rteni, \u00e9s m\u0171k\u00f6d\u00e9sre b\u00edrni.<\/p>\n<p><\/p>\n<h1 id=\"nemnogo-pro-allokaciyu-registrov-i-mnogoyadernost\">Egy kis inform\u00e1ci\u00f3 a regiszterek allok\u00e1ci\u00f3j\u00e1r\u00f3l \u00e9s a t\u00f6bbmagoss\u00e1gr\u00f3l<\/h1>\n<p><\/p>\n<p><strong>Vlagyimir<\/strong>: Az olyan probl\u00e9m\u00e1k, mint a regiszterek allok\u00e1l\u00e1sa, val\u00f3s\u00e1gosan v\u00e9gtelen t\u00e9m\u00e1nak t\u0171nnek. K\u00edv\u00e1ncsi vagyok, volt-e olyan \u00f6tlet, ami \u00edg\u00e9retesnek t\u0171nt, de a gyakorlatban megbukott?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Term\u00e9szetesen! A regiszterek allok\u00e1l\u00e1sa az a ter\u00fclet, ahol az NP-teljes feladat megold\u00e1sa \u00e9rdek\u00e9ben pr\u00f3b\u00e1lsz valamilyen heuristik\u00e1t tal\u00e1lni. Soha nem fogsz tudni t\u00f6k\u00e9letes megold\u00e1st el\u00e9rni, nem igaz? Ez egyszer\u0171en lehetetlen. N\u00e9zd, az Ahead of Time ford\u00edt\u00e1s is rosszul m\u0171k\u00f6dik. Itt \u00e1tlagos esetekr\u0151l van sz\u00f3. A tipikus teljes\u00edtm\u00e9nyr\u0151l, \u00edgy elmehetsz \u00e9s m\u00e9rheted valami olyasmit, amit j\u00f3nak tartasz a tipikus teljes\u00edtm\u00e9ny szempontj\u00e1b\u00f3l \u2013 v\u00e9g\u00fcl is, te dolgozol a fejleszt\u00e9s\u00e9n! A regiszterek allok\u00e1l\u00e1sa teljesen a teljes\u00edtm\u00e9nyr\u0151l sz\u00f3l. Amint megvan az els\u0151 protot\u00edpus, ami m\u0171k\u00f6dik \u00e9s a sz\u00fcks\u00e9ges dolgokat megcsin\u00e1lja, j\u00f6n a teljes\u00edtm\u00e9nnyel val\u00f3 munka. Meg kell tanulnod j\u00f3l m\u00e9rni. Mi\u00e9rt fontos ez? Ha vannak vil\u00e1gos adatok, megn\u00e9zheted a k\u00fcl\u00f6nb\u00f6z\u0151 r\u00e9szeket \u00e9s l\u00e1thatod: aha, itt seg\u00edtett, de ott minden elromlott! Mindenf\u00e9le j\u00f3 \u00f6tlet felmer\u00fcl, hozz\u00e1adsz egy \u00faj heuristik\u00e1t \u00e9s hirtelen minden \u00e1tlagosan kicsit jobban m\u0171k\u00f6dik. Vagy nem m\u0171k\u00f6dik. Rengeteg esetem volt, amikor az \u00f6t sz\u00e1zal\u00e9knyi teljes\u00edtm\u00e9ny\u00e9rt k\u00fczd\u00f6tt\u00fcnk, ami k\u00fcl\u00f6nb\u00f6ztette meg a fejleszt\u00e9s\u00fcnket az el\u0151z\u0151 allok\u00e1tort\u00f3l. \u00c9s minden alkalommal \u00fagy t\u0171nik, hogy itt-ott elnyert\u00fck a csat\u00e1t. Ha j\u00f3 teljes\u00edtm\u00e9ny-elemz\u0151 eszk\u00f6zeid vannak, meg lehet tal\u00e1lni a gyeng\u00e9lked\u0151 \u00f6tleteket \u00e9s meg\u00e9rteni, mi\u00e9rt nem m\u0171k\u00f6dnek. Lehet, hogy \u00e9rdemes mindent \u00fagy hagyni, ahogy van, vagy tal\u00e1n komolyabban bele kell mer\u00fclni a finomhangol\u00e1sba, vagy elmenni \u00e9s megjav\u00edtani valami m\u00e1st. Ez egy eg\u00e9sz csomag! K\u00e9sz\u00edtettem ezt a szuper hackot, de sz\u00fcks\u00e9g van erre, arra \u00e9s arra is \u2013 \u00e9s ezek \u00f6sszegzett kombin\u00e1ci\u00f3ja hoz bizonyos javul\u00e1sokat. Az egyszem\u00e9lyes megold\u00e1sok kudarcra is \u00edt\u00e9lhet\u0151k. Ilyen a teljes\u00edtm\u00e9ny NP-teljes feladat\u00e1n val\u00f3 munk\u00e1lkod\u00e1s term\u00e9szete.<\/p>\n<p><\/p>\n<p><strong>Vlagyimir<\/strong>: \u00dagy t\u0171nik, hogy az olyan dolgok, mint az allok\u00e1torokban a fest\u00e9s \u2013 m\u00e1r megoldott feladatok. Nos, az \u00d6n\u00f6k sz\u00e1m\u00e1ra megoldott, a besz\u00e1mol\u00f3ja alapj\u00e1n, \u00edgy \u00e9rdemes egy\u00e1ltal\u00e1n...<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Ez nem megoldott, ahogyan van. Neked kell \u00abmegoldott\u00e1\u00bb tenned. Vannak neh\u00e9z feladatok, \u00e9s azokat meg kell oldani. Amikor ez megt\u00f6rt\u00e9nt, el\u00e9rkezik az id\u0151 a teljes\u00edtm\u00e9ny jav\u00edt\u00e1s\u00e1ra. Ehhez a munk\u00e1hoz megfelel\u0151en kell viszonyulni \u2013 benchmarkokat kell v\u00e9gezni, metrik\u00e1kat gy\u0171jteni, \u00e9s elmagyar\u00e1zni azokat a helyzeteket, amikor a kor\u00e1bbi verzi\u00f3hoz val\u00f3 visszat\u00e9r\u00e9skor a r\u00e9gi hacked \u00fajra m\u0171k\u00f6dni kezdett (vagy \u00e9ppen ellenkez\u0151leg, meg\u00e1llt). \u00c9s nem szabad visszariadni, am\u00edg valamit el nem \u00e9rsz. Ahogy m\u00e1r mondtam, ha izgalmas \u00f6tletek vannak, amelyek nem m\u0171k\u00f6dtek, de a regiszterek allok\u00e1l\u00e1s\u00e1nak ter\u00fclet\u00e9n a lehet\u0151s\u00e9gek szinte v\u00e9gtelenek. P\u00e9ld\u00e1ul olvashatsz tudom\u00e1nyos publik\u00e1ci\u00f3kat. B\u00e1r mostan\u00e1ban ez a ter\u00fclet sokkal lassabban fejl\u0151dik, \u00e9s vil\u00e1gosabb\u00e1 v\u00e1lt, mint ifj\u00fas\u00e1ga idej\u00e9n. Mindazon\u00e1ltal ezen a ter\u00fcleten v\u00e9gtelen sz\u00e1m\u00fa ember dolgozik, \u00e9s minden \u00f6tletet \u00e9rdemes kipr\u00f3b\u00e1lni, mind v\u00e1rja a maga idej\u00e9t. \u00c9s nem mondhatod, hogy mennyire j\u00f3k, ha nem pr\u00f3b\u00e1lod ki \u0151ket. Mennyire integr\u00e1l\u00f3dnak mindennel a te allok\u00e1torodban, hiszen az allok\u00e1tor sok mindent csin\u00e1l, \u00e9s egyes \u00f6tletek a te konkr\u00e9t allok\u00e1torodban nem m\u0171k\u00f6dnek, m\u00edg egy m\u00e1sik allok\u00e1torban sim\u00e1n. Az allok\u00e1tor f\u0151 gy\u0151zelmi m\u00f3dja, hogy a lass\u00fa dolgokat kiker\u00fcli az alap\u00faton, \u00e9s k\u00e9nyszer\u00edtve osztja sz\u00e9t a lass\u00fa utak hat\u00e1rain. Teh\u00e1t, ha el akarod ind\u00edtani a GC-t, lass\u00fa \u00faton akarsz menni, deoptimaliz\u00e1lni, kiv\u00e9telt dobni, ilyesmi \u2013 tudod, hogy ezek a dolgok viszonylag ritk\u00e1k. \u00c9s val\u00f3ban ritk\u00e1k, ellen\u0151riztem. Tov\u00e1bbi munk\u00e1t v\u00e9gzel, \u00e9s \u00edgy sok korl\u00e1toz\u00e1s elt\u0171nik ezeken a lass\u00fa utakon, de ez nem k\u00fcl\u00f6n\u00f6sebben fontos, mert lass\u00faak, \u00e9s ritk\u00e1n j\u00e1rnak rajtuk. P\u00e9ld\u00e1ul a null pointer \u2013 az sosem fordul el\u0151, igaz? T\u00f6bb utat kell kialak\u00edtani k\u00fcl\u00f6nb\u00f6z\u0151 dolgokhoz, de nem szabad, hogy zavarj\u00e1k az alap\u00fat.\u00a0<\/p>\n<p><\/p>\n<p><strong>Vlagyimir<\/strong>: Mit gondolsz a t\u00f6bbmagos feldolgoz\u00e1sr\u00f3l, amikor egyszerre ezer mag van? Ez hasznos dolog?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: A GPU sikeress\u00e9ge azt mutatja, hogy el\u00e9gg\u00e9 hasznos!<\/p>\n<p><\/p>\n<p><strong>Vlagyimir<\/strong>: Ezek el\u00e9gg\u00e9 specializ\u00e1ltak. Mi a helyzet a \u00e1ltal\u00e1nos c\u00e9l\u00fa processzorokkal?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: Nos, ez volt az Azul \u00fczleti modellje. A v\u00e1lasz m\u00e9g abban az id\u0151ben \u00e9rkezett, amikor az emberek nagyon szerett\u00e9k a kisz\u00e1m\u00edthat\u00f3 teljes\u00edtm\u00e9nyt. Akkoriban el\u00e9g neh\u00e9z volt p\u00e1rhuzamos k\u00f3dot \u00edrni. A H2O k\u00f3dol\u00e1si modell j\u00f3l sk\u00e1l\u00e1zhat\u00f3, de nem egy \u00e1ltal\u00e1nos c\u00e9l\u00fa modell. Csak egy kicsit \u00e1ltal\u00e1nosabb, mint a GPU haszn\u00e1lata eset\u00e9n. Arr\u00f3l besz\u00e9l\u00fcnk, hogy a hasonl\u00f3 dolog fejleszt\u00e9se mennyire bonyolult, vagy hogy a haszn\u00e1lata mennyire neh\u00e9zkes? P\u00e9ld\u00e1ul, egy \u00e9rdekes leck\u00e9t tan\u00edtott nekem az Azul, ami nem nyilv\u00e1nval\u00f3: a kis gyors\u00edt\u00f3t\u00e1rak rendben vannak.\u00a0<\/p>\n<p><\/p>\n<h1 id=\"samyy-bolshoy-chellenzh-v-zhizni\">\u00c9letem legnagyobb kih\u00edv\u00e1sa<\/h1>\n<p><\/p>\n<p><strong>Vlagyimir<\/strong>: Mi a helyzet a nem technikai kih\u00edv\u00e1sokkal?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>: A legnagyobb kih\u00edv\u00e1s az volt, hogy ne legyek\u2026 kedves \u00e9s j\u00f3 az emberekkel. Ennek k\u00f6vetkezt\u00e9ben \u00e1lland\u00f3an rendk\u00edv\u00fcl konfliktusos helyzetekbe ker\u00fcltem. Olyan helyzetekbe, ahol tudtam, hogy minden rosszul megy, de nem tudtam, hogyan l\u00e9pjek tov\u00e1bb a probl\u00e9m\u00e1k megold\u00e1s\u00e1ban, \u00e9s nem tudtam megbirk\u00f3zni vel\u00fck. Sz\u00e1mos \u00e9vtizedes probl\u00e9m\u00e1m emiatt alakult ki. Az, hogy a Jav\u00e1ban l\u00e9teznek C1 \u00e9s C2 ford\u00edt\u00f3k, k\u00f6zvetlen k\u00f6vetkezm\u00e9nye ennek. Az is, hogy a Jav\u00e1ban t\u00edz \u00e9ven kereszt\u00fcl nem volt t\u00f6bbl\u00e9pcs\u0151s ford\u00edt\u00e1s \u2013 szint\u00e9n k\u00f6zvetlen k\u00f6vetkezm\u00e9nye. Nyilv\u00e1nval\u00f3, hogy sz\u00fcks\u00e9g\u00fcnk volt egy ilyen rendszerre, de nem egy\u00e9rtelm\u0171, hogy mi\u00e9rt nem volt. Probl\u00e9m\u00e1im voltak egy m\u00e9rn\u00f6kkel\u2026 vagy m\u00e9rn\u00f6k\u00f6k csoportj\u00e1val. R\u00e9g volt, amikor elkezdtem dolgozni a Sun-n\u00e1l, akkor\u2026 Nos, nemcsak akkor, mindig van v\u00e9lem\u00e9nyem mindenr\u0151l. \u00c9s igaznak tartottam, hogy egyszer\u0171en csak el\u0151 lehet venni ezt az igazs\u00e1got, \u00e9s ny\u00edltan elmondani. F\u0151leg, mivel sokszor megd\u00f6bbent\u0151en igazam volt. Ha neked nem tetszik ez a megk\u00f6zel\u00edt\u00e9s\u2026 k\u00fcl\u00f6n\u00f6sen, ha nyilv\u00e1nval\u00f3an t\u00e9vedsz \u00e9s h\u00fclyes\u00e9get csin\u00e1lsz\u2026 Sz\u00f3val, csak kevesen tudtak toler\u00e1lni egy ilyen form\u00e1t. B\u00e1r voltak, p\u00e9ld\u00e1ul \u00e9n. Az eg\u00e9sz \u00e9letemet meritokratikus alapelvek szerint \u00e9p\u00edtettem fel. Ha megmutatsz nekem valami hib\u00e1sat, azonnal megfordulok, \u00e9s azt mondom: h\u00fclyes\u00e9get mondt\u00e1l. K\u00f6zben persze eln\u00e9z\u00e9st k\u00e9rek, \u00e9s ilyesmi, elismerem az \u00e9rdemeket, ha azok l\u00e9teznek, \u00e9s egy\u00e9b helyes l\u00e9p\u00e9seket teszek. M\u00e1sfel\u0151l, megd\u00f6bbent\u0151en gyakran van igazam. \u00c9s ez nem m\u0171k\u00f6dik t\u00fal j\u00f3l az emberekkel val\u00f3 kapcsolatokban. Nem is pr\u00f3b\u00e1lok kedves lenni, hanem a k\u00e9rd\u00e9st egy\u00e9rtelm\u0171en felvetem. \u201eEz sosem fog m\u0171k\u00f6dni, mert 1, 2 \u00e9s 3.\u201d Erre \u0151k: \u201e\u00d3!\u201d Volt m\u00e1s k\u00f6vetkezm\u00e9nye is, amiket tal\u00e1n jobb lenne kihagyni: p\u00e9ld\u00e1ul a feles\u00e9gemmel val\u00f3 v\u00e1l\u00e1shoz \u00e9s az azt k\u00f6vet\u0151 t\u00edz \u00e9vi depresszi\u00f3hoz vezetett.<\/p>\n<p><\/p>\n<p>A kih\u00edv\u00e1s az emberekkel, azokkal a percepci\u00f3kkal val\u00f3 k\u00fczdelem, hogy mit tehetsz vagy mit nem, hogy mi fontos \u00e9s mi nem. Sok kih\u00edv\u00e1s volt a k\u00f3dol\u00e1si st\u00edlusr\u00f3l. M\u00e9g mindig sok k\u00f3dot \u00edrok, \u00e9s azokban az id\u0151kben lass\u00edtanom kellett, mert t\u00fal sok p\u00e1rhuzamos feladatom volt, \u00e9s rosszul v\u00e9geztem el \u0151ket, ahelyett, hogy egyre f\u00f3kusz\u00e1ltam volna. Visszatekintve, a Java JIT csapat fel\u00e9t \u00edrtam meg, a C2 csapatot. A k\u00f6vetkez\u0151 leggyorsabb k\u00f3dol\u00f3 fele annyira lassan \u00edrt, a k\u00f6vetkez\u0151 pedig m\u00e9g fele annyira lassan, \u00e9s ez eksponenci\u00e1lisan cs\u00f6kkent. A hetedik ember ebben a sorban nagyon, nagyon lass\u00fa volt \u2013 ez mindig \u00edgy van! Sok k\u00f3dot l\u00e1ttam. N\u00e9ztem, ki mit \u00edr, kiv\u00e9tel n\u00e9lk\u00fcl, b\u00e1multam a k\u00f3djukba, mindenkit \u00e1tn\u00e9ztem, \u00e9s m\u00e9g mindig t\u00f6bbet \u00edrtam, mint b\u00e1rmelyik\u00fck. Az emberekkel ez a megk\u00f6zel\u00edt\u00e9s nem nagyon m\u0171k\u00f6dik. N\u00e9h\u00e1nyan nem szeretik ezt. \u00c9s amikor nem tudj\u00e1k kezelni, elkezd\u0151dnek a k\u00fcl\u00f6nf\u00e9le panaszok. P\u00e9ld\u00e1ul egyszer azt mondt\u00e1k nekem, hogy hagyjak fel a k\u00f3d\u00edr\u00e1ssal, mert t\u00fal sok k\u00f3dot \u00edrok, \u00e9s ez vesz\u00e9lyezteti a csapatot, \u00e9s ez sz\u00e1momra viccnek hangzott: haver, ha a csapat t\u00f6bbi tagja elt\u0171nik, \u00e9s \u00e9n tov\u00e1bbra is k\u00f3dot \u00edrok, akkor csak a csapat fel\u00e9t fogod elvesz\u00edteni. M\u00e1sr\u00e9szr\u0151l, ha tov\u00e1bbra is k\u00f3dot \u00edrok, \u00e9s te elvesz\u00edted a csapat fel\u00e9t \u2013 ez nagyon rossz menedzsmentnek hangzik. Ezen sosem gondolkodtam el, sosem besz\u00e9ltem r\u00f3la, de valahol m\u00e9gis a fejemben volt. A tudatom h\u00e1ts\u00f3 zug\u00e1ban az a gondolat keringett: \u201eTi vicceltek velem?\u201d. \u00cdgy teh\u00e1t a legnagyobb probl\u00e9ma \u00e9n voltam \u00e9s az emberekkel val\u00f3 kapcsolatom. Most m\u00e1r sokkal jobban meg\u00e9rtem magam, sok\u00e1ig csapatvezet\u0151 voltam programoz\u00f3k k\u00f6z\u00f6tt, \u00e9s most m\u00e1r egyenesen elmondom az embereknek: tudj\u00e1tok, ilyen vagyok, \u00e9s meg kell birk\u00f3znotok velem \u2013 semmi baj, ha itt \u00e1llok? \u00c9s amikor ezzel megbirk\u00f3ztak, minden m\u0171k\u00f6dni kezdett. Val\u00f3j\u00e1ban nem vagyok sem rossz, sem j\u00f3, nincsenek rossz sz\u00e1nd\u00e9kaim vagy egoista v\u00e1gyaim, ez egyszer\u0171en csak az \u00e9n l\u00e9nyem, \u00e9s valahogy ezzel \u00e9lni kell.<\/p>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Nemr\u00e9giben mindenki a befel\u00e9 figyel\u00e9sr\u0151l besz\u00e9lt, az introvert\u00e1ltak sz\u00e1m\u00e1ra, \u00e9s egy\u00e1ltal\u00e1n a soft skill-ekr\u0151l. Mit lehet err\u0151l mondani?<\/p>\n<p><\/p>\n<p><strong>Cliff<\/strong>Igen, ez egy meg\u00e9rt\u00e9s \u00e9s tanuls\u00e1g volt, amelyet a feles\u00e9gemmel val\u00f3 v\u00e1l\u00e1sb\u00f3l vontam le. Amit a v\u00e1l\u00e1sb\u00f3l lesz\u0171rtem \u2013 az az \u00f6nmagam meg\u00e9rt\u00e9se. \u00cdgy kezdtem el m\u00e1s embereket is meg\u00e9rteni. Meg\u00e9rteni, hogyan m\u0171k\u00f6dik ez az interakci\u00f3. Ez egym\u00e1s ut\u00e1n \u00faj felfedez\u00e9sekhez vezetett. R\u00e1\u00e9bredtem, ki is vagyok \u00e9s mit is k\u00e9pviselek. Amit csin\u00e1lok: vagy az feladaton agg\u00f3dom, vagy elker\u00fcl\u00f6m a konfliktust, vagy valami m\u00e1s \u2013 \u00e9s ez a szint\u0171 \u00f6nismeret val\u00f3ban seg\u00edt kord\u00e1ban tartani magam. Ezt k\u00f6vet\u0151en minden sokkal egyszer\u0171bb\u00e9 v\u00e1lik. Egy dolog, amit nemcsak magamn\u00e1l, hanem m\u00e1s programoz\u00f3kn\u00e1l is felfedeztem \u2013 a k\u00e9ptelens\u00e9g kifejezni a gondolatokat, amikor \u00e9rzelmi stresszben vagyunk. P\u00e9ld\u00e1ul, ott \u00fclsz \u00e9s k\u00f3dolsz, \u00e1raml\u00e1sban vagy, \u00e9s egyszer csak rohan hozz\u00e1d valaki \u00e9s hiszt\u00e9rikusan kiab\u00e1l, hogy valami elromlott, \u00e9s hogy most drasztikus int\u00e9zked\u00e9seket fognak alkalmazni. \u00c9s te nem tudsz egy sz\u00f3t sem mondani, mert \u00e9rzelmi stresszben vagy. Azon tud\u00e1s, amit szereztem, lehet\u0151v\u00e9 teszi, hogy felk\u00e9sz\u00fcljek erre a pillanatra, \u00e1tv\u00e9szeljem azt, \u00e9s \u00e1tt\u00e9rjek a visszavonul\u00e1si tervre, amely ut\u00e1n m\u00e1r lehet valamit tenni. Teh\u00e1t igen, amikor elkezded tudni, hogyan m\u0171k\u00f6dik ez az eg\u00e9sz \u2013 az egy hatalmas \u00e9letv\u00e1ltoztat\u00f3 esem\u00e9ny.\u00a0<br \/>\n\u00c9n magam nem tudtam j\u00f3l megfogalmazni a szavakat, de eml\u00e9keztem a cselekv\u00e9sek sorrendj\u00e9re. A l\u00e9nyeg az, hogy ez a reakci\u00f3 annyira fizikai, mint amennyire verb\u00e1lis, \u00e9s sz\u00fcks\u00e9ged van egy t\u00e9rre. Egy olyan t\u00e9rre, mint a zen filoz\u00f3fi\u00e1ban. Ezt kellene megmagyar\u00e1zni, majd azonnal f\u00e9lre kell \u00e1llni \u2013 tiszt\u00e1n fizikailag f\u00e9lre \u00e1llni. Amikor csendes vagyok szavakban, k\u00e9pes vagyok feldolgozni a helyzetet \u00e9rzelmileg. Ahogy a adrenalin eljut az agyhoz, \u00e1tv\u00e1lt a \u201e\u00fctni vagy futni\u201d \u00fczemm\u00f3dba, m\u00e1r nem tudsz semmit mondani, nem \u2013 most m\u00e1r h\u00fclye vagy, \u00fct\u00e9sre teremtett m\u00e9rn\u00f6k, aki k\u00e9ptelen m\u00e9lt\u00f3 v\u00e1laszt adni vagy legal\u00e1bb meg\u00e1ll\u00edtani a t\u00e1mad\u00e1st, \u00e9s a t\u00e1mad\u00f3 szabadon tud t\u00e1madni \u00fajra \u00e9s \u00fajra. El\u0151sz\u00f6r \u00fajra \u00f6nmagadd\u00e1 kell v\u00e1lni, visszanyerni az ir\u00e1ny\u00edt\u00e1st, kij\u00f6nni a \u201e\u00fctni vagy futni\u201d \u00fczemm\u00f3db\u00f3l. <\/p>\n<p><\/p>\n<p>\u00c9s ehhez sz\u00fcks\u00e9g van egy verb\u00e1lis t\u00e9rre. Csak szabad t\u00e9rre. Ha egy\u00e1ltal\u00e1n besz\u00e9lni akarunk, akkor ezt kimondhatjuk, majd elmehet\u00fcnk \u00e9s val\u00f3j\u00e1ban tal\u00e1lhatunk \u00abteret\u00bb: s\u00e9t\u00e1lhatunk a parkban, bez\u00e1rk\u00f3zhatunk a zuhany alatt \u2013 nem sz\u00e1m\u00edt. A legf\u0151bb, hogy \u00e1tmenetileg lekapcsol\u00f3djunk arr\u00f3l a helyzetr\u0151l. Amint legal\u00e1bb n\u00e9h\u00e1ny m\u00e1sodpercre lekapcsol\u00f3dsz, visszat\u00e9r a kontroll, \u00e9s kezdesz tiszt\u00e1n gondolkodni. \u201eJ\u00f3l van, nem vagyok valami bolond, nem csin\u00e1lok h\u00fclyes\u00e9geket, el\u00e9g hasznos ember vagyok.\u201d Amint siker\u00fclt meggy\u0151zn\u00f6d magadat, itt az id\u0151, hogy l\u00e9pj a k\u00f6vetkez\u0151 szintre: meg\u00e9rteni, mi t\u00f6rt\u00e9nt. T\u00e1mad\u00e1s \u00e9rte, az a t\u00e1mad\u00e1s j\u00f6tt, amire nem sz\u00e1m\u00edtott\u00e1l, ez egy tisz\u00e1talan, aljas csapda volt. Ez rossz. A k\u00f6vetkez\u0151 l\u00e9p\u00e9s \u2013 meg\u00e9rteni, mi\u00e9rt volt sz\u00fcks\u00e9ge a t\u00e1mad\u00f3nak erre. T\u00e9nyleg, mi\u00e9rt? Tal\u00e1n mert \u0151 maga d\u00fch\u00f6s? Mi\u00e9rt d\u00fch\u00f6s? P\u00e9ld\u00e1ul mert \u0151 maga elrontotta \u00e9s nem tudja v\u00e1llalni a felel\u0151ss\u00e9get? Ekk\u00e9ppen kell \u00f3vatosan feldolgozni a helyzetet. De ehhez mozg\u00e1st\u00e9rre van sz\u00fcks\u00e9g, verb\u00e1lis t\u00e9rre. Az els\u0151 l\u00e9p\u00e9s \u2013 megszak\u00edtani a verb\u00e1lis kapcsolatot. Elker\u00fclni a sz\u00f3beli vit\u00e1t. Lemondani r\u00f3la, elmenni, amilyen gyorsan csak lehet. Ha ez egy telefonbesz\u00e9lget\u00e9s \u2013 csak csapd le a telefont \u2013 ez a k\u00e9szs\u00e9g, amit a volt feles\u00e9gemmel val\u00f3 besz\u00e9lget\u00e9sekb\u0151l tanultam. Ha a besz\u00e9lget\u00e9s nem vezet semmi j\u00f3ra, csak mondd, hogy \u201eviszl\u00e1t\u201d \u00e9s tedd le a telefont. A vonal m\u00e1sik v\u00e9g\u00e9n: \u201ebla-bla-bla\u201d, te pedig v\u00e1laszolsz: \u201eaha, szia!\u201d \u00e9s leteszed a telefont. Csak megszak\u00edtod a besz\u00e9lget\u00e9st. \u00d6t perccel k\u00e9s\u0151bb, amikor visszat\u00e9r a j\u00f3zan gondolkod\u00e1s k\u00e9pess\u00e9ge, egy kicsit megnyugszol, lehet\u0151s\u00e9ged ny\u00edlik \u00e1tgondolni, mi is t\u00f6rt\u00e9nt \u00e9s mi lesz a k\u00f6vetkez\u0151 l\u00e9p\u00e9s. \u00c9s elkezdesz megfogalmazni egy \u00e1tgondolt v\u00e1laszt, nem csup\u00e1n reag\u00e1lsz az \u00e9rzelmeidre. Sz\u00e1momra a legfontosabb \u00e1tt\u00f6r\u00e9s az \u00f6nismeretben az volt, hogy \u00e9rzelmi stressz eset\u00e9n nem tudok besz\u00e9lni. Kil\u00e9pni ebb\u0151l az \u00e1llapotb\u00f3l, \u00e1tgondolni \u00e9s megtervezni, hogyan v\u00e1laszoljak \u00e9s kompenz\u00e1ljam a probl\u00e9m\u00e1kat \u2013 ezek a helyes l\u00e9p\u00e9sek, amikor nem tudok besz\u00e9lni. A legegyszer\u0171bb m\u00f3d \u2013 elmenek\u00fclni a helyzett\u0151l, ahol megjelenik az \u00e9rzelmi stressz, \u00e9s egyszer\u0171en megsz\u00fcntetni a r\u00e9szv\u00e9telt ebben a stresszben. Ezt k\u00f6vet\u0151en k\u00e9pess\u00e9 v\u00e1lsz gondolkodni, amikor tudsz gondolkodni, megjelenik a besz\u00e9lget\u00e9s lehet\u0151s\u00e9ge, \u00e9s \u00edgy tov\u00e1bb.<\/p>\n<p><\/p>\n<p>A b\u00edr\u00f3s\u00e1gon az ellenf\u00e9l \u00fcgyv\u00e9dje pr\u00f3b\u00e1lja ezt veled csin\u00e1lni - most m\u00e1r vil\u00e1gos, mi\u00e9rt. Mert k\u00e9pes arra, hogy annyira elnyomjon, hogy m\u00e9g a nevedet sem tudod kiejteni p\u00e9ld\u00e1ul. A legszorosabb \u00e9rtelemben nem tudsz besz\u00e9lni. Ha ez veled t\u00f6rt\u00e9nik, \u00e9s tudod, hogy olyan helyre ker\u00fclsz, ahol sz\u00f3beli csat\u00e1k folytat\u00f3dnak, mint a b\u00edr\u00f3s\u00e1g, \u00e9rdemes elj\u00f6nni a saj\u00e1t \u00fcgyv\u00e9ddel. Az \u00fcgyv\u00e9d megv\u00e9di t\u00e9ged, \u00e9s megakad\u00e1lyozza a sz\u00f3beli t\u00e1mad\u00e1st, \u00e9s mindezt teljesen t\u00f6rv\u00e9nyes \u00faton teszi, visszaadva az elveszett zen\u00e9t. P\u00e9ld\u00e1ul nekem p\u00e1r alkalommal sz\u00fcks\u00e9gem volt csal\u00e1ddal besz\u00e9lni, a b\u00edr\u00f3 el\u00e9gg\u00e9 bar\u00e1ts\u00e1gosan viszonyult, de az ellenf\u00e9l \u00fcgyv\u00e9dje kiab\u00e1lt \u00e9s kiab\u00e1lt velem, alig tudtam beleavatkozni. Ilyen esetekben sz\u00e1momra a legjobban a k\u00f6zvet\u00edt\u0151 haszn\u00e1lata m\u0171k\u00f6dik. A k\u00f6zvet\u00edt\u0151 megsz\u00fcnteti ezt a folyamatos nyom\u00e1st, amely r\u00e1d nehezedik, \u00edgy \u00fajra megtal\u00e1lod a sz\u00fcks\u00e9ges zen\u00e9det, \u00e9s ezzel egy\u00fctt visszat\u00e9r a besz\u00e9dk\u00e9pess\u00e9ged. Ez egy eg\u00e9sz tudom\u00e1ny\u00e1g, amelyben sok mindent meg kell tanulni, sok mindent fel kell fedezni magadban, \u00e9s mindez magas szint\u0171 strat\u00e9giai d\u00f6nt\u00e9sekk\u00e9 alakul \u00e1t, amelyek k\u00fcl\u00f6nb\u00f6znek k\u00fcl\u00f6nb\u00f6z\u0151 emberek eset\u00e9ben. Vannak, akiknek nincsenek a fenti probl\u00e9m\u00e1i, ez \u00e1ltal\u00e1ban nem jellemz\u0151 azokra, akik szakmai szinten foglalkoznak \u00e9rt\u00e9kes\u00edt\u00e9ssel. Mindazok az emberek, akik a szavakkal keresnek p\u00e9nzt - ismert \u00e9nekesek, k\u00f6lt\u0151k, vall\u00e1si vezet\u0151k \u00e9s politikusok, mindig tudnak mit mondani. Nincs ilyen probl\u00e9m\u00e1juk, nekem viszont van.<\/p>\n<p><\/p>\n<p><strong>Andrej<\/strong>: Ez v\u00e1ratlan volt. Remek, m\u00e1r el\u00e9g sokat besz\u00e9lt\u00fcnk, \u00e9s ideje befejezni ezt az interj\u00fat. Felt\u00e9tlen\u00fcl tal\u00e1lkozunk a konferenci\u00e1n, \u00e9s folytathatjuk a p\u00e1rbesz\u00e9det. Tal\u00e1lkozzunk a Hydr\u00e1n!<\/p>\n<p><\/p>\n<blockquote><p>A kommunik\u00e1ci\u00f3 folytat\u00e1sa Cliff-fel a Hydra 2019 konferenci\u00e1n lehets\u00e9ges lesz, amely 2019. j\u00falius 11-12-\u00e9n ker\u00fcl megrendez\u00e9sre Szentp\u00e9terv\u00e1ron. \u0150 el\u0151ad\u00e1ssal \u00e9rkezik, <noindex><a rel=\"nofollow\" href=\"https:\/\/hydraconf.com\/2019\/talks\/2jix5mst7iduyp9linqhfj\/?utm_source=habr&amp;utm_medium=45871\">\u201eAz Azul Hardveres Tranzakci\u00f3s Mem\u00f3ria \u00e9lm\u00e9nye\u201d<\/a><\/noindex>. A jegyek megv\u00e1s\u00e1rolhat\u00f3k <noindex><a rel=\"nofollow\" href=\"https:\/\/hydraconf.ru\/?utm_source=habr&amp;utm_medium=458718\">a hivatalos weboldalon.<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/jugru\/blog\/458718\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u043b\u0438\u0444\u0444 \u041a\u043b\u0438\u043a \u2014 CTO \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Cratus (IoT \u0441\u0435\u043d\u0441\u043e\u0440\u044b \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432), \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438 \u0441\u043e\u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0442\u0430\u0440\u0442\u0430\u043f\u043e\u0432 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f Rocket Realtime School, Neurensic \u0438 H2O.ai) \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c\u0438 \u044d\u043a\u0437\u0438\u0442\u0430\u043c\u0438. \u041a\u043b\u0438\u0444\u0444 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 15 \u043b\u0435\u0442 (Pascal \u0434\u043b\u044f TRS Z-80)! \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430\u0434 \u04212 \u0432 Java (the Sea of Nodes IR). \u042d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043a\u0430\u0437\u0430\u043b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35851","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u043b\u0438\u0444\u0444 \u041a\u043b\u0438\u043a \u2014.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u041a\u043b\u0438\u0444\u0444\u043e\u043c \u041a\u043b\u0438\u043a\u043e\u043c \u2014 \u043e\u0442\u0446\u043e\u043c JIT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 Java | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u043b\u0438\u0444\u0444 \u041a\u043b\u0438\u043a \u2014.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:07:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:07:03+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Nagyszer\u0171 interj\u00fa Cliff Click-kel - a Java JIT-kompil\u00e1ci\u00f3 atyj\u00e1val | ProHoster","description":"Cliff Click -","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u041a\u043b\u0438\u0444\u0444\u043e\u043c \u041a\u043b\u0438\u043a\u043e\u043c \u2014 \u043e\u0442\u0446\u043e\u043c JIT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 Java | ProHoster","og:description":"\u041a\u043b\u0438\u0444\u0444 \u041a\u043b\u0438\u043a \u2014.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:07:03+00:00","article:modified_time":"2019-10-31T19:07:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35851","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 01:01:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:55:25","updated":"2026-01-22 01:01:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/35851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=35851"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/35851\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=35851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=35851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=35851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}