{"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\/sq\/blog\/administrirovanie\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java","title":{"rendered":"Intervista e madhe me Cliff Click \u2014 babai i JIT-kompilimit n\u00eb Java","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Intervista e madhe me Cliff Click \u2014 babai i JIT-kompilimit n\u00eb Java\" src=\"\/wp-content\/uploads\/2019\/07\/9ea9740ef74c0ae14d334482af115222.png\" style=\"display:block;margin: 0 auto;\" \/><strong>Cliff Click<\/strong> \u2014 CTO i Cratus (sensor\u00ebt IoT p\u00ebr p\u00ebrmir\u00ebsimin e proceseve), themelues dhe bashk\u00ebthemelues i disa startupeve (p\u00ebrfshir\u00eb Rocket Realtime School, Neurensic dhe H2O.ai) me disa dalje t\u00eb suksesshme. Cliff shkroi kompilatorin e tij t\u00eb par\u00eb n\u00eb mosh\u00ebn 15 vje\u00e7are (Pascal p\u00ebr TRS Z-80)! Ai \u00ebsht\u00eb m\u00eb i njohur p\u00ebr pun\u00ebn mbi C2 n\u00eb Java (the Sea of Nodes IR). Ky kompilator i tregoi bot\u00ebs se JIT mund t\u00eb prodhoj\u00eb kod t\u00eb kualitetit, q\u00eb ishte nj\u00eb nga faktor\u00ebt q\u00eb \u00e7oi n\u00eb zhvillimin e Java si nj\u00eb nga platforma kryesore t\u00eb programimit moderne. M\u00eb pas, Cliff ndihmoi Azul Systems t\u00eb nd\u00ebrtoj\u00eb nj\u00eb mainframe me 864 b\u00ebrthama me softuer n\u00eb Java t\u00eb past\u00ebr, q\u00eb mb\u00ebshteste pauzat GC mbi nj\u00eb heap 500-giga n\u00eb rreth 10 milisekonda. N\u00eb p\u00ebrgjith\u00ebsi, Cliff ka punuar n\u00eb t\u00eb gjitha aspektet e JVM.<br clear=\"all\"><br \/>\n\u00a0<br \/>\nKy post \u00ebsht\u00eb nj\u00eb intervist\u00eb e gjer\u00eb me Cliff. Do t\u00eb flasim p\u00ebr temat n\u00eb vijim:<\/p>\n<p><\/p>\n<ul>\n<li>Kalimi te optimizimet e nivelit t\u00eb ul\u00ebt<\/li>\n<li>Si t\u00eb b\u00ebni nj\u00eb ristrukturim t\u00eb madh<\/li>\n<li>Modeli i kostos<\/li>\n<li>M\u00ebsimi i optimizimeve t\u00eb nivelit t\u00eb ul\u00ebt<\/li>\n<li>Shembuj praktik\u00eb p\u00ebr p\u00ebrmir\u00ebsimin e performanc\u00ebs<\/li>\n<li>Pse t\u00eb krijoni nj\u00eb gjuh\u00eb programimi tuaj\u00ebn<\/li>\n<li>Karriera e inxhinierit t\u00eb performanc\u00ebs<\/li>\n<li>Sfidat teknike<\/li>\n<li>Pak p\u00ebr alokimin e regjistrave dhe shum\u00ebb\u00ebrthamerin\u00eb<\/li>\n<li>Sfidat m\u00eb t\u00eb m\u00ebdha n\u00eb jet\u00ebn tuaj<\/li>\n<\/ul>\n<p><\/p>\n<p>Interviste me:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Andrei Satarin<\/strong> nga Amazon Web Services. N\u00eb karrier\u00ebn e tij, ai ka punuar n\u00eb projekte t\u00eb ndryshme: ka testuar nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb shp\u00ebrndar\u00eb NewSQL n\u00eb Yandex, nj\u00eb sistem t\u00eb zbulimit n\u00eb re n\u00eb Laboratorin Kaspersky, nj\u00eb loj\u00eb shum\u00eblojt\u00ebshe n\u00eb Mail.ru dhe nj\u00eb sh\u00ebrbim llogarit\u00ebs t\u00eb \u00e7mimeve valutore n\u00eb Deutsche Bank. Ka interesa n\u00eb testimin e sistemeve t\u00eb m\u00ebdha backend dhe t\u00eb shp\u00ebrndara.<\/li>\n<li><strong>Vladimir Sitnikov<\/strong> nga Netcracker. Ka dhjet\u00eb vjet q\u00eb punon n\u00eb performanc\u00ebn dhe shkall\u00ebzimin e NetCracker OS \u2014 software q\u00eb p\u00ebrdoret nga operator\u00ebt e komunikimit p\u00ebr automatizimin e proceseve t\u00eb menaxhimit t\u00eb rrjetit dhe pajisjeve t\u00eb rrjetit. Ka interesa mbi performanc\u00ebn e Java dhe Oracle Database. Autori i m\u00eb shum\u00eb se dhjet\u00eb p\u00ebrmir\u00ebsimeve t\u00eb performanc\u00ebs n\u00eb drejtuesin zyrtar t\u00eb PostgreSQL JDBC.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"perehod-k-nizkourovnevym-optimizaciyam\">Kalimi te optimizimet e nivelit t\u00eb ul\u00ebt<\/h1>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Ju jeni nj\u00eb person i njohur n\u00eb bot\u00ebn e JIT-kompilimit, n\u00eb Java dhe pun\u00ebn mbi performanc\u00ebn n\u00eb p\u00ebrgjith\u00ebsi, apo jo?\u00a0<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Le t\u00eb fillojm\u00eb me pyetje t\u00eb p\u00ebrgjithshme mbi pun\u00ebn n\u00eb performanc\u00eb. \u00c7far\u00eb mendoni p\u00ebr zgjedhjen midis optimizimeve t\u00eb nivelit t\u00eb lart\u00eb dhe atyre t\u00eb nivelit t\u00eb ul\u00ebt si\u00e7 \u00ebsht\u00eb puna n\u00eb nivelin e CPU?<\/p>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Po, k\u00ebtu \u00ebsht\u00eb e thjesht\u00eb. Kodi m\u00eb i shpejt\u00eb \u00ebsht\u00eb ai q\u00eb asnj\u00ebher\u00eb nuk ekzekutohet. Prandaj, gjithmon\u00eb duhet t\u00eb filloni nga nj\u00eb nivel i lart\u00eb, t\u00eb punoni mbi algoritmet. Nj\u00eb O-notacion m\u00eb i mir\u00eb do t\u00eb tejkaloj\u00eb nj\u00eb O-notacion m\u00eb t\u00eb keq, p\u00ebrve\u00e7 n\u00ebse nd\u00ebrhyrin ndonj\u00ebher\u00eb konstanta t\u00eb m\u00ebdha. \u00c7\u00ebshtjet e nivelit t\u00eb ul\u00ebt vijn\u00eb n\u00eb fund. Zakonisht, n\u00ebse keni optimizuar mjaftuesh\u00ebm pjes\u00ebn tjet\u00ebr t\u00eb stakut dhe ndon\u00ebse ka di\u00e7ka interesante \u2014 ajo \u00ebsht\u00eb niveli i ul\u00ebt. Por si t\u00eb filloni nga nj\u00eb nivel i lart\u00eb? Si ta dini q\u00eb keni b\u00ebr\u00eb mjaft pun\u00eb n\u00eb nivelin e lart\u00eb? Epo\u2026 nuk ka receta t\u00eb gatshme. Duhet t\u00eb kuptoni problemin, t\u00eb vendosni se \u00e7far\u00eb do t\u00eb b\u00ebni (p\u00ebr t\u00eb mos b\u00ebr\u00eb hapa t\u00eb padobish\u00ebm m\u00eb pas), dhe at\u00ebher\u00eb mund t\u00eb nxirrni profiler-in q\u00eb mund t\u00eb thot\u00eb di\u00e7ka t\u00eb dobishme. N\u00eb nj\u00eb moment, ju vet\u00eb kuptoni q\u00eb keni hequr elementet e panevojshme dhe ka ardhur koha t\u00eb merremi me optimizimin e nivelit t\u00eb ul\u00ebt. Kjo, padyshim, \u00ebsht\u00eb nj\u00eb lloj arti t\u00eb ve\u00e7ant\u00eb. Nj\u00eb mori njer\u00ebzish b\u00ebn gj\u00ebra t\u00eb panevojshme, por l\u00ebvizin aq shpejt saq\u00eb nuk kan\u00eb koh\u00eb t\u00eb mendojn\u00eb p\u00ebr performanc\u00ebn. Por kjo ndodh deri n\u00eb momentin kur ndonj\u00eb \u00e7\u00ebshtje dalin n\u00eb pah. Zakonisht 99% e koh\u00ebs askujt nuk i intereson se \u00e7far\u00eb po b\u00ebj, deri n\u00eb momentin kur nj\u00eb gj\u00eb e r\u00ebnd\u00ebsishme doli n\u00eb rrug\u00ebn kritike. At\u00ebher\u00eb, t\u00eb gjith\u00eb fillojn\u00eb t\u00eb pyesin p\u00ebse gjith\u00e7ka nuk ka funksionuar perfekt nga fillimi. N\u00eb p\u00ebrgjith\u00ebsi, gjithmon\u00eb ka di\u00e7ka p\u00ebr t\u00eb p\u00ebrmir\u00ebsuar n\u00eb performanc\u00eb. Por 99% e koh\u00ebs nuk keni indikacione! Ju thjesht p\u00ebrpiqeni t\u00eb b\u00ebni di\u00e7ka t\u00eb funksionoj\u00eb dhe gjat\u00eb k\u00ebsaj arrini t\u00eb kuptoni se \u00e7far\u00eb \u00ebsht\u00eb e r\u00ebnd\u00ebsishme. Kurr\u00eb nuk mund t\u00eb dini paraprakisht se cila pjes\u00eb duhet t\u00eb jet\u00eb perfekte, prandaj zhvillimi i p\u00ebrsosur n\u00eb \u00e7do aspekt \u00ebsht\u00eb e pamundur, dhe ashtu nuk e b\u00ebni. Gjithmon\u00eb ka shum\u00eb gj\u00ebra p\u00ebr t\u00eb riparuar \u2014 dhe kjo \u00ebsht\u00eb krejt normale.<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: K\u00ebtu gjith\u00e7ka \u00ebsht\u00eb e thjesht\u00eb. Kodi m\u00eb i shpejt\u00eb \u00ebsht\u00eb ai, i cili kurr\u00eb nuk ekzekutohet. Prandaj, gjithmon\u00eb duhet t\u00eb filloni nga nj\u00eb nivel i lart\u00eb, t\u00eb punoni mbi algoritmet. Nj\u00eb nota O m\u00eb e mir\u00eb do ta mposht\u00eb nj\u00eb nota O m\u00eb t\u00eb keqe, p\u00ebrve\u00e7 n\u00ebse nd\u00ebrhyjn\u00eb disa konstanta mjaft t\u00eb m\u00ebdha. Gj\u00ebrat me nivel t\u00eb ul\u00ebt shkojn\u00eb n\u00eb fund. Zakonisht, n\u00ebse e keni optimizuar gjith\u00eb stack-un e mbetur mjaft mir\u00eb dhe ka ende di\u00e7ka interesante \u2013 ajo \u00ebsht\u00eb niveli i ul\u00ebt. Por si t\u00eb filloni nga nj\u00eb nivel i lart\u00eb? Si t\u00eb dini se keni kryer mjaft pun\u00eb n\u00eb nivel t\u00eb lart\u00eb? Epo... ashtu. Nuk ka receta t\u00eb gatshme. Duhet t\u00eb kuptoni problemin, t\u00eb vendosni se \u00e7far\u00eb keni nd\u00ebrmend t\u00eb b\u00ebni (p\u00ebr t\u00eb mos b\u00ebr\u00eb hapa t\u00eb panevojsh\u00ebm m\u00eb von\u00eb) dhe pastaj mund t\u00eb nisni profiler-in, i cili mund t\u00eb thot\u00eb di\u00e7ka t\u00eb dobishme. N\u00eb nj\u00eb moment, ju vet\u00eb kuptoni se jeni liruar nga gj\u00ebrat e panevojshme dhe ka ardhur koha p\u00ebr t\u00eb punuar n\u00eb optimizimin e nivelit t\u00eb ul\u00ebt. Kjo \u00ebsht\u00eb, pa dyshim, nj\u00eb lloj artistike e ve\u00e7ant\u00eb. Nj\u00eb grumbull njer\u00ebzish b\u00ebjn\u00eb gj\u00ebra t\u00eb panevojshme, por l\u00ebvizin aq shpejt sa nuk kan\u00eb koh\u00eb t\u00eb merren me performanc\u00ebn. Por kjo \u00ebsht\u00eb derisa \u00e7\u00ebshtja b\u00ebhet urgjente. Zakonisht, 99% t\u00eb koh\u00ebs askujt nuk i intereson se \u00e7far\u00eb po b\u00ebj, deri n\u00eb momentin kur di\u00e7ka e r\u00ebnd\u00ebsishme del n\u00eb rrug\u00ebn kritike, n\u00eb t\u00eb cil\u00ebn dikujt i intereson. Dhe at\u00ebher\u00eb t\u00eb gjith\u00eb fillojn\u00eb t\u00eb t\u00eb ngacmojn\u00eb p\u00ebrse n\u00eb fillim nuk ka punuar perfekt. N\u00eb p\u00ebrgjith\u00ebsi, gjithmon\u00eb ka di\u00e7ka p\u00ebr t\u00eb p\u00ebrmir\u00ebsuar n\u00eb performanc\u00eb. Por 99% t\u00eb koh\u00ebs nuk keni asnj\u00eb pigment! Thjesht po p\u00ebrpiqeni t\u00eb b\u00ebni di\u00e7ka t\u00eb funksionoj\u00eb dhe gjat\u00eb k\u00ebsaj kuptoni se \u00e7far\u00eb \u00ebsht\u00eb e r\u00ebnd\u00ebsishme. Kurr\u00eb nuk mund t\u00eb dini paraprakisht se ky cop\u00eb \u00ebsht\u00eb ai q\u00eb duhet ta b\u00ebni perfektin, prandaj, n\u00eb thelb, duhet t\u00eb jeni perfekt n\u00eb t\u00eb gjitha. Dhe kjo \u00ebsht\u00eb e pamundur dhe nuk e b\u00ebni ashtu. Gjithmon\u00eb ka shum\u00eb gj\u00ebra p\u00ebr t\u00eb riparuar \u2013 dhe kjo \u00ebsht\u00eb krejt normale.<\/p>\n<p><\/p>\n<h1 id=\"kak-delat-bolshoy-refaktoring\">Si t\u00eb b\u00ebni nj\u00eb ristrukturim t\u00eb madh<\/h1>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Si punoni mbi performanc\u00ebn? A \u00ebsht\u00eb kjo nj\u00eb problem i p\u00ebrgjithsh\u00ebm. P\u00ebr shembull, a ju ka ndodhur ndonj\u00ebher\u00eb t\u00eb punoni mbi probleme q\u00eb lindin nga nd\u00ebrveprimi i shum\u00eb funksionaliteteve ekzistuese?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Po p\u00ebrpiqem ta evitoj k\u00ebt\u00eb. N\u00ebse e di q\u00eb performanca do t\u00eb jet\u00eb nj\u00eb problem, mendoj para se t\u00eb filloj t\u00eb kodoj, sidomos p\u00ebr strukturat e t\u00eb dh\u00ebnave. Por shpesh zbulojm\u00eb gjith\u00eb k\u00ebt\u00eb shum\u00eb m\u00eb von\u00eb. At\u00ebher\u00eb detyrohemi t\u00eb marrim masa drastike dhe t\u00eb b\u00ebjm\u00eb at\u00eb q\u00eb e quaj \u00abrishkruaj dhe sundo\u00bb: duhet t\u00eb kapim nj\u00eb cop\u00eb t\u00eb mjaftueshme. Nj\u00eb pjes\u00eb e kodit do t\u00eb duhet t\u00eb rishkruhet p\u00ebr shkak t\u00eb problemeve me performanc\u00ebn ose p\u00ebr ndonj\u00eb arsye tjet\u00ebr. \u00c7far\u00ebdo arsyeje p\u00ebr rishkrimin e kodit q\u00eb t\u00eb ndodh\u00eb, \u00ebsht\u00eb gjithmon\u00eb m\u00eb mir\u00eb t\u00eb rishkruash nj\u00eb cop\u00eb m\u00eb t\u00eb madhe sesa nj\u00eb cop\u00eb m\u00eb t\u00eb vog\u00ebl. N\u00eb k\u00ebt\u00eb moment, t\u00eb gjith\u00eb fillojn\u00eb t\u00eb dridhen nga frika: \u00abo zot, nuk mund ta prek\u00ebsh kaq shum\u00eb kod!\u00bb Por, n\u00eb fakt, ky qasje funksionon shum\u00eb m\u00eb mir\u00eb. Duhet menj\u00ebher\u00eb t\u00eb merresh me nj\u00eb problem t\u00eb madh, ta p\u00ebrshkruash rreth tij nj\u00eb rreth t\u00eb madh dhe t\u00eb thuash: gjith\u00e7ka brenda rrethit, un\u00eb do ta rishkruaj. Kufiri \u00ebsht\u00eb shum\u00eb m\u00eb i vog\u00ebl se ai p\u00ebrmbajtje brenda tij q\u00eb duhet t\u00eb z\u00ebvend\u00ebsohet. Dhe n\u00ebse kjo p\u00ebrshkrim i kufijve e b\u00ebn pun\u00ebn brenda ideale \u2013 ke duar t\u00eb lira, b\u00ebj \u00e7far\u00eb t\u00eb duash. Sapo e kupton problemin, procesi i rishkrimit b\u00ebhet shum\u00eb m\u00eb i leht\u00eb, prandaj merre nj\u00eb cop\u00eb t\u00eb madhe!<br \/>\nN\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, kur b\u00ebn rishkrimin me nj\u00eb cop\u00eb t\u00eb madhe dhe e kupton se performanca do t\u00eb b\u00ebhet nj\u00eb problem, mund t\u00eb fillosh menj\u00ebher\u00eb t\u00eb shqet\u00ebsohesh p\u00ebr t\u00eb. Zakonisht, kjo kthehet n\u00eb gj\u00ebra t\u00eb thjeshta si \u00abmos kopjo t\u00eb dh\u00ebnat, menaxho t\u00eb dh\u00ebnat sa m\u00eb thjesht\u00eb, b\u00ebji m\u00eb t\u00eb vogla\u00bb. N\u00eb rishkrimet e m\u00ebdha, ka m\u00ebnyra standarde p\u00ebr t\u00eb p\u00ebrmir\u00ebsuar performanc\u00ebn. Dhe ato pothuajse gjithmon\u00eb qendrojn\u00eb rreth t\u00eb dh\u00ebnave.<\/p>\n<p><\/p>\n<h1 id=\"model-stoimosti\">Modeli i kostos<\/h1>\n<p><\/p>\n<p><strong>Andrei<\/strong>: N\u00eb nj\u00eb nga podkaster\u00ebt, flisnit p\u00ebr modelet e kostos n\u00eb kontekstin e performanc\u00ebs. Mund t\u00eb shpjegoni se \u00e7far\u00eb n\u00ebnkuptohej me k\u00ebt\u00eb?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Sigurisht. Jam lindur n\u00eb epok\u00ebn kur performanca e procesorit ishte ekstremisht e r\u00ebnd\u00ebsishme. Dhe kjo epok\u00eb po kthehet p\u00ebrs\u00ebri \u2013 fati nuk \u00ebsht\u00eb pa ironi. Fillova t\u00eb jetoj n\u00eb koh\u00ebt e makinave me tet\u00eb bit\u00eb, kompjuteri im i par\u00eb punonte me 256 byte. Pik\u00ebrisht byte. Gjith\u00e7ka ishte shum\u00eb e vog\u00ebl. Duhej t\u00eb num\u00ebroja instrukcionet dhe sapo filluam t\u00eb ngritemi n\u00eb shkall\u00ebn e gjuh\u00ebve t\u00eb programimit, gjuh\u00ebt merrnin p\u00ebrsip\u00ebr gjithnj\u00eb e m\u00eb shum\u00eb. Ishte Assembler, pastaj Basic, pastaj C, dhe C merrte p\u00ebrsip\u00ebr pun\u00ebn me shum\u00eb detaje, si shp\u00ebrndarjen e regjistrave dhe zgjidhjen e instrukcioneve. Por aty ishte relativisht e qart\u00eb dhe n\u00ebse krijoja nj\u00eb tregues p\u00ebr nj\u00eb instanc\u00eb t\u00eb ndryshores, do t\u00eb merrja nj\u00eb ngarkes\u00eb, dhe kjo instrukcion kishte nj\u00eb kosto t\u00eb njohur. Hardueri jep nj\u00eb num\u00ebr t\u00eb njohur t\u00eb cikleve makinerike, k\u00ebshtu q\u00eb shpejt\u00ebsia e ekzekutimit t\u00eb gj\u00ebrave t\u00eb ndryshme mund t\u00eb llogaritet thjesht duke mbledhur t\u00eb gjitha instrukcionet q\u00eb ke p\u00ebr t\u00eb ekzekutuar. \u00c7do krahasim\/testim\/degjim\/thirrje\/ngarkes\u00eb\/ruajtje mund t\u00eb ishte i mbledhur dhe t\u00eb thuash: ja sa \u00ebsht\u00eb koha e ekzekutimit. Nd\u00ebrsa merresh me p\u00ebrmir\u00ebsimin e performanc\u00ebs, sigurisht q\u00eb do t\u00eb v\u00ebreni se numrat p\u00ebrputhen me ciklet e vogla t\u00eb nxehta.\u00a0<br \/>\nPor sapo kalon n\u00eb Java, Python dhe gj\u00ebra t\u00eb ngjashme, shum\u00eb shpejt largohesh nga hardueri me nivel t\u00eb ul\u00ebt. \u00c7far\u00eb \u00ebsht\u00eb kostoja e thirrjes s\u00eb getter-it n\u00eb Java? N\u00ebse JIT n\u00eb HotSpot e ka b\u00ebr\u00eb gjith\u00e7ka si\u00e7 duhet <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.openjdk.java.net\/display\/HotSpot\/Inlining\">t\u00eb inlinuar<\/a><\/noindex>, do t\u00eb jet\u00eb ngarkes\u00eb, por, n\u00ebse ai nuk e b\u00ebri k\u00ebt\u00eb \u2013 do t\u00eb jet\u00eb nj\u00eb thirrje funksioni. Duke qen\u00eb se thirrja ndodhet n\u00eb ciklin e nxeht\u00eb, do t\u00eb anuloj\u00eb t\u00eb gjitha optimizimet e tjera n\u00eb k\u00ebt\u00eb cik\u00ebl. Prandaj kostoja reale do t\u00eb jet\u00eb shum\u00eb m\u00eb e madhe. Dhe menj\u00ebher\u00eb humb aft\u00ebsin\u00eb p\u00ebr t\u00eb par\u00eb nj\u00eb cop\u00eb kod dhe t\u00eb kuptosh se sa ia vlen ta ekzekutojm\u00eb at\u00eb n\u00eb terma t\u00eb frekuenc\u00ebs s\u00eb ciklit t\u00eb procesorit, memories p\u00ebrdorur dhe caches. T\u00eb gjitha k\u00ebto b\u00ebhen interesant vet\u00ebm n\u00ebse n\u00eb t\u00eb v\u00ebrtet\u00eb thellohesh n\u00eb performanc\u00eb.<br \/>\nTani jemi n\u00eb nj\u00eb situat\u00eb ku shpejt\u00ebsit\u00eb e procesor\u00ebve nuk jan\u00eb rritur pothuajse p\u00ebr nj\u00eb dekad\u00eb. Koh\u00ebt e vjetra po kthehen! Nuk mund t\u00eb pres\u00ebsh m\u00eb nj\u00eb performanc\u00eb t\u00eb mir\u00eb me nj\u00eb rrjedh\u00eb. Por n\u00ebse ndonj\u00ebher\u00eb merresh me llogaritjet paralel \u2013 kjo \u00ebsht\u00eb jasht\u00ebzakonisht e komplikuar, t\u00eb gjith\u00eb t\u00eb shikojn\u00eb si n\u00eb James Bond. Shtesat dhjet\u00ebfish k\u00ebtu zakonisht ndodhin n\u00eb ato vende ku dikush e ka humbur di\u00e7ka. Paraleliteti k\u00ebrkon shum\u00eb pun\u00eb. P\u00ebr t\u00eb marr\u00eb at\u00eb shtes\u00ebn dhjet\u00ebfish, duhet t\u00eb kuptosh modelin e kostos. \u00c7far\u00eb dhe sa kushton. Dhe p\u00ebr k\u00ebt\u00eb, duhet t\u00eb kuptosh se si gjuha vendoset mbi pajisjen n\u00eb nivel t\u00eb ul\u00ebt.<br \/>\nMartin Thompson zgjodhi nj\u00eb fjal\u00eb t\u00eb shk\u00eblqyer p\u00ebr blogun e tij <noindex><a rel=\"nofollow\" href=\"https:\/\/mechanical-sympathy.blogspot.com\/\">Simpatia Mekanike<\/a><\/noindex>! \u00cbsht\u00eb e nevojshme t\u00eb kuptohet se \u00e7far\u00eb do t\u00eb b\u00ebj\u00eb hardueri, si do ta b\u00ebj\u00eb at\u00eb dhe pse e b\u00ebn at\u00eb q\u00eb b\u00ebn. Duke e p\u00ebrdorur k\u00ebt\u00eb, \u00ebsht\u00eb mjaft e thjesht\u00eb t\u00eb filloni t\u00eb p\u00ebrllogaritni instrukcionet dhe t\u00eb zbuloni se ku shkon koha e ekzekutimit. N\u00ebse nuk keni p\u00ebrgatitjen e duhur, thjesht po k\u00ebrkoni nj\u00eb mace t\u00eb zez\u00eb n\u00eb nj\u00eb dhom\u00eb t\u00eb err\u00ebt. Un\u00eb vazhdimisht shoh njer\u00ebz q\u00eb optimizojn\u00eb performanc\u00ebn, t\u00eb cil\u00ebt nuk kan\u00eb asnj\u00eb ide se \u00e7far\u00eb po b\u00ebjn\u00eb. Ata vuajn\u00eb shum\u00eb dhe nuk p\u00ebrparojn\u00eb shum\u00eb. Dhe kur un\u00eb marr t\u00eb nj\u00ebjtin cop\u00eb kodi, i jap disa hile t\u00eb vogla dhe arrij nj\u00eb rritje pes\u00ebfish ose dhjet\u00ebfish, ata thon\u00eb: po, nuk \u00ebsht\u00eb e drejt\u00eb, ne e dinim se ishe m\u00eb i mir\u00eb. \u00cbsht\u00eb befasuese. P\u00ebr \u00e7far\u00eb po flas\u2026 modeli i kostos \u2013 \u00ebsht\u00eb p\u00ebr at\u00eb se \u00e7far\u00eb kodi shkruani dhe sa shpejt punon n\u00eb p\u00ebrgjith\u00ebsi.<\/p>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Dhe si t\u00eb mbash nj\u00eb volum t\u00eb till\u00eb n\u00eb mendje? A arrihet kjo p\u00ebrmes nj\u00eb sasi t\u00eb madhe p\u00ebrvoje, apo? Ku mund t\u00eb fitohet nj\u00eb p\u00ebrvoj\u00eb e till\u00eb?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Epo, p\u00ebrvoja ime nuk erdhi n\u00eb nj\u00eb rrug\u00eb t\u00eb leht\u00eb. Kam programuar n\u00eb Assembler kur isha akoma n\u00eb ato koh\u00ebra kur mund t\u00eb kuptoje \u00e7do nj\u00ebsi t\u00eb ve\u00e7ant\u00eb. Kjo ting\u00ebllon e \u00e7mendur, por q\u00eb at\u00ebher\u00eb n\u00eb mendjen time, n\u00eb kujtes\u00eb, ka mbetur nj\u00eb grup instrukcionesh Z80. Nuk i mbaj mend emrat e njer\u00ebzve vet\u00ebm pas nj\u00eb minute bised\u00eb, por mbaj mend kodin e shkruar 40 vjet m\u00eb par\u00eb. Qesharake, duket si sindromi i \u201c<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\">idiotit t\u00eb shkenc\u00ebs<\/a><\/noindex>\u00bb.<\/p>\n<p><\/p>\n<h1 id=\"obuchenie-nizkourovnevym-optimizaciyam\">M\u00ebsimi i optimizimeve t\u00eb nivelit t\u00eb ul\u00ebt<\/h1>\n<p><\/p>\n<p><strong>Andrei<\/strong>: A ka ndonj\u00eb m\u00ebnyr\u00eb m\u00eb t\u00eb thjesht\u00eb p\u00ebr t'u futur n\u00eb k\u00ebt\u00eb?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: \u0418 \u0434\u0430 \u0438 \u043d\u0435\u0442. \u0416\u0435\u043b\u0435\u0437\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0432\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f, \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u0412\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 x86, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u043d\u0430 Arm. \u0415\u0441\u043b\u0438 \u0442\u044b \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0448\u044c\u0441\u044f \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u043d\u044b\u043c \u044d\u043c\u0431\u0435\u0434\u0434\u0435\u0434\u043e\u043c, \u0443 \u0442\u0435\u0431\u044f \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u0425\u043e\u0440\u043e\u0448\u043e, \u0434\u0430\u043b\u044c\u0448\u0435. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 \u0432\u0435\u043a\u0430\u043c\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 \u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435. \u041d\u0435\u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c. \u0412\u044b \u0432\u043e\u0442 \u0443\u043b\u044b\u0431\u0430\u0435\u0442\u0435\u0441\u044c, \u0430 \u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044e. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 \u0438 \u0436\u0435\u043b\u0435\u0437\u0430. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0439\u0442\u0438, \u043f\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u00ab\u0418\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u044b\u0439\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u0430 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0443\u043f\u0435\u0440\u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438. \u0410\u043a\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u043d\u044f\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043c\u043e\u0441\u0442\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u043f\u0438\u0448\u0443\u0442, \u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435. \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u043e\u0436\u0436\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u0437\u0433\u0430\u0445 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0414\u0430\u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 Java \u0438 \u0442\u043e, \u0447\u0442\u043e \u0443 \u043d\u0435\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u043f\u0430\u0441\u0442\u044c \u043a\u0443\u0434\u0430 \u0433\u043b\u0443\u0431\u0436\u0435, \u0438 \u0432\u043e\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0435 \u043c\u043e\u0441\u0442\u044b \u043a\u0443\u0434\u0430 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0412 Java \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043b\u0438 \u043d\u0430\u0448 \u043c\u043e\u0441\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0438\u043b\u0438 \u043f\u043b\u043e\u0445\u0438\u043c, \u0447\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f \u0438 \u0447\u0442\u043e \u043d\u0435\u0442. \u041d\u043e \u0442\u0435\u0431\u0435 \u043d\u0443\u0436\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u0442\u044b \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u043a\u043e\u0434 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0448\u044c: \u00ab\u0430\u0433\u0430, \u044d\u0442\u043e\u0442 \u0433\u0435\u0442\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043d\u043b\u0430\u0439\u043d\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u00bb. \u0410 \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0442\u0430\u043a \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u0435\u0442\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043c, \u0438 JIT \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u043d\u043b\u0430\u0439\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0434\u0440\u044f\u0434. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e. \u041e\u0431\u044b\u0447\u043d\u043e \u0433\u0435\u0442\u0442\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0442\u044b \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u0446\u0438\u043a\u043b\u044b \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0448\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u043f\u043b\u0430\u0432\u0430\u044e\u0442 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442. \u0412 \u044d\u0442\u043e\u043c \u0438 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0433\u0435\u0442\u0442\u0435\u0440\u043e\u0432, \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d\u0438 \u043d\u0435 \u0438\u043d\u043b\u0430\u0439\u043d\u044f\u0442\u0441\u044f \u2013 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0433\u0435\u0442\u0442\u0435\u0440 \u043b\u0438 \u044d\u0442\u043e. \u0415\u0441\u043b\u0438 \u0443 \u0442\u0435\u0431\u044f \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430, \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438 \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u0432\u043e\u0442 \u044d\u0442\u043e \u0433\u0435\u0442\u0442\u0435\u0440, \u0430 \u0432\u043e\u0442 \u044d\u0442\u043e \u0441\u0435\u0442\u0442\u0435\u0440. \u0412 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u043a\u043e\u043c\u0443, \u0432 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e, \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430. \u041f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438 24% \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0446\u0438\u043a\u043b\u0435 \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0438. \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u044d\u0442\u043e, \u043d\u0435 \u0438\u0437\u0443\u0447\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438 \u044d\u0442\u043e \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0433\u0435\u0442\u0442\u0435\u0440\u044b \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u044b, \u044f \u0432\u044b\u0448\u0435\u043b \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c!<br \/>\nNga ta merrni modelin e \u00e7mimit? Epo, mund t\u00eb lexoni di\u00e7ka, sigurisht... Por mendoj se m\u00ebnyra m\u00eb e mir\u00eb \u00ebsht\u00eb t\u00eb veproni. T\u00eb krijoni nj\u00eb kompilator t\u00eb vog\u00ebl dhe kjo do t\u00eb jet\u00eb m\u00ebnyra m\u00eb e mir\u00eb p\u00ebr t\u00eb kuptuar modelin e \u00e7mimit dhe p\u00ebr ta vendosur at\u00eb n\u00eb mendjen tuaj. Nj\u00eb kompilator i vog\u00ebl q\u00eb do t\u00eb ishte i dobish\u00ebm p\u00ebr programimin e mikroval\u00ebve - kjo \u00ebsht\u00eb nj\u00eb detyr\u00eb p\u00ebr fillestar\u00ebt. E kam fjal\u00ebn se n\u00ebse tashm\u00eb keni aft\u00ebsi programimi, do t'ju mjaftojn\u00eb ato. T\u00eb gjitha k\u00ebto gj\u00ebra si t\u00eb analizosh nj\u00eb varg, i cili do t\u00eb jet\u00eb nj\u00eb shprehje algebrike, t\u00eb nxjerr\u00ebsh nga ajo udh\u00ebzimet p\u00ebr operacionet matematike n\u00eb rendin e duhur, t\u00eb marr\u00ebsh vlerat e sakta nga regjistrat - t\u00eb gjitha k\u00ebto b\u00ebhen leht\u00ebsisht. Dhe derisa t\u00eb b\u00ebni k\u00ebt\u00eb, do t\u00eb p\u00ebrshtatet n\u00eb mendje. Mendoj se t\u00eb gjith\u00eb e din\u00eb \u00e7far\u00eb b\u00ebn nj\u00eb kompilator. Dhe kjo do t\u00eb ofroj\u00eb kuptimin e modelit t\u00eb \u00e7mimit.<\/p>\n<p><\/p>\n<h1 id=\"prakticheskie-primery-uluchsheniya-proizvoditelnosti\">Shembuj praktik\u00eb p\u00ebr p\u00ebrmir\u00ebsimin e performanc\u00ebs<\/h1>\n<p><\/p>\n<p><strong>Andrei<\/strong>: N\u00eb \u00e7far\u00eb tjet\u00ebr duhet t\u00eb keni parasysh kur punoni p\u00ebr performanc\u00ebn?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Strukturat e t\u00eb dh\u00ebnave. Po, ndoshta e kam l\u00ebn\u00eb m\u00ebnjan\u00eb k\u00ebt\u00eb p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb... <noindex>Rocket School<\/noindex>. Kjo ishte arg\u00ebtuese, por k\u00ebrkonte shum\u00eb p\u00ebrpjekje, dhe un\u00eb kam edhe nj\u00eb jet\u00eb tjet\u00ebr! Mir\u00eb, k\u00ebshtu q\u00eb, n\u00eb nj\u00eb nga leksionet m\u00eb t\u00eb m\u00ebdha dhe m\u00eb interesante, \"Kud\u00eb shkon performanca juaj\", u jepja student\u00ebve nj\u00eb shembull: dy e gjysm\u00eb gigabajt t\u00eb dh\u00ebnash fintech u lexuan nga nj\u00eb sked\u00eb CSV dhe pastaj duhej t\u00eb llogaritej numri i produkteve t\u00eb shitura. T\u00eb dh\u00ebna t\u00eb zakonshme t\u00eb tregut. Paketa UDP, t\u00eb kthyer n\u00eb format tekstual q\u00eb nga vitet '70. Chicago Mercantile Exchange \u2013 gj\u00ebra t\u00eb tilla si nafta, misri, fasule soje, dhe t\u00eb ngjashme. Duhej t\u00eb llogariteshin k\u00ebto produkte, numri i transaksioneve, mesatare e volumit t\u00eb l\u00ebvizjes s\u00eb fondeve dhe mallrave, etj. Kjo \u00ebsht\u00eb matematik\u00eb e thjesht\u00eb tregtare: t\u00eb gjesh kodin e produktit (kjo \u00ebsht\u00eb 1-2 simbole n\u00eb nj\u00eb tabel\u00eb hash), t\u00eb marr\u00ebsh shum\u00ebn, ta shtosh n\u00eb nj\u00eb nga grupet e transaksioneve, t\u00eb shtosh volumin, t\u00eb shtosh kostot, dhe disa gj\u00ebra t\u00eb tjera. Nj\u00eb matematik\u00eb shum\u00eb e thjesht\u00eb. Implementimi i lodrave ishte shum\u00eb i thjesht\u00eb: gjith\u00e7ka \u00ebsht\u00eb n\u00eb sked\u00eb, lexoj sked\u00ebn dhe l\u00ebviz p\u00ebrmes saj, duke ndar\u00eb regjistrat individual\u00eb n\u00eb rreshta Java, k\u00ebrkoj n\u00eb to gj\u00ebrat e nevojshme dhe i llogaris sipas matematik\u00ebs s\u00eb p\u00ebrmendur m\u00eb sip\u00ebr. Dhe kjo funksionon me nj\u00eb shpejt\u00ebsi t\u00eb vog\u00ebl. <\/p>\n<p><\/p>\n<p>Me nj\u00eb qasje t\u00eb till\u00eb, gjith\u00e7ka \u00ebsht\u00eb e qart\u00eb se \u00e7far\u00eb ndodh, dhe llogaritjet paralel k\u00ebtu nuk do t\u00eb ndihmojn\u00eb, apo jo? Si\u00e7 duket, nj\u00eb rritje pes\u00ebfish e performanc\u00ebs mund t\u00eb arrihet vet\u00ebm duke zgjedhur struktura t\u00eb duhura t\u00eb t\u00eb dh\u00ebnave. Dhe kjo e befason madje edhe programuesit me p\u00ebrvoj\u00eb! N\u00eb rastin tim konkret, theksi ishte se nuk duhet t\u00eb b\u00ebni alokime memorie n\u00eb nj\u00eb cik\u00ebl t\u00eb nxeht\u00eb. Epo, kjo nuk \u00ebsht\u00eb e gjitha e v\u00ebrtet\u00eb, por n\u00eb p\u00ebrgjith\u00ebsi - nuk duhet t\u00eb alokoni \"nj\u00eb her\u00eb n\u00eb X\", kur X \u00ebsht\u00eb mjaft i madh. Kur X \u00ebsht\u00eb dy e gjysm\u00eb gigabajt, nuk duhet t\u00eb alokoni \"nj\u00eb her\u00eb p\u00ebr nj\u00eb shkronj\u00eb\", apo \"nj\u00eb her\u00eb p\u00ebr nj\u00eb rresht\", apo \"nj\u00eb her\u00eb p\u00ebr nj\u00eb fush\u00eb\", asgj\u00eb e ngjashme. Kjo \u00ebsht\u00eb ajo q\u00eb merr koh\u00eb. Si funksionon kjo? Imagjinoni se b\u00ebj thirrjen <code>String.split()<\/code> ose <code>BufferedReader.readLine()<\/code>. <code>Readline<\/code> b\u00ebn nj\u00eb varg nga nj\u00eb grup bajtesh q\u00eb vijn\u00eb nga rrjeti, nj\u00eb her\u00eb p\u00ebr \u00e7do rresht, p\u00ebr \u00e7do nj\u00eb nga qindra miliona rreshta. E analizoj k\u00ebt\u00eb rresht, e heq, dhe p\u00ebrse e heq - e kam p\u00ebrpunuar tashm\u00eb, mjafton. Prandaj, p\u00ebr \u00e7do bajt t\u00eb lexuar nga k\u00ebto 2.7G, regjistrohet dy simbole n\u00eb nj\u00eb varg, q\u00eb do t\u00eb thot\u00eb se tashm\u00eb kemi 5.4G, dhe ato m\u00eb nuk m\u00eb duhen, prandaj i heq. N\u00ebse shikojm\u00eb kapasitetin e memorjes, ngarkohemi 2.7G, q\u00eb kalon p\u00ebrmes memories dhe autobusit t\u00eb memories n\u00eb procesor, dhe pastaj dy her\u00eb m\u00eb shum\u00eb d\u00ebrgohet n\u00eb varg, q\u00eb q\u00ebndron n\u00eb memorie, dhe gjith\u00e7ka \u00ebsht\u00eb e fshir\u00eb me krijimin e \u00e7do vargu t\u00eb ri. Por un\u00eb duhet ta lexoj, hardueri e lexon, edhe n\u00ebse m\u00eb pas do t\u00eb jet\u00eb gjith\u00e7ka e fshir\u00eb. Dhe duhet ta shkruaj, sepse kam krijuar nj\u00eb varg dhe cache-t jan\u00eb mbushur - cache-i nuk mund t\u00eb p\u00ebrmbaj\u00eb 2.7G. Pra, p\u00ebr \u00e7do bajt t\u00eb lexuar, lexoj edhe dy bajt t\u00eb tjer\u00eb dhe shkruaj dy bajt t\u00eb tjer\u00eb, dhe n\u00eb p\u00ebrfundim kemi nj\u00eb raport 4:1 - n\u00eb k\u00ebt\u00eb raport ne shpenzojm\u00eb pa kuptuar kapacitetin e memorjes. Dhe m\u00eb pas del se n\u00ebse b\u00ebj <code>String.split()<\/code> \u2013 e b\u00ebj k\u00ebt\u00eb jo her\u00ebn e fundit, brenda mund t\u00eb ket\u00eb edhe 6-7 fushat. Prandaj, kodi klasik i leximit t\u00eb CSV me analiz\u00ebn e m\u00ebvonshme t\u00eb rreshtave \u00e7on n\u00eb humbje t\u00eb kapacitetit t\u00eb memorjes q\u00eb \u00ebsht\u00eb rreth 14:1 n\u00eb raport me at\u00eb q\u00eb ju n\u00eb t\u00eb v\u00ebrtet\u00eb do t\u00eb d\u00ebshironit t\u00eb kishit. N\u00ebse i heqim ato alokime, mund t\u00eb arrijm\u00eb nj\u00eb p\u00ebrshpejtim pes\u00ebfish. <\/p>\n<p><\/p>\n<p>Dhe kjo nuk \u00ebsht\u00eb di\u00e7ka shum\u00eb e v\u00ebshtir\u00eb. N\u00ebse e shikoni kodin nga k\u00ebndv\u00ebshtrimi i duhur, gjith\u00e7ka b\u00ebhet mjaft e thjesht\u00eb, sapo t\u00eb kuptoni thelbin e problemit. Nuk duhet t\u00eb ndaloni kurr\u00eb s\u00eb alokuarit t\u00eb memories: problemi \u00ebsht\u00eb se b\u00ebni nj\u00eb alokim dhe ajo vdes menj\u00ebher\u00eb, duke djegur nj\u00eb burim t\u00eb r\u00ebnd\u00ebsish\u00ebm, q\u00eb n\u00eb k\u00ebt\u00eb rast \u00ebsht\u00eb brezi i memories. \u00c7do gj\u00eb p\u00ebrfundon n\u00eb nj\u00eb r\u00ebnie t\u00eb performanc\u00ebs. N\u00eb x86 zakonisht duhet t\u00eb digjni aktivisht ciklet e procesorit, nd\u00ebrsa k\u00ebtu keni djegur gjith\u00eb memories p\u00ebrpara. Zgjidhja \u00ebsht\u00eb t\u00eb reduktoni numrin e alokimeve.\u00a0<br \/>\nNj\u00eb pjes\u00eb tjet\u00ebr e problemit \u00ebsht\u00eb se, n\u00ebse aktivizoni profailer-in kur brezi i memories ka mbaruar, pik\u00ebrisht n\u00eb momentin q\u00eb ndodh, zakonisht prisni rikthimin e caches, sepse ato jan\u00eb plot me plehra q\u00eb sapo keni gjeneruar me t\u00eb gjitha ato vargje. Prandaj, \u00e7do operacion load ose store b\u00ebhet i ngadalt\u00eb, sepse ata shkaktojn\u00eb humbje n\u00eb cache \u2013 e gjith\u00eb cache \u00ebsht\u00eb b\u00ebr\u00eb e ngadalt\u00eb, duke pritur deri sa t\u00eb largohet plehu. Prandaj, profiler-i vet\u00ebm do t\u00eb tregoj\u00eb nj\u00eb zhurm\u00eb t\u00eb rast\u00ebsishme t\u00eb ngroht\u00eb, e shp\u00ebrndar\u00eb gjat\u00eb gjith\u00eb ciklit \u2013 nuk do t\u00eb ket\u00eb asnj\u00eb udh\u00ebzim t\u00eb ve\u00e7ant\u00eb t\u00eb nxeht\u00eb apo vend n\u00eb kod. Vet\u00ebm zhurm\u00eb. Dhe n\u00ebse shikoni ciklet GC, ato t\u00eb gjitha do t\u00eb jen\u00eb nga Young Generation dhe jasht\u00ebzakonisht t\u00eb shpejta \u2013 mikrosekonda ose milisekonda maksimumi. Sepse gjith\u00eb kjo memories vdes menj\u00ebher\u00eb. Ju alokoni miliarda gigabajt dhe ai i pret, e i pret, e p\u00ebrs\u00ebri i pret. T\u00eb gjitha ndodhin shum\u00eb shpejt. Pjesa m\u00eb e lir\u00eb jan\u00eb ciklet GC, zhurma e ngroht\u00eb gjat\u00eb t\u00eb gjith\u00eb ciklit, por ne duam nj\u00eb p\u00ebrshpejtim 5-fish. N\u00eb at\u00eb moment, duhet t\u00eb lidhet di\u00e7ka n\u00eb mendjen tuaj dhe t\u00eb d\u00ebgjohet: \"pse ndodh k\u00ebshtu?!\". P\u00ebrcaktimi i mbingarkes\u00ebs s\u00eb brezi t\u00eb memories nuk shfaqet n\u00eb debugger-in klasik, duhet t\u00eb aktivizoni debugger-in e numerave t\u00eb performanc\u00ebs dhe ta shihni k\u00ebt\u00eb vet\u00eb dhe drejtp\u00ebrdrejt. Dhe, jo drejtp\u00ebrdrejt, mund ta dyshoni nga k\u00ebto tre simptoma. Simptoma e tret\u00eb \u00ebsht\u00eb kur shikoni \u00e7far\u00eb po alokoni, pyesni profiluesin, dhe ai p\u00ebrgjigjet: \"Keni krijuar nj\u00eb miliard vargjesh, por GC ka punuar falas\". Sapo ndodh kjo, kuptoni se keni gjeneruar shum\u00eb objekte dhe keni djegur gjith\u00eb brezin e memories. Ka nj\u00eb m\u00ebnyr\u00eb p\u00ebr t'u shk\u00ebputur nga kjo, por nuk \u00ebsht\u00eb e qart\u00eb.\u00a0<\/p>\n<p><\/p>\n<p>Problemi \u00ebsht\u00eb n\u00eb struktur\u00ebn e t\u00eb dh\u00ebnave: struktura e thjesht\u00eb q\u00eb q\u00ebndron pas t\u00eb gjithave, \u00ebsht\u00eb shum\u00eb e madhe, \u00ebsht\u00eb 2.7G n\u00eb disk, prandaj t\u00eb b\u00ebsh nj\u00eb kopje t\u00eb k\u00ebsaj gj\u00ebje \u00ebsht\u00eb shum\u00eb e paivlershme \u2013 d\u00ebshiron ta ngarkosh at\u00eb n\u00eb m\u00ebnyr\u00eb direkte nga bufferi rrjet\u00ebs n\u00eb regjistra, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb mos lexosh-shkruash n\u00eb nj\u00eb varg pes\u00eb her\u00eb. P\u00ebr fat t\u00eb keq, Java nuk t\u00eb ofron nj\u00eb bibliotek\u00eb t\u00eb till\u00eb si pjes\u00eb e JDK-s\u00eb. Por kjo \u00ebsht\u00eb triviale, apo jo? N\u00eb thelb, jan\u00eb 5-10 rreshta kod q\u00eb do t\u00eb shkojn\u00eb n\u00eb realizimin e nj\u00eb loader-i t\u00eb bufferizuar p\u00ebr vargjet, i cili p\u00ebrs\u00ebrit sjelljen e klas\u00ebs string, duke qen\u00eb nj\u00eb mbush\u00ebs rreth bufferit t\u00eb bytes n\u00ebn\u00ebs. Si rezultat, del se po punoni pothuajse sikur t\u00eb ishit me vargje, por n\u00eb t\u00eb v\u00ebrtet\u00eb ka pointers q\u00eb l\u00ebvizin n\u00eb buffer, dhe bytes e pap\u00ebrpunuara nuk kopjohen askund, k\u00ebshtu q\u00eb riafroheshin t\u00eb nj\u00ebjtat buffer, her\u00eb pas here, dhe sistemi operativ \u00ebsht\u00eb i lumtur t\u00eb marr\u00eb p\u00ebrsip\u00ebr gj\u00ebrat, p\u00ebr t\u00eb cilat \u00ebsht\u00eb dizajnuar, si bufferizimi i dyfisht\u00eb t\u00eb bytes buffer-ve, dhe ju vet\u00eb nuk po p\u00ebrpunoni nj\u00eb rrjedh\u00eb t\u00eb pafund t\u00eb t\u00eb dh\u00ebnave t\u00eb padobishme. Nga ana tjet\u00ebr, e dini, kur punoni me GC garanton q\u00eb \u00e7do alokim memories nuk do t\u00eb shihet nga procesori pas ciklit t\u00eb fundit GC? Prandaj, e gjith\u00eb kjo nuk mund t\u00eb jet\u00eb n\u00eb cache, dhe m\u00eb pas ndodh nj\u00eb humbje 100% e garantuar. Kur punoni me nj\u00eb pointer, n\u00eb x86 t\u00eb lexosh nj\u00eb regjist\u00ebr nga memoria merr 1-2 cikle, dhe sapo ndodh, ju paguani, paguani, paguani, sepse e gjith\u00eb memoria n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cache_inclusion_policy\">NINE caches<\/a><\/noindex> \u2013 dhe kjo \u00ebsht\u00eb kostoja e alokimit t\u00eb memories. Kostoja e v\u00ebrtet\u00eb.<\/p>\n<p><\/p>\n<p>N\u00eb fjal\u00eb t\u00eb tjera, strukturat e t\u00eb dh\u00ebnave jan\u00eb ajo q\u00eb \u00ebsht\u00eb m\u00eb e v\u00ebshtir\u00eb p\u00ebr t'u ndryshuar. Dhe sapo kuptoni q\u00eb keni zgjedhur struktur\u00ebn e gabuar t\u00eb t\u00eb dh\u00ebnave, e cila m\u00eb von\u00eb do t\u00eb d\u00ebmtoj\u00eb performanc\u00ebn, zakonisht k\u00ebrkon nj\u00eb pun\u00eb t\u00eb konsiderueshme p\u00ebr ta rregulluar at\u00eb. Por, n\u00ebse nuk e b\u00ebni k\u00ebt\u00eb, gj\u00ebrat do t\u00eb p\u00ebrkeq\u00ebsohen. Para s\u00eb gjithash, duhet t\u00eb mendoni p\u00ebr strukturat e t\u00eb dh\u00ebnave, kjo \u00ebsht\u00eb e r\u00ebnd\u00ebsishme. Kostoja kryesore \u00ebsht\u00eb n\u00eb strukturat e dh\u00ebnave t\u00eb r\u00ebnd\u00ebsishme, t\u00eb cilat fillojn\u00eb t\u00eb p\u00ebrdoren n\u00eb stilin 'e kam kopjuar struktur\u00ebn e t\u00eb dh\u00ebnave X n\u00eb struktur\u00ebn e t\u00eb dh\u00ebnave Y, sepse Y m\u00eb p\u00eblqen m\u00eb shum\u00eb'. Por operacioni i kopjimit (i cili duket i lir\u00eb) n\u00eb t\u00eb v\u00ebrtet\u00eb shpenzon hap\u00ebsir\u00eb t\u00eb kujtes\u00ebs dhe k\u00ebtu \u00ebsht\u00eb e gjith\u00eb koh\u00ebs s\u00eb humbur n\u00eb ekzekutim. N\u00ebse kam nj\u00eb varg gjigand me JSON dhe dua ta transformoj at\u00eb n\u00eb nj\u00eb pem\u00eb DOM t\u00eb strukturuar nga POJO ose di\u00e7ka e till\u00eb, operacioni i analiz\u00ebs s\u00eb k\u00ebtij vargu dhe nd\u00ebrtimi i POJO, dhe pastaj nj\u00eb qasje e re n\u00eb POJO m\u00eb von\u00eb do t\u00eb kthehet n\u00eb kosto shtes\u00eb \u2013 nj\u00eb gj\u00eb q\u00eb nuk \u00ebsht\u00eb e lir\u00eb. P\u00ebrve\u00e7 n\u00ebse do t\u00eb l\u00ebvizni mes POJO-ve shum\u00eb m\u00eb shpesh se sa n\u00eb varg. P\u00ebraf\u00ebrsisht, n\u00eb vend t\u00eb k\u00ebsaj mund t\u00eb p\u00ebrpiqeni t\u00eb dekriptimit vargun dhe t\u00eb nxirrni vet\u00ebm ato q\u00eb ju nevojiten, pa e nd\u00ebrruar n\u00eb asnj\u00eb POJO. N\u00ebse gjith\u00e7ka ndodh gjat\u00eb nj\u00eb procedur\u00eb q\u00eb k\u00ebrkon maksimumin e performanc\u00ebs, asnj\u00eb POJO \u2013 duhet t\u00eb g\u00ebrmoni drejtp\u00ebrdrejt n\u00eb varg.<\/p>\n<p><\/p>\n<h1 id=\"zachem-sozdavat-svoy-yazyk-programmirovaniya\">Pse t\u00eb krijoni nj\u00eb gjuh\u00eb programimi tuaj\u00ebn<\/h1>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Ju that\u00eb se p\u00ebr t\u00eb kuptuar modelin e kostos, nevojitet t\u00eb shkruani nj\u00eb gjuh\u00eb t\u00eb vog\u00ebl...<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Jo nj\u00eb gjuh\u00eb, por nj\u00eb kompilator. Gjuha dhe kompilatori jan\u00eb gj\u00ebra t\u00eb ndryshme. Diferenca kryesore \u00ebsht\u00eb n\u00eb mendjen tuaj.\u00a0<\/p>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Nga ana tjet\u00ebr, sa di un\u00eb, ju eksperimentoni me krijimin e gjuh\u00ebve tuaja. Pse?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Sepse mundem! Jam gjysm\u00eb n\u00eb pension, k\u00ebshtu q\u00eb kjo \u00ebsht\u00eb hobi im. E gjith\u00eb jet\u00ebn kam realizuar gjuh\u00ebt e t\u00eb tjer\u00ebve. Gjithashtu kam punuar shum\u00eb mbi stilin e kodimit. Po ashtu, sepse shoh probleme n\u00eb gjuh\u00ebt e tjera. E shoh se ka m\u00ebnyra m\u00eb t\u00eb mira p\u00ebr t\u00eb b\u00ebr\u00eb gj\u00ebra t\u00eb zakonshme. Dhe do t'i shfryt\u00ebzoja ato. Jam m\u00ebrzitur t\u00eb shikoj probleme n\u00eb veten time, n\u00eb Java, n\u00eb Python, n\u00eb \u00e7do gjuh\u00eb tjet\u00ebr. Tani po shkruaj n\u00eb React Native, JavaScript dhe Elm si nj\u00eb hobi q\u00eb nuk \u00ebsht\u00eb p\u00ebr pensionim, por p\u00ebr pun\u00eb aktive. Po shkruaj edhe n\u00eb Python dhe me shum\u00eb mund\u00ebsi do t\u00eb vazhdoj t\u00eb punoj mbi m\u00ebsimin e makinerive p\u00ebr Java-backend. Ka shum\u00eb gjuh\u00eb t\u00eb njohura dhe t\u00eb gjitha kan\u00eb ve\u00e7ori interesante. \u00c7do nj\u00ebra \u00ebsht\u00eb e mir\u00eb p\u00ebr di\u00e7ka t\u00eb saj dhe mund t\u00eb provojm\u00eb t\u00eb p\u00ebrbashkojm\u00eb t\u00eb gjitha k\u00ebto karakteristika. K\u00ebshtu q\u00eb un\u00eb merrem me studimin e gj\u00ebrave interesante p\u00ebr mua, sjelljes s\u00eb gjuh\u00ebve, po p\u00ebrpiqem t\u00eb shpik nj\u00eb semantik\u00eb t\u00eb arsyeshme. Deri tani po ia dal!<\/p>\n<p><\/p>\n<p><strong>Andrei<\/strong>: N\u00ebse ndiheni t\u00eb krijoni nj\u00eb gjuh\u00eb q\u00eb merr aspektet m\u00eb t\u00eb mira nga gjuh\u00ebt e tjera, a keni menduar ndonj\u00ebher\u00eb se dikush do t\u00eb marr\u00eb idet\u00eb tuaja dhe do t'i p\u00ebrdor\u00eb ato p\u00ebr vete?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: K\u00ebshtu lindin gjuh\u00ebt e reja! Pse Java ngjan me C? Sepse C kishte nj\u00eb sintaks\u00eb t\u00eb mir\u00eb q\u00eb t\u00eb gjith\u00eb e kuptonin dhe Java u frym\u00ebzua nga kjo sintaks\u00eb, duke i shtuar siguri n\u00eb tipe, kontrollin e kufijve t\u00eb matricave, GC, dhe gjithashtu ata p\u00ebrmir\u00ebsuan disa gj\u00ebra nga C. Shtuan t\u00eb tyre. Por ata u frym\u00ebzuan mjaft fort, apo jo? T\u00eb gjith\u00eb q\u00ebndrojn\u00eb mbi supet e gjigant\u00ebve q\u00eb ishin para jush \u2013 kjo \u00ebsht\u00eb m\u00ebnyra si b\u00ebhet progresi.<\/p>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Si\u00e7 e kuptoj, gjuha juaj do t\u00eb jet\u00eb e sigurt n\u00eb lidhje me p\u00ebrdorimin e kujtes\u00ebs. A keni menduar t\u00eb implementoni di\u00e7ka si kontrolluesin e huazimit nga Rust? A e keni par\u00eb, si ju duket?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Mir\u00eb, kam shkruar n\u00eb C p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb, me t\u00eb gjitha k\u00ebto malloc dhe free, dhe menaxhoj manualisht koh\u00ebzgjatjen e jet\u00ebs. E dini, 90-95% e jet\u00ebs s\u00eb menaxhuar manualisht ka struktura t\u00eb ngjashme. Dhe \u00ebsht\u00eb shum\u00eb, shum\u00eb e dhimbshme ta b\u00ebsh k\u00ebt\u00eb manualisht. Do t\u00eb doja q\u00eb kompilatori t\u00eb m\u00ebsonte se \u00e7far\u00eb po ndodhte dhe se \u00e7far\u00eb keni arritur p\u00ebrmes veprimeve tuaja. P\u00ebr disa gj\u00ebra kontrolluesi i huazimit e b\u00ebn k\u00ebt\u00eb nga kutia. Gjithashtu, ai duhet t\u00eb nxjerr\u00eb informacionin automatikisht, t\u00eb kuptoj\u00eb gjith\u00e7ka dhe madje t\u00eb mos m\u00eb ngarkoj\u00eb me detyrimin p\u00ebr ta paraqitur at\u00eb kuptim. Ai duhet t\u00eb b\u00ebj\u00eb t\u00eb pakt\u00ebn nj\u00eb analiz\u00eb t\u00eb shp\u00ebrndarjes lokale, dhe vet\u00ebm n\u00ebse nuk ka arritur, at\u00ebher\u00eb duhet t\u00eb shtohen anotacione t\u00eb tipeve q\u00eb do t\u00eb p\u00ebrshkruajn\u00eb jet\u00ebn \u2013 dhe nj\u00eb skem\u00eb e till\u00eb \u00ebsht\u00eb shum\u00eb m\u00eb e komplikuar sesa kontrolluesi i huazimit ose ndonj\u00eb kontrollues tjet\u00ebr ekzistues t\u00eb kujtes\u00ebs. Zgjedhja mes 't\u00eb gjitha \u00ebsht\u00eb n\u00eb rregull' dhe 'nuk kuptoj asgj\u00eb' - jo, duhet t\u00eb ket\u00eb di\u00e7ka m\u00eb t\u00eb mir\u00eb.\u00a0<br \/>\nPrandaj, si nj\u00eb person q\u00eb ka shkruar shum\u00eb kod n\u00eb C, mendoj se mb\u00ebshtetje p\u00ebr menaxhimin automatik t\u00eb koh\u00ebzgjatjes \u00ebsht\u00eb gj\u00ebja m\u00eb e r\u00ebnd\u00ebsishme. Gjithashtu, m\u00eb ka bezdisur sa shum\u00eb Java p\u00ebrdor memorie dhe ankesa kryesore \u00ebsht\u00eb te GC. Kur alokoni memorie n\u00eb Java, nuk e merrni p\u00ebrs\u00ebri memorjen q\u00eb ishte lokale n\u00eb ciklin e fundit t\u00eb GC. N\u00eb gjuh\u00ebt me menaxhim m\u00eb t\u00eb sakt\u00eb t\u00eb memories, kjo nuk ndodh. N\u00ebse th\u00ebrrisni malloc, ju merrni menj\u00ebher\u00eb memorjen q\u00eb zakonisht sapo \u00ebsht\u00eb p\u00ebrdorur. Zakonisht b\u00ebni di\u00e7ka t\u00eb p\u00ebrkohshme me memorjen dhe e ktheni menj\u00ebher\u00eb. Dhe ajo kthehet menj\u00ebher\u00eb n\u00eb pool-in e malloc, dhe cikli i ardhsh\u00ebm i malloc p\u00ebrs\u00ebri e nxjerr at\u00eb jasht\u00eb. Prandaj, p\u00ebrdorimi real i memories reduktohet n\u00eb nj\u00eb grup objektesh t\u00eb gjalla n\u00eb nj\u00eb moment t\u00eb caktuar, plus rrjedhjet. Dhe n\u00ebse nuk keni rrjedhje krejt t\u00eb turpshme, pjesa m\u00eb e madhe e memories q\u00ebndron n\u00eb cache dhe procesor, dhe kjo funksionon shpejt. Por k\u00ebrkon shum\u00eb menaxhim manual t\u00eb memories me malloc dhe free, duke i th\u00ebrritur n\u00eb rendin dhe vendin e duhur. Rust mund ta menaxhoj\u00eb k\u00ebt\u00eb vet\u00eb n\u00eb m\u00ebnyr\u00eb korrekte dhe n\u00eb shum\u00eb raste t\u00eb ofroj\u00eb edhe performanc\u00eb m\u00eb t\u00eb madhe, pasi konsumimi i memories ngushtohet vet\u00ebm deri n\u00eb llogaritjet aktuale \u2013 n\u00eb krahasim me pritjen e ciklit t\u00eb ardhsh\u00ebm t\u00eb GC, i cili do t\u00eb liroj\u00eb memorjen. N\u00eb fund, arrit\u00ebm nj\u00eb m\u00ebnyr\u00eb shum\u00eb interesante p\u00ebr t\u00eb p\u00ebrmir\u00ebsuar performanc\u00ebn. Dhe mjaft t\u00eb fuqishme \u2013 n\u00eb kuptimin se kam punuar me k\u00ebto gj\u00ebra n\u00eb p\u00ebrpunimin e t\u00eb dh\u00ebnave p\u00ebr fintech, dhe kjo lejonte t\u00eb arrihej nj\u00eb shpejt\u00ebsi rreth pes\u00ebfish. Kjo \u00ebsht\u00eb nj\u00eb rritje e madhe, sidomos n\u00eb nj\u00eb bot\u00eb ku procesor\u00ebt nuk b\u00ebhen m\u00eb t\u00eb shpejt\u00eb, dhe ne ende presim p\u00ebrmir\u00ebsime.<\/p>\n<p><\/p>\n<h1 id=\"karera-performans-inzhenera\">Karriera e inxhinierit t\u00eb performanc\u00ebs<\/h1>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Po ashtu, do t\u00eb doja t\u00eb pyesja p\u00ebr karrier\u00ebn n\u00eb t\u00ebr\u00ebsi. Ju u b\u00ebt\u00eb t\u00eb njohur p\u00ebr pun\u00ebn tuaj n\u00eb JIT n\u00eb HotSpot, e m\u00eb pas u transferuat n\u00eb Azul \u2013 dhe kjo \u00ebsht\u00eb gjithashtu nj\u00eb kompani JVM. Por tashm\u00eb ishit m\u00eb shum\u00eb t\u00eb angazhuar n\u00eb harduer sesa n\u00eb softuer. Pastaj papritur kaluat n\u00eb Big Data dhe Machine Learning, e m\u00eb pas n\u00eb detection e mashtrimeve. Si ndodhi kjo? K\u00ebto jan\u00eb fusha shum\u00eb t\u00eb ndryshme t\u00eb zhvillimit.<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Kam punuar n\u00eb programezim p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb dhe kam pasur eksperienca shum\u00eb t\u00eb ndryshme. Dhe kur njer\u00ebzit thon\u00eb: \"o, ti je ai q\u00eb b\u00ebri JIT p\u00ebr Java!\", kjo gjithmon\u00eb \u00ebsht\u00eb qesharake. Por para k\u00ebsaj kam punuar mbi nj\u00eb klon t\u00eb PostScript \u2013 gjuh\u00ebs q\u00eb Apple dikur e p\u00ebrdorte p\u00ebr printer\u00ebt e saj laser. Dhe para k\u00ebsaj kam realizuar gjuh\u00ebn Forth. Mendoj se tema e p\u00ebrbashk\u00ebt p\u00ebr mua \u00ebsht\u00eb zhvillimi i mjeteve. Gjat\u00eb gjith\u00eb jet\u00ebs kam b\u00ebr\u00eb mjete q\u00eb i ndihmojn\u00eb t\u00eb tjer\u00ebt t\u00eb shkruajn\u00eb programet e tyre t\u00eb shk\u00eblqyera. Por kam punuar gjithashtu n\u00eb zhvillimin e sistemeve operative, drejtuesve, debuggers n\u00eb nivelin e b\u00ebrtham\u00ebs, gjuh\u00ebve p\u00ebr zhvillimin e OS, q\u00eb filluan thjesht, por me kalimin e koh\u00ebs u b\u00ebn\u00eb gjithnj\u00eb e m\u00eb komplekse. Por tema kryesore, p\u00ebrfundimisht, \u00ebsht\u00eb zhvillimi i mjeteve. Nj\u00eb pjes\u00eb e madhe e jet\u00ebs time kaloi mes Azul dhe Sun, dhe ajo ishte p\u00ebr Java. Por kur fillova t\u00eb merrem me Big Data dhe Machine Learning, vura p\u00ebrs\u00ebri kapelen time t\u00eb qenies formale dhe thash\u00eb: \"Ah, tani kemi nj\u00eb problem jo trivial dhe k\u00ebtu ndodhin shum\u00eb gj\u00ebra interesante dhe njer\u00ebz q\u00eb b\u00ebjn\u00eb di\u00e7ka\". Ky \u00ebsht\u00eb nj\u00eb rrug\u00eb e shk\u00eblqyer p\u00ebr t'u zhvilluar, p\u00ebr t\u00eb cil\u00ebn vlen t\u00eb ec\u00ebsh. <\/p>\n<p><\/p>\n<p>Po, un\u00eb e adhuroj shum\u00eb p\u00ebrpunimin e shp\u00ebrndar\u00eb. Puna ime e par\u00eb ishte n\u00eb studentim n\u00eb C, mbi nj\u00eb projekt reklamash. Ishte p\u00ebrpunim i shp\u00ebrndar\u00eb n\u00eb \u00e7ipet Zilog Z80, q\u00eb grumbullonin t\u00eb dh\u00ebna p\u00ebr njohjen optike t\u00eb teksteve analogjike, t\u00eb prodhuar nga nj\u00eb analizues t\u00eb v\u00ebrtet\u00eb analogjik. Kjo ishte nj\u00eb tem\u00eb e mrekullueshme e papraktikuar. Por kishte probleme, nj\u00eb pjes\u00eb nuk njiheshin sakt\u00eb, prandaj duhej t\u00eb nxirrja imazhin dhe t'ia tregoja nj\u00eb njeriu q\u00eb kishte lexuar me sy dhe raportonte se \u00e7far\u00eb thoshte, dhe p\u00ebr k\u00ebt\u00eb arsye kishte pun\u00eb me t\u00eb dh\u00ebna, dhe ato pun\u00eb kishin gjuh\u00ebn e tyre. Kishte nj\u00eb backend q\u00eb e p\u00ebrpunonte k\u00ebt\u00eb \u2013 Z80 q\u00eb punonin paralelisht me terminale vt100 \u2013 nj\u00eb p\u00ebr \u00e7do k\u00ebndv\u00ebshtrim, dhe kishte nj\u00eb model t\u00eb programimit paralel n\u00eb Z80. Nj\u00eb cop\u00eb e p\u00ebrbashk\u00ebt memorje q\u00eb e ndanin t\u00eb gjith\u00eb Z80 brenda nj\u00eb konfigurimi tip \"yll\"; ndanin gjithashtu backplane-in, dhe gjysma e RAM-it ndante brenda rrjetit, dhe gjysma tjet\u00ebr ishte private ose shkonte p\u00ebr di\u00e7ka tjet\u00ebr. Nj\u00eb sistem paralel shp\u00ebrndar\u00ebs mjaft kompleks me memorje t\u00eb p\u00ebrbashk\u00ebt... pjes\u00ebrisht t\u00eb p\u00ebrbashk\u00ebt. Kur ndodhi kjo... Nuk e mbaj mend, diku n\u00eb mes t\u00eb viteve '80. Mjaft krijimi.\u00a0<br \/>\nPo, le t\u00eb themi se 30 vjet \u00ebsht\u00eb mjaft koh\u00eb. Problemet q\u00eb lidhen me p\u00ebrpunimin e shp\u00ebrndar\u00eb ekzistojn\u00eb mjaft koh\u00eb, njer\u00ebzit kan\u00eb luftuar me <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>-klastereve. K\u00ebto klastere duken si\u2026 P\u00ebr shembull: ka Ethernet dhe x86 tuaj i shpejt\u00eb \u00ebsht\u00eb i lidhur me k\u00ebt\u00eb Ethernet, dhe tani d\u00ebshiron t\u00eb shkosh p\u00ebr nj\u00eb kujtes\u00eb t\u00eb p\u00ebrbashk\u00ebt false, sepse askush nuk mund t\u00eb merrej me kodimin e llogaritjeve t\u00eb shp\u00ebrndara, kjo ishte shum\u00eb e komplikuar dhe k\u00ebshtu kishte kujtes\u00eb t\u00eb p\u00ebrbashk\u00ebt false me mbrojtjen e faqeve t\u00eb memories n\u00eb x86, dhe n\u00ebse shkruajte n\u00eb k\u00ebt\u00eb faqe, ne i thoshim procesor\u00ebve t\u00eb tjer\u00eb se n\u00ebse ata kan\u00eb qasje n\u00eb t\u00eb nj\u00ebjt\u00ebn kujtes\u00eb t\u00eb p\u00ebrbashk\u00ebt, ajo duhet t\u00eb ngarkohet prej teje, dhe k\u00ebshtu u krijua di\u00e7ka si nj\u00eb protokoll mb\u00ebshtetjeje p\u00ebr koherenc\u00ebn e caches dhe softuer p\u00ebr k\u00ebt\u00eb. Nj\u00eb koncept interesante. Problemi i v\u00ebrtet\u00eb, natyrisht, ishte di\u00e7ka tjet\u00ebr. T\u00eb gjitha k\u00ebto funksiononin, por shpejt fillove t\u00eb kishe probleme me performanc\u00ebn, sepse askush nuk e kuptonte modelin e performanc\u00ebs n\u00eb nj\u00eb nivel t\u00eb mjaftuesh\u00ebm t\u00eb mir\u00eb \u2013 \u00e7far\u00eb ishin modelet e aksesit n\u00eb memorie, si t'i b\u00ebsh q\u00eb nodet t\u00eb mos pingonin nj\u00ebri-tjetrin pafund\u00ebsisht, e k\u00ebshtu me radh\u00eb. <\/p>\n<p><\/p>\n<p>N\u00eb H2O kam menduar si ndjek: vet\u00eb zhvilluesit jan\u00eb p\u00ebrgjegj\u00ebs p\u00ebr t\u00eb p\u00ebrcaktuar se ku \u00ebsht\u00eb paralelizmi dhe ku nuk \u00ebsht\u00eb. Kam shpikur nj\u00eb model kodimi, q\u00eb t\u00eb shkruash kod me performanc\u00eb t\u00eb lart\u00eb \u00ebsht\u00eb b\u00ebr\u00eb e leht\u00eb dhe e thjesht\u00eb. Por, t\u00eb shkruash kod q\u00eb punon ngadal\u00eb \u00ebsht\u00eb e v\u00ebshtir\u00eb, do t\u00eb ket\u00eb nj\u00eb pamje t\u00eb keqe. Duhet t\u00eb punosh me t\u00eb v\u00ebrtet\u00eb fort p\u00ebr t\u00eb shkruar kod t\u00eb ngadalt\u00eb, do t\u00eb duhet t\u00eb p\u00ebrdor\u00ebsh metoda jo standarde. Kodi i ngadalsh\u00ebm \u00ebsht\u00eb i duksh\u00ebm q\u00eb n\u00eb shikimin e par\u00eb. Si pasoj\u00eb, zakonisht shkruhet kod q\u00eb punon shpejt, por ju duhet t\u00eb merret me at\u00eb se \u00e7far\u00eb t\u00eb b\u00ebni n\u00eb rastin e memories s\u00eb ndar\u00eb. E t\u00ebr\u00eb kjo \u00ebsht\u00eb e lidhur me grupe t\u00eb m\u00ebdha dhe sjellja atje \u00ebsht\u00eb si kujtesat e m\u00ebdha jo-volatile n\u00eb Java paralel. N\u00eb kuptimin, imagjinoni se dy rrjedha shkruajn\u00eb n\u00eb nj\u00eb grup paralel, nj\u00ebra fiton, nd\u00ebrsa tjetra, p\u00ebr pasoj\u00eb, humbet, dhe nuk e dini kush \u00ebsht\u00eb kush. N\u00ebse ato nuk jan\u00eb volatile, at\u00ebher\u00eb rendi mund t\u00eb jet\u00eb \u00e7far\u00ebdo \u2013 dhe kjo funksionon me t\u00eb v\u00ebrtet\u00eb mir\u00eb. Njer\u00ebzit me t\u00eb v\u00ebrtet\u00eb kujdesen p\u00ebr rendin e operacioneve, ata vendosin sakt\u00eb volatile dhe n\u00eb vendet e duhura presin problemet me performanc\u00ebn e memories. N\u00eb rast se jo, ata thjesht do t\u00eb shkruanin kod n\u00eb form\u00ebn e cikleve prej 1 deri n\u00eb N, ku N \u00ebsht\u00eb disa triliona, duke shpresuar se t\u00eb gjitha rastet e komplikuara automatikisht do t\u00eb b\u00ebhen paralel \u2013 dhe aty kjo nuk funksionon. Por n\u00eb H2O kjo nuk \u00ebsht\u00eb Java, dhe nuk \u00ebsht\u00eb Scala, mund ta quani k\u00ebt\u00eb 'Java minus minus', n\u00ebse d\u00ebshironi. Kjo \u00ebsht\u00eb nj\u00eb stil programimi shum\u00eb i kuptuesh\u00ebm dhe i ngjash\u00ebm me at\u00eb t\u00eb shkruarit kod t\u00eb thjesht\u00eb n\u00eb C ose Java me cikle dhe grupe. Por, me k\u00ebt\u00eb, mund t\u00eb trajtosh terabajt\u00eb memories. Un\u00eb akoma e p\u00ebrdor H2O. Her\u00eb pas here e p\u00ebrdor n\u00eb projekte t\u00eb ndryshme \u2013 dhe akoma \u00ebsht\u00eb gj\u00ebja m\u00eb e shpejt\u00eb, disa her\u00eb p\u00ebrpara konkurent\u00ebve. N\u00ebse po b\u00ebni Big Data me t\u00eb dh\u00ebna kolumne, \u00ebsht\u00eb shume e v\u00ebshtir\u00eb t\u00eb tejkalosh H2O.<\/p>\n<p><\/p>\n<h1 id=\"tehnicheskie-chellenzhi\">Sfidat teknike<\/h1>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Cili ka qen\u00eb sfida m\u00eb e madhe n\u00eb gjith\u00eb karrier\u00ebn tuaj?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: A po diskutojm\u00eb pjes\u00ebn teknike apo jo teknik\u00eb t\u00eb \u00e7\u00ebshtjes? Do t\u00eb thoja, sfidat m\u00eb t\u00eb m\u00ebdha \u2013 nuk jan\u00eb teknike.\u00a0<br \/>\nSa i p\u00ebrket sfidave teknike. Un\u00eb thjesht i kam mposhtur. Nuk e di as cila ka qen\u00eb m\u00eb e madhja, por kishte disa mjaft interesante, t\u00eb cilat mor\u00ebn shum\u00eb koh\u00eb, luft\u00eb mendore. Kur shkova n\u00eb Sun, isha i sigurt se do t\u00eb b\u00ebja nj\u00eb kompajler t\u00eb shpejt\u00eb, nd\u00ebrsa shum\u00eb senior\u00eb n\u00eb p\u00ebrgjigje than\u00eb se nuk do t\u00eb kisha asnj\u00ebher\u00eb sukses. Por un\u00eb ndoqa k\u00ebt\u00eb rrug\u00eb, shkrova nj\u00eb kompajler deri n\u00eb alokatorin e regjistrimeve, dhe mjaft t\u00eb shpejt\u00eb. Ai ishte po aq i shpejt\u00eb sa kompajleri modern C1, por at\u00ebher\u00eb alokatori ishte shum\u00eb m\u00eb i ngadalt\u00eb, dhe duke e par\u00eb gjat\u00eb pas, kishte nj\u00eb problem me struktur\u00ebn e madhe t\u00eb t\u00eb dh\u00ebnave. M\u00eb nevojitej p\u00ebr t\u00eb shkruar nj\u00eb alokator grafik regjistrimesh dhe nuk e kuptoja dilem\u00ebn midis shprehshm\u00ebris\u00eb s\u00eb kodit dhe shpejt\u00ebsis\u00eb, e cila ekzistonte n\u00eb at\u00eb epok\u00eb dhe ishte shum\u00eb e r\u00ebnd\u00ebsishme. Doli se struktura e t\u00eb dh\u00ebnave zakonisht tejkalonte madh\u00ebsin\u00eb e caches n\u00eb x86-t\u00eb e asaj kohe dhe, k\u00ebshtu, n\u00ebse un\u00eb fillimisht e supozova se alokatori i regjistrave do t\u00eb punonte 5-10 p\u00ebrqind t\u00eb gjith\u00eb koh\u00ebs s\u00eb JIT-it, n\u00eb t\u00eb v\u00ebrtet\u00eb kjo u shnd\u00ebrrua n\u00eb 50 p\u00ebrqind. <\/p>\n<p><\/p>\n<p>Koha kalonte, kompajleri b\u00ebhej gjithnj\u00eb e m\u00eb i qart\u00eb dhe m\u00eb i fuqish\u00ebm, ndalonte s\u00eb gjeneruari kod t\u00eb neveritsh\u00ebm n\u00eb m\u00eb shum\u00eb raste, dhe performanca filloi t'i ngjaj\u00eb gjithnj\u00eb e m\u00eb shum\u00eb asaj q\u00eb prodhonte kompajleri C. N\u00ebse, sigurisht, nuk shkruan ndonj\u00eb gj\u00eb t\u00eb keqe, t\u00eb cil\u00ebn as C nuk e p\u00ebrshpejton. N\u00ebse shkruan kod si n\u00eb C, merr gjithashtu performanc\u00eb si n\u00eb C n\u00eb m\u00eb shum\u00eb raste. Dhe sa m\u00eb shum\u00eb kalonte koha, aq m\u00eb shpesh kodet q\u00eb rezultonin ishin asimptotikisht t\u00eb ngjashme me nivelin e C, alokatori i regjistrave filloi t\u00eb ngjante me di\u00e7ka t\u00eb p\u00ebrfunduar... pavar\u00ebsisht n\u00ebse kodi yt funksiononte shpejt ose ngadal\u00eb. Un\u00eb vazhdoja t\u00eb punoja mbi alokatorin, q\u00eb t\u00eb b\u00ebja alokime m\u00eb t\u00eb mira. Ai po b\u00ebhej gjithnj\u00eb e m\u00eb i ngadalt\u00eb, por jepte performanc\u00eb gjithnj\u00eb e m\u00eb t\u00eb mir\u00eb n\u00eb ato raste kur askush tjet\u00ebr nuk arrinte. Mund t\u00eb futesha n\u00eb alokatorin e regjistrave, t\u00eb hidhja aty nj\u00eb muaj pune, dhe papritur t\u00ebr\u00eb kodi fillonte t\u00eb ekzekutohej 5% m\u00eb shpejt. Kjo ndodhte \u00e7do her\u00eb dhe alokatori i regjistrave u b\u00eb di\u00e7ka si nj\u00eb vep\u00ebr arti \u2013 t\u00eb gjith\u00ebve u p\u00eblqente ose e urrenin, dhe njer\u00ebzit nga akademia b\u00ebnin pyetje n\u00eb lidhje me \"pse b\u00ebhet gjith\u00e7ka k\u00ebshtu\", pse jo <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Register_allocation#Linear_Scan\">skanimi liniar<\/a><\/noindex>, dhe \u00e7far\u00eb \u00ebsht\u00eb dallimi. P\u00ebrgjigjja \u00ebsht\u00eb gjithnj\u00eb e nj\u00ebjt\u00eb: alokatori i bazuar n\u00eb ngjyrosjen e grafit plus puna shum\u00eb e kujdesshme me kodin mb\u00ebshtet\u00ebs \u00ebsht\u00eb e barabart\u00eb me arm\u00ebn e fitores, kombinimi m\u00eb i mir\u00eb q\u00eb askush nuk mund ta mposht. Dhe kjo \u00ebsht\u00eb nj\u00eb gj\u00eb mjaft e padukshme. E gjith\u00eb gj\u00ebja tjet\u00ebr q\u00eb b\u00ebnte kompajleri \u00ebsht\u00eb \u00e7\u00ebshtje e studiuar mjaft mir\u00eb, megjith\u00ebse jan\u00eb t\u00eb p\u00ebrmir\u00ebsuara n\u00eb nivel arti. Un\u00eb gjithmon\u00eb b\u00ebja gj\u00ebra q\u00eb duhej ta kthenin kompajlerin n\u00eb nj\u00eb vep\u00ebr arti. Por asgj\u00eb nga kjo nuk ishte di\u00e7ka e jasht\u00ebzakonshme \u2013 p\u00ebrve\u00e7 alokatorit t\u00eb regjistrave. Thelbi \u00ebsht\u00eb se duhet t\u00eb p\u00ebrpiqesh <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Register_allocation\">t\u00eb skalon<\/a><\/noindex> n\u00ebn ngarkes\u00eb dhe, n\u00ebse ndodh kjo (mund t\u00eb shpjegoj m\u00eb shum\u00eb, n\u00ebse \u00ebsht\u00eb e interesuar), kjo do t\u00eb thot\u00eb q\u00eb mund t\u00eb b\u00ebsh inline m\u00eb agresivisht, pa rrezikun e kalimit p\u00ebrtej pik\u00ebs s\u00eb thyerjes s\u00eb performanc\u00ebs. N\u00eb ato koh\u00eb kishte shum\u00eb kompajler\u00eb me p\u00ebrmas\u00eb t\u00eb plot\u00eb, t\u00eb mbushur me gj\u00ebra e vegla, q\u00eb kishin alokator\u00eb regjistrash, por askush nuk arriti m\u00eb asnj\u00ebher\u00eb. <\/p>\n<p><\/p>\n<p>Problemi \u00ebsht\u00eb se, n\u00ebse shton metoda t\u00eb cilat duhet t\u00eb b\u00ebhen inline, duke e rritur dhe zgjeruar zon\u00ebn e inline-it, grupi i vlerave t\u00eb p\u00ebrdorura menj\u00ebher\u00eb tejkalon numrin e regjistrave, dhe duhet t\u00eb skalon. Nivelin kritik zakonisht e arin kur alokatori dor\u00ebzohet, dhe nj\u00eb kandidat i mir\u00eb p\u00ebr skalim \u00ebsht\u00eb m\u00eb i vlefsh\u00ebm se tjetri, dhe ti skalon gj\u00ebra fare t\u00eb \u00e7udshme. Vlera e inline-it q\u00ebndron n\u00eb faktin se humb nj\u00eb pjes\u00eb t\u00eb overhead-it, overhead-it p\u00ebr thirrje dhe ruajtje, mund t\u00eb shoh\u00ebsh vlerat brenda dhe mund t'i optimizosh m\u00eb tej. Kostoja e inline-it \u00ebsht\u00eb se krijohet nj\u00eb sasi e madhe vlerash aktive, dhe n\u00ebse alokatori yt i regjistrave skalon m\u00eb shum\u00eb se sa duhet, do t\u00eb humb\u00ebsh menj\u00ebher\u00eb. Prandaj, shumica e alokator\u00ebve kan\u00eb nj\u00eb problem: kur inline-i kalon nj\u00eb far\u00eb kufiri, gjith\u00e7ka fillon t\u00eb skaloj\u00eb dhe performanca mund t\u00eb humbas\u00eb. Ata q\u00eb realizojn\u00eb kompajlerin shtojn\u00eb disa heuristika: p\u00ebr shembull, t\u00eb ndalojn\u00eb inline-in duke filluar nga nj\u00eb madh\u00ebsi mjaft t\u00eb madhe, pasi alokimet do ta prishin gjith\u00e7ka. K\u00ebshtu ndodh nj\u00eb pik\u00eb e thyerje e kurb\u00ebs s\u00eb performanc\u00ebs - ti b\u00ebsh inline, b\u00ebsh inline, performanca rritet ngadal\u00eb - dhe pastaj bum! \u2013 bie me nj\u00eb r\u00ebnie t\u00eb shpejt\u00eb, sepse ke b\u00ebr\u00eb inline shum\u00eb. K\u00ebshtu kishte funksionuar deri n\u00eb shfaqjen e Java-s. Java k\u00ebrkon shum\u00eb m\u00eb tep\u00ebr inline, k\u00ebshtu q\u00eb m\u00eb duhej t\u00eb b\u00ebja alokatorin tim m\u00eb agresiv, q\u00eb ai t\u00eb rregullohej, e t\u00eb mos binte, dhe n\u00ebse b\u00ebn shum\u00eb inline \u2013 ai fillon t\u00eb skaloj\u00eb, por p\u00ebrs\u00ebri vjen momenti \"nuk ka m\u00eb skalim\". Ky \u00ebsht\u00eb nj\u00eb v\u00ebzhgim interesant dhe erdhi te un\u00eb n\u00eb m\u00ebnyr\u00eb krejt\u00ebsisht t\u00eb papritur, mjaft jo e dukshme, por q\u00eb u shp\u00ebrblye mir\u00eb. U angazhua me inline-in agresiv dhe kjo m\u00eb \u00e7oi n\u00eb vende ku performanca e Java-s dhe C-s\u00eb shkon paralele. Ato jan\u00eb v\u00ebrtet t\u00eb af\u00ebrta \u2013 mund t\u00eb shkruaj kod n\u00eb Java q\u00eb \u00ebsht\u00eb duksh\u00ebm m\u00eb i shpejt\u00eb se kodi n\u00eb C dhe e ngjashme, por n\u00eb mesatare, n\u00eb pamjen e madhe t\u00eb gj\u00ebrave, ato jan\u00eb af\u00ebrsisht t\u00eb krahasueshme. M\u00eb duket se nj\u00eb pjes\u00eb e k\u00ebsaj merite \u00ebsht\u00eb alokatori i regjistrave, i cili m\u00eb lejon t\u00eb b\u00ebj inline n\u00eb m\u00ebnyr\u00ebn m\u00eb idiote. Un\u00eb thjesht b\u00ebj inline \u00e7do gj\u00eb q\u00eb shoh. \u00c7\u00ebshtja \u00ebsht\u00eb n\u00ebse alokatori punon mir\u00eb, a del kodi i prodhuar q\u00eb punon si duhet. Ky ishte nj\u00eb sfid\u00eb e madhe: t\u00eb kuptoj t\u00eb gjith\u00eb k\u00ebt\u00eb dhe ta b\u00ebj t\u00eb funksionoj\u00eb.<\/p>\n<p><\/p>\n<h1 id=\"nemnogo-pro-allokaciyu-registrov-i-mnogoyadernost\">Pak p\u00ebr alokimin e regjistrave dhe shum\u00ebb\u00ebrthamerin\u00eb<\/h1>\n<p><\/p>\n<p><strong>Vladimir<\/strong>: Problemet si alokimi i regjistrave duken si nj\u00eb tem\u00eb e pafund. A ka ndodhur ndonj\u00ebher\u00eb q\u00eb nj\u00eb ide t\u00eb duket premtuese, por m\u00eb pas t\u00eb d\u00ebshtoj\u00eb n\u00eb praktik\u00eb?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Sigurisht! Alokimi i regjistrave \u00ebsht\u00eb nj\u00eb fush\u00eb ku p\u00ebrve\u00e7 zgjidhjes s\u00eb nj\u00eb problemi NP-t\u00eb plot, p\u00ebrpiqesh t\u00eb gjesh disa heuristic-e. Dhe nuk do t\u00eb arrish kurr\u00eb nj\u00eb zgjidhje t\u00eb p\u00ebrkryer, apo jo? Kjo \u00ebsht\u00eb thjesht e pamundur. Shiko, kompilimi Ahead of Time gjithashtu ka rezultate t\u00eb keqa. Biseda \u00ebsht\u00eb p\u00ebr raste t\u00eb zakonshme. P\u00ebr performanc\u00ebn tipike, mund t\u00eb shkosh dhe t\u00eb jap\u00ebsh matje p\u00ebr di\u00e7ka q\u00eb e konsideron nj\u00eb performanc\u00eb t\u00eb mir\u00eb tipike \u2013 n\u00eb fund t\u00eb fundit, je duke punuar p\u00ebr ta p\u00ebrmir\u00ebsuar! Alokimi i regjistrave \u00ebsht\u00eb nj\u00eb tem\u00eb e plot\u00eb kushtuar performanc\u00ebs. Mjafton t\u00eb kesh nj\u00eb prototip t\u00eb par\u00eb, q\u00eb funksionon dhe kryen at\u00eb q\u00eb duhet, dhe fillon puna p\u00ebr performanc\u00ebn. Duhet t\u00eb m\u00ebsosh t\u00eb mas\u00ebsh mir\u00eb. Pse \u00ebsht\u00eb kjo e r\u00ebnd\u00ebsishme? N\u00ebse ka t\u00eb dh\u00ebna t\u00eb qarta, mund t\u00eb shoh\u00ebsh n\u00eb pjes\u00eb t\u00eb ndryshme dhe t\u00eb shoh\u00ebsh: ah, kjo ndihmoi k\u00ebtu, por atje d\u00ebshtoi! Paraqiten disa ide t\u00eb mira, shton nj\u00eb heuristic t\u00eb re dhe papritmas gjith\u00e7ka fillon t\u00eb funksionoj\u00eb pak m\u00eb mir\u00eb n\u00eb mesatare. Ose ndoshta jo. Kam pasur shum\u00eb raste, kur ne luftonim p\u00ebr pes\u00eb p\u00ebr qind performanc\u00eb, q\u00eb ndante zhvillimin ton\u00eb nga alokatori i m\u00ebparsh\u00ebm. Dhe \u00e7do her\u00eb, duket k\u00ebshtu: nj\u00eb vend fituam, diku tjet\u00ebr humb\u00ebm. N\u00ebse ke mjete t\u00eb mira p\u00ebr analiz\u00ebn e performanc\u00ebs, mund t\u00eb gjesh idet\u00eb q\u00eb nuk i b\u00ebn\u00eb mir\u00eb dhe t\u00eb kuptosh pse. Ndoshta ia vlen t\u00eb l\u00ebsh gjith\u00e7ka ashtu si\u00e7 \u00ebsht\u00eb, ndoshta vlen t\u00eb angazhohesh m\u00eb seriozisht p\u00ebr nj\u00eb tuning m\u00eb t\u00eb ndjeshme, ose t\u00eb shkosh dhe t\u00eb rregullosh di\u00e7ka tjet\u00ebr. Ky \u00ebsht\u00eb nj\u00eb grup i t\u00ebr\u00eb gj\u00ebrash! Kam b\u00ebr\u00eb k\u00ebt\u00eb hack t\u00eb shk\u00eblqyer, por m\u00eb duhet ky, ky dhe ky \u2013 dhe kombinimi i tyre jep p\u00ebrmir\u00ebsime t\u00eb caktuara. Dhe p\u00ebrpjekjet individuale mund t\u00eb d\u00ebshtojn\u00eb. Kjo \u00ebsht\u00eb natyra e pun\u00ebs me problemet NP-t\u00eb plot.<\/p>\n<p><\/p>\n<p><strong>Vladimir<\/strong>: Duket sikur gj\u00ebra si piktura n\u00eb alokator\u00eb jan\u00eb nj\u00eb problem i zgjidhur. Po, p\u00ebr ju, duket se ju e keni zgjidhur, k\u00ebshtu q\u00eb duhet ta b\u00ebni...?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Ajo nuk \u00ebsht\u00eb e zgjidhur si e till\u00eb. Ti duhet ta kthesh n\u00eb 't\u00eb zgjidhur'. Ka probleme t\u00eb v\u00ebshtira dhe ato duhen zgjidhur. Kur kjo \u00ebsht\u00eb b\u00ebr\u00eb, fillon puna p\u00ebr performanc\u00ebn. Duhet t\u00eb qaseni ndaj k\u00ebsaj pune si\u00e7 duhet \u2013 t\u00eb b\u00ebni banchmarke, t\u00eb mbani metrika, t\u00eb shpjegoni situatat kur duke u rikthyer n\u00eb versionin e m\u00ebparsh\u00ebm, hack-i yt i vjet\u00ebr fillon p\u00ebrs\u00ebri t\u00eb funksionoj\u00eb (ose p\u00ebrndryshe, ndalon). Dhe t\u00eb mos hiqni dor\u00eb derisa t\u00eb arrini di\u00e7ka. Si\u00e7 kam th\u00ebn\u00eb, idet\u00eb e shk\u00eblqyera q\u00eb nuk funksionuan, por n\u00eb fush\u00ebn e alokimit t\u00eb regjistrave ka ide pothuajse t\u00eb pafundme. Mund t\u00eb lexosh, p\u00ebr shembull, publikime shkencore. Nd\u00ebrkoh\u00eb q\u00eb kjo fush\u00eb \u00ebsht\u00eb b\u00ebr\u00eb m\u00eb e ngadalt\u00eb dhe m\u00eb e qart\u00eb se n\u00eb dit\u00ebt e saj t\u00eb rinis\u00eb. Megjithat\u00eb, n\u00eb k\u00ebt\u00eb fush\u00eb punojn\u00eb nj\u00eb pafund\u00ebsi njer\u00ebzish dhe t\u00eb gjitha idet\u00eb e tyre meritojn\u00eb t\u00eb provohen, t\u00eb gjith\u00eb presin or\u00ebn e tyre. Dhe nuk mund t\u00eb thuash se sa t\u00eb mira jan\u00eb, n\u00ebse nuk i provon. Sa mir\u00eb integrohen me gjith\u00e7ka tjet\u00ebr n\u00eb alokatorin t\u00ebnd, sepse alokatori b\u00ebn shum\u00eb gj\u00ebra, dhe disa ide nuk do t\u00eb funksionojn\u00eb n\u00eb alokatorin t\u00ebnd konkret, ndryshe nga nj\u00eb tjet\u00ebr. M\u00ebnyra kryesore p\u00ebr t\u00eb fituar p\u00ebr alokatorin \u00ebsht\u00eb t\u00eb nxjerr\u00ebsh gj\u00ebrat e ngadalta jasht\u00eb rrug\u00ebs kryesore dhe t\u00eb detyrosh shp\u00ebrndarjen n\u00eb kufijt\u00eb e rrug\u00ebve t\u00eb ngadalta. Prandaj, n\u00ebse do t\u00eb nis\u00ebsh GC, t\u00eb shkosh n\u00eb rrug\u00ebn e ngadalte, t\u00eb deoptimizosh, t\u00eb hedh\u00ebsh nj\u00eb p\u00ebrjashtim, gjith\u00e7ka n\u00eb at\u00eb stil \u2013 e di q\u00eb k\u00ebto gj\u00ebra jan\u00eb relativisht t\u00eb rralla. Dhe ata jan\u00eb me t\u00eb v\u00ebrtet\u00eb t\u00eb rrall\u00eb, e kam kontrolluar. B\u00ebn nj\u00eb pun\u00eb shtes\u00eb dhe p\u00ebr k\u00ebt\u00eb, shum\u00eb kufizime n\u00eb ato rrug\u00eb t\u00eb ngadalta zhduken, por kjo nuk \u00ebsht\u00eb shum\u00eb e r\u00ebnd\u00ebsishme, sepse ato jan\u00eb t\u00eb ngadalta dhe rrall\u00eb p\u00ebrdoren. P\u00ebr shembull, nj\u00eb pointer zero \u2013 ai kurr\u00eb nuk ndodh, apo jo? Duhet t\u00eb kesh disa rrug\u00eb p\u00ebr gj\u00ebra t\u00eb ndryshme, por ato nuk duhet t\u00eb pengojn\u00eb n\u00eb rrug\u00ebn kryesore.\u00a0<\/p>\n<p><\/p>\n<p><strong>Vladimir<\/strong>: \u00c7far\u00eb mendoni p\u00ebr multicore-n, kur ka mij\u00ebra b\u00ebrtham\u00eb? A \u00ebsht\u00eb nj\u00eb gj\u00eb e dobishme?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Suqesi i GPU tregon se \u00ebsht\u00eb mjaft e dobishme!<\/p>\n<p><\/p>\n<p><strong>Vladimir<\/strong>: Ata jan\u00eb t\u00eb specializuar. Po p\u00ebr procesor\u00ebt e p\u00ebrgjithsh\u00ebm?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Po, kjo ishte modeli i biznesit Azul. P\u00ebrgjigja erdhi n\u00eb nj\u00eb epok\u00eb kur njer\u00ebzit e donin shum\u00eb performanc\u00ebn e parashikueshme. N\u00eb at\u00eb koh\u00eb ishte e v\u00ebshtir\u00eb t\u00eb shkruhej kod paralel. Modeli i kodimit H2O p\u00ebrshtatet mir\u00eb, por nuk \u00ebsht\u00eb nj\u00eb model universal. N\u00ebse ka ndonj\u00ebher\u00eb m\u00eb shum\u00eb universalisht se sa me p\u00ebrdorimin e GPU. Po flasim p\u00ebr v\u00ebshtir\u00ebsin\u00eb e zhvillimit t\u00eb nj\u00eb gj\u00ebje t\u00eb till\u00eb ose p\u00ebr v\u00ebshtir\u00ebsin\u00eb e p\u00ebrdorimit t\u00eb saj? P\u00ebr shembull, nj\u00eb m\u00ebsim interesant m\u00eb dha Azul, mjaft i duksh\u00ebm: cache-t e vogla jan\u00eb t\u00eb pranueshme.\u00a0<\/p>\n<p><\/p>\n<h1 id=\"samyy-bolshoy-chellenzh-v-zhizni\">Sfidat m\u00eb t\u00eb m\u00ebdha n\u00eb jet\u00ebn tuaj<\/h1>\n<p><\/p>\n<p><strong>Vladimir<\/strong>: \u00c7far\u00eb ndodh me sfidat jo teknike?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>: Sfidat m\u00eb t\u00eb m\u00ebdha ishin q\u00eb t\u00eb mos isha\u2026 i mir\u00eb dhe i sjellsh\u00ebm me njer\u00ebzit. Dhe si rezultat, un\u00eb vazhdimisht p\u00ebrfundova n\u00eb situata t\u00eb p\u00ebrplasjes. Situata, ku e dija q\u00eb \u00e7do gj\u00eb ishte duke shkuar keq, por nuk dija se si t\u00eb p\u00ebrparoja n\u00eb zgjidhjen e k\u00ebtyre problemeve dhe nuk mund t\u00eb merja dot me to. Shum\u00eb probleme t\u00eb ngadalta, q\u00eb zgjat\u00ebn me dekada, u shfaq\u00ebn n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb. Fakt zhvillimin e kompilator\u00ebve C1 dhe C2 n\u00eb Java \u00ebsht\u00eb pasoj\u00eb e drejtp\u00ebrdrejt\u00eb e k\u00ebsaj. T\u00eb mos kishte kompilim me shum\u00eb nivele n\u00eb Java p\u00ebr nj\u00eb dekad\u00eb gjithashtu \u00ebsht\u00eb nj\u00eb pasoj\u00eb e drejtp\u00ebrdrejt\u00eb. \u00cbsht\u00eb e qart\u00eb q\u00eb na duhej nj\u00eb sistem i till\u00eb, por nuk \u00ebsht\u00eb e qart\u00eb pse nuk e kishim at\u00eb. Kam pasur probleme me nj\u00eb inxhinier\u2026 ose nj\u00eb grup inxhinier\u00ebsh. Disa koh\u00eb m\u00eb par\u00eb, kur fillova t\u00eb punoja n\u00eb Sun, isha\u2026 Mir\u00eb, jo vet\u00ebm at\u00ebher\u00eb, un\u00eb gjithmon\u00eb kam pasur mendimin tim p\u00ebr \u00e7do gj\u00eb. Dhe mendova se ishte e v\u00ebrtet\u00eb q\u00eb mund ta merrja k\u00ebt\u00eb t\u00eb v\u00ebrtet\u00eb timen dhe ta thosha hapur. Sidomos, duke qen\u00eb se isha befasuese i sakt\u00eb shumic\u00ebn e koh\u00ebs. Dhe n\u00ebse ky qasje nuk t\u00eb p\u00eblqen\u2026 ve\u00e7an\u00ebrisht n\u00ebse je qart\u00eb gabim dhe po b\u00ebn gj\u00ebra t\u00eb kota\u2026 N\u00eb p\u00ebrgjith\u00ebsi, pak njer\u00ebz mund t\u00eb toleronin nj\u00eb form\u00eb t\u00eb till\u00eb komunikimi. Megjithat\u00eb, disa mund\u00ebn, p\u00ebr shembull, un\u00eb. Kam nd\u00ebrtuar t\u00eb gjith\u00eb jet\u00ebn time mbi parimet meritorike. N\u00ebse m\u00eb tregon di\u00e7ka q\u00eb \u00ebsht\u00eb e gabuar, un\u00eb menj\u00ebher\u00eb do t\u00eb kthehem dhe do t\u00eb them: ke th\u00ebn\u00eb nj\u00eb gj\u00eb t\u00eb gabuar. Sigurisht, duke u ndjer\u00eb keq, dhe n\u00ebse ka ndonj\u00eb kontribut, do ta vler\u00ebsoj at\u00eb dhe do t\u00eb b\u00ebj veprime t\u00eb tjera t\u00eb duhura. N\u00eb an\u00ebn tjet\u00ebr, un\u00eb jam befasuese i sakt\u00eb nj\u00eb p\u00ebrqindje befasuese t\u00eb p\u00ebrgjithshme t\u00eb koh\u00ebs. Dhe kjo nuk funksionon shum\u00eb mir\u00eb n\u00eb marr\u00ebdh\u00ebnien me njer\u00ebzit. Un\u00eb nuk p\u00ebrpiqem t\u00eb jem i k\u00ebndsh\u00ebm, por e shtroj \u00e7\u00ebshtjen qart\u00eb. 'Kjo ndonj\u00ebher\u00eb nuk do t\u00eb funksionoj\u00eb, sepse nj\u00eb, dy dhe tre'. Dhe ata jan\u00eb si: 'Oof!'. Pati dhe pasojat e tjera, q\u00eb ndoshta \u00ebsht\u00eb m\u00eb mir\u00eb t\u2019i kalojm\u00eb: p\u00ebr shembull, ato q\u00eb \u00e7uan n\u00eb divorcin me gruan time dhe dhjet\u00eb vjet depresion pas k\u00ebsaj.<\/p>\n<p><\/p>\n<p>Sfidat jan\u00eb lufta me njer\u00ebzit, me perceptimin e tyre mbi at\u00eb q\u00eb ti mund ose nuk mund t\u00eb b\u00ebsh, \u00e7far\u00eb \u00ebsht\u00eb e r\u00ebnd\u00ebsishme dhe \u00e7far\u00eb jo. Kishte shum\u00eb sfida mbi stilin e kodimit. Un\u00eb ende shkruaj shum\u00eb kod, dhe n\u00eb ato koh\u00ebra m\u00eb duhej madje t\u00eb ngadal\u00ebsohesha, sepse b\u00ebja shum\u00eb detyra paralel dhe i b\u00ebja ato keq, n\u00eb vend q\u00eb t\u00eb p\u00ebrqendrohesha n\u00eb nj\u00eb. Tani, duke u kthyer prapa, kam shkruar gjysm\u00ebn e kodit t\u00eb ekipit Java JIT, ekipit C2. Krijuesi tjet\u00ebr m\u00eb i shpejt\u00eb shkruante me gjysm\u00ebn m\u00eb t\u00eb ngadalsh\u00ebm, i treti \u2013 edhe m\u00eb ngadal\u00eb dhe kjo ishte nj\u00eb r\u00ebnie eksponenciale. Njeriu i shtat\u00eb n\u00eb k\u00ebt\u00eb radh\u00eb ishte shum\u00eb, shum\u00eb ngadal\u00eb \u2013 k\u00ebshtu ka ndodhur gjithmon\u00eb! Kam prekur shum\u00eb kod. Kam par\u00eb, \u00e7far\u00eb shkruan \u00e7do kush, pa p\u00ebrjashtim, kam v\u00ebzhguar kodin e tyre, kam rishikuar secilin prej tyre, dhe ende vazhdoja t\u00eb shkruaja m\u00eb shum\u00eb se ndonj\u00ebri prej tyre. Me njer\u00ebzit nj\u00eb qasje e till\u00eb nuk funksionon aq mir\u00eb. Disa nuk e p\u00eblqejn\u00eb at\u00eb. Dhe kur ata nuk mund ta p\u00ebrballojn\u00eb, fillojn\u00eb t\u00eb lindin ankesat e ndryshme. P\u00ebr shembull, nj\u00eb her\u00eb m\u00eb than\u00eb t\u00eb ndalesha s\u00eb shkruari kod, sepse shkruaja shum\u00eb kod dhe kjo v\u00eb n\u00eb rrezik ekipin, dhe p\u00ebr mua e gjith\u00eb kjo ting\u00ebllonte si nj\u00eb shaka: njeri, n\u00ebse e gjith\u00eb ekipi tjet\u00ebr zhduket, dhe un\u00eb vazhdoj t\u00eb shkruaj kod, ti do t\u00eb humbas\u00ebsh vet\u00ebm gjysm\u00ebn e ekipit. Nga ana tjet\u00ebr, n\u00ebse vazhdoj t\u00eb shkruaj kod dhe ti humbas\u00ebsh gjysm\u00ebn e ekipit \u2013 kjo ting\u00ebllon si menaxhim shum\u00eb t\u00eb keq. Nuk kam menduar kurr\u00eb p\u00ebr k\u00ebt\u00eb, kurr\u00eb nuk kam folur p\u00ebr k\u00ebt\u00eb, por megjithat\u00eb ishte diku n\u00eb mendjen time. N\u00eb pjes\u00ebn e pasme t\u00eb vet\u00ebdijes time, kishte nj\u00eb mendim: \u2018A jeni t\u00eb gjith\u00eb n\u00eb shaka?\u2019. Pra, sfida m\u00eb e madhe isha un\u00eb dhe marr\u00ebdh\u00ebniet e mia me njer\u00ebzit. Tani e kuptoj veten m\u00eb mir\u00eb, kam qen\u00eb nj\u00eb lider ekipi p\u00ebr programuesit p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb, dhe tani u them njer\u00ebzve drejtp\u00ebrdrejt: e di, un\u00eb jam ai q\u00eb jam, dhe do t\u2019ju duhet t\u00eb p\u00ebrballeni me mua \u2013 nuk \u00ebsht\u00eb problem q\u00eb un\u00eb t\u00eb q\u00ebndroj k\u00ebtu? Dhe kur ata filluan ta p\u00ebrballonin k\u00ebt\u00eb, gjith\u00e7ka filloi t\u00eb funksiononte. N\u00eb t\u00eb v\u00ebrtet\u00eb, un\u00eb nuk jam as i keq, as i mir\u00eb, nuk kam asnj\u00eb q\u00ebllim t\u00eb keq apo ambicie egoiste, kjo \u00ebsht\u00eb thjesht thelbi im, dhe ndonj\u00ebher\u00eb duhet t\u00eb jetosh me t\u00eb.<\/p>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Koh\u00ebt e fundit, t\u00eb gjith\u00eb kan\u00eb filluar t\u00eb flasin p\u00ebr vet\u00ebdijen p\u00ebr introvert\u00ebt, dhe n\u00eb p\u00ebrgjith\u00ebsi p\u00ebr aft\u00ebsit\u00eb e buta. \u00c7far\u00eb mund t\u00eb thuhet p\u00ebr k\u00ebt\u00eb?<\/p>\n<p><\/p>\n<p><strong>: K\u00ebshtu \u00ebsht\u00eb!<\/strong>Po, ishte nj\u00eb kuptim dhe m\u00ebsim q\u00eb e nxora nga zhvillimi me gruan time. Ajo q\u00eb m\u00ebsova nga divorci ishte njohja e vetvetes. K\u00ebshtu fillova t\u00eb kuptoja njer\u00ebzit e tjer\u00eb. T\u00eb kuptoja se si funksionon ky interaksion. Kjo solli zbulime nj\u00eb pas nj\u00eb. Pash\u00eb se kush isha dhe se \u00e7far\u00eb p\u00ebrfaq\u00ebsoja. Ajo q\u00eb b\u00ebj: ose jam i shqet\u00ebsuar p\u00ebr detyr\u00ebn, ose shmang konfliktin, ose di\u00e7ka tjet\u00ebr \u2013 dhe nj\u00eb shkall\u00eb e till\u00eb e vet\u00ebdijesit me t\u00eb v\u00ebrtet\u00eb ndihmon p\u00ebr t\u00eb mbajtur veten n\u00ebn kontroll. Pas k\u00ebsaj, gjith\u00e7ka b\u00ebhet m\u00eb e leht\u00eb. Nj\u00eb gj\u00eb q\u00eb e kam ndjer\u00eb jo vet\u00ebm tek un\u00eb, por edhe tek programues t\u00eb tjer\u00eb \u2013 \u00ebsht\u00eb paaft\u00ebsia p\u00ebr t\u00eb shprehur mendimet kur je n\u00eb nj\u00eb gjendje emocionale stresuese. P\u00ebr shembull, je duke koduar, je n\u00eb nj\u00eb gjendje fluksi, dhe papritmas dikush vjen dhe fillon t\u00eb b\u00ebrtas\u00eb n\u00eb panik, se di\u00e7ka ka shkuar keq dhe tani do t\u00eb merren masa ekstreme ndaj teje. Dhe nuk mund t\u00eb thuash asnj\u00eb fjal\u00eb, sepse je n\u00eb nj\u00eb gjendje emocionale stresuese. Njohurit\u00eb e fituara t\u00eb lejojn\u00eb t\u00eb p\u00ebrgatitesh p\u00ebr k\u00ebt\u00eb moment, ta kalosh dhe t\u00eb kalosh n\u00eb nj\u00eb plan t\u00ebrheqjeje, pas t\u00eb cilit mund t\u00eb b\u00ebsh di\u00e7ka. Pra, po, kur fillon t\u00eb kuptosh si funksionon gjith\u00e7ka \u2013 kjo \u00ebsht\u00eb nj\u00eb ngjarje t\u00eb madhe q\u00eb ndryshon jet\u00ebn.\u00a0<br \/>\nUn\u00eb vet\u00eb nuk arrita t\u00eb gjej fjal\u00ebt e duhura, por mbajta mend se si t\u00eb veproj. Thelbi \u00ebsht\u00eb se kjo reagim \u00ebsht\u00eb po aq fizik sa \u00ebsht\u00eb verbale dhe t\u00eb nevojitet hap\u00ebsir\u00eb. Nj\u00eb hap\u00ebsir\u00eb e till\u00eb, n\u00eb kuptimin zen. K\u00ebt\u00eb duhet ta shpjegosh, dhe pastaj t\u00eb shp\u00ebrthesh anash \u2013 thjesht fizikisht. Kur hesht n\u00eb fjal\u00eb, mund t\u00eb p\u00ebrpunosh situat\u00ebn n\u00eb aspektin e emocioneve. Nd\u00ebrsa adrenalina arrin n\u00eb tru, t\u00eb kalon n\u00eb modin \"godit ose iki\", ti tashm\u00eb nuk mund t\u00eb thuash asgj\u00eb, jo \u2013 tani je idiot, nj\u00eb inxhinier p\u00ebr t\u00eb prekur, i paaft\u00eb p\u00ebr nj\u00eb p\u00ebrgjigje t\u00eb denj\u00eb ose p\u00ebr t\u00eb ndaluar sulmin, dhe sulmuesi mund t\u00eb sulmoj\u00eb p\u00ebrs\u00ebri dhe p\u00ebrs\u00ebri. Fillimisht duhet t\u00eb b\u00ebhesh p\u00ebrs\u00ebri vetvetja, t\u00eb rikuperosh kontrollin, t\u00eb dal\u00ebsh nga moda \"godit ose iki\". <\/p>\n<p><\/p>\n<p>Dhe p\u00ebr k\u00ebt\u00eb \u00ebsht\u00eb e nevojshme nj\u00eb hap\u00ebsir\u00eb verbale. Thjesht nj\u00eb hap\u00ebsir\u00eb t\u00eb lir\u00eb. N\u00ebse n\u00eb t\u00eb v\u00ebrtet\u00eb do t\u00eb thuash di\u00e7ka, mund t\u00eb theksohesh dhe pastaj t\u00eb gjesh n\u00eb t\u00eb v\u00ebrtet\u00eb \"hap\u00ebsir\u00ebn\": t\u00eb shkosh p\u00ebr nj\u00eb sh\u00ebtitje n\u00eb park, t\u00eb mbyllesh n\u00eb dush \u2013 nuk ka r\u00ebnd\u00ebsi. K\u00ebtu \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb \u00e7lirohesh p\u00ebrkoh\u00ebsisht nga ajo situat\u00eb. Sapo p\u00ebr pak sekonda t\u00eb shk\u00ebputesh, kontrolli rikthehet, fillon t\u00eb mendosh qart\u00eb. \"Mir\u00eb, nuk jam ndonj\u00eb idiot, nuk po b\u00ebj gj\u00ebra t\u00eb \u00e7mendura, jam nj\u00eb person mjaft i dobish\u00ebm\". Sapo arrit\u00ebm t\u00eb bindim veten, \u00ebsht\u00eb koha t\u00eb kalosh n\u00eb faz\u00ebn tjet\u00ebr: t\u00eb kuptosh se \u00e7far\u00eb ndodhi. T\u00eb sulmohej, sulmi erdhi nga nj\u00eb vend i papritur, ishte nj\u00eb kurth i pabes\u00eb. Kjo \u00ebsht\u00eb keq. Hapi tjet\u00ebr \u00ebsht\u00eb t\u00eb kuptosh pse sulmuesi kishte nevoj\u00eb p\u00ebr k\u00ebt\u00eb. Me t\u00eb v\u00ebrtet\u00eb, p\u00ebrse? Ndoshta sepse ai vet\u00eb ishte n\u00eb zem\u00ebrim? Pse ai \u00ebsht\u00eb n\u00eb zem\u00ebrim? Ndoshta sepse ai e kishte b\u00ebr\u00eb nj\u00eb gabim dhe nuk mund ta pranoj\u00eb p\u00ebrgjegj\u00ebsin\u00eb? K\u00ebshtu duhet t\u00eb p\u00ebrpunosh t\u00eb gjith\u00eb situat\u00ebn me kujdes. Por p\u00ebr k\u00ebt\u00eb, t\u00eb nevojitet nj\u00eb hap\u00ebsir\u00eb p\u00ebr manovrim, hap\u00ebsir\u00eb verbale. Hapi i par\u00eb \u00ebsht\u00eb t\u00eb prish\u00ebsh kontaktin verbal. T\u00eb largohesh nga diskutimi n\u00eb fjal\u00eb. T\u00eb anulosh at\u00eb, t\u00eb ik\u00ebsh sa m\u00eb shpejt t\u00eb jet\u00eb e mundur. N\u00ebse \u00ebsht\u00eb nj\u00eb bised\u00eb telefonike \u2013 thjesht vendos telefonin \u2013 kjo \u00ebsht\u00eb nj\u00eb aft\u00ebsi q\u00eb kam fituar nga komunikimi me ish-gruan time. N\u00ebse biseda nuk po \u00e7on askund, thjesht thuaj \"mirupafshim\" dhe e hedh telefonin. Nga ana tjet\u00ebr: \"bla-bla-bla\", ti p\u00ebrgjigjesh: \"po, mir\u00eb, deri sa!\" dhe e hedh telefonin. Thjesht prish bised\u00ebn. Pes\u00eb minuta m\u00eb von\u00eb, kur t\u00eb kthehet aft\u00ebsia p\u00ebr t\u00eb menduar racionalisht, kur t'i kesh ftohur pak, b\u00ebhet e mundur t\u00eb mendosh \u00e7far\u00eb ka ndodhur dhe \u00e7far\u00eb do ndodh\u00eb m\u00eb pas. Dhe t\u00eb fillosh t\u00eb formuloj nj\u00eb p\u00ebrgjigje t\u00eb menduar, dhe jo thjesht t\u00eb reagosh emocionalisht. P\u00ebr mua, nj\u00eb shp\u00ebrthim n\u00eb vet\u00ebdije erdhi nga fakti se n\u00eb rastin e stresit emocional, nuk mund t\u00eb flas. T\u00eb dal\u00ebsh nga ky gjendje, t\u00eb mendosh dhe t\u00eb planosh se si t\u00eb p\u00ebrgjigjesh dhe t\u00eb kompensosh problemet \u2013 k\u00ebto jan\u00eb hapat e duhur n\u00eb rast se nuk mund t\u00eb flas\u00ebsh. M\u00ebnyra m\u00eb e thjesht\u00eb \u00ebsht\u00eb t\u00eb ik\u00ebsh nga situata ku shfaqet stresi emocional dhe thjesht t\u00eb ndalosh s\u00eb pjes\u00ebmarruri n\u00eb k\u00ebt\u00eb stres. Pas k\u00ebsaj, fitojn\u00eb aft\u00ebsin\u00eb p\u00ebr t\u00eb menduar, kur mund t\u00eb mendosh, ndihesh n\u00eb gjendje t\u00eb flas\u00ebsh, etj.<\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 k\u00ebsaj, n\u00eb gjykat\u00eb avokati i pal\u00ebs tjet\u00ebr p\u00ebrpiqet t\u00eb b\u00ebj\u00eb k\u00ebt\u00eb me ty \u2013 tani \u00ebsht\u00eb e qart\u00eb pse. Sepse ai ka mund\u00ebsin\u00eb t\u00eb t\u00eb shtyp\u00eb deri n\u00eb nj\u00eb gjendje, q\u00eb ti nuk mund t\u00eb thuash as emrin t\u00ebnd, p\u00ebr shembull. N\u00eb kuptimin m\u00eb t\u00eb drejtp\u00ebrdrejt\u00eb, nuk mund t\u00eb flas\u00ebsh. N\u00ebse kjo t\u00eb ndodh dhe n\u00ebse e di se do t\u00eb jesh n\u00eb nj\u00eb vend ku ka luft\u00ebra fjal\u00ebsh, n\u00eb nj\u00eb vend si\u00e7 \u00ebsht\u00eb gjykata, at\u00ebher\u00eb mund t\u00eb vish me avokatin tuaj. Avokati do t\u00eb t\u00eb mbroj\u00eb dhe do t\u00eb ndal\u00eb sulmin verbal, dhe do ta b\u00ebj\u00eb k\u00ebt\u00eb n\u00eb nj\u00eb m\u00ebnyr\u00eb plot\u00ebsisht ligjore, dhe do t\u00eb rikthesh hap\u00ebsir\u00ebn t\u00ebnde t\u00eb humbur zen. P\u00ebr shembull, mua m\u00eb ndodhi disa her\u00eb t\u00eb duhet t\u00eb telefonoj familjen, gjykat\u00ebsi e pranoi k\u00ebt\u00eb me shum\u00eb miq\u00ebsi, por avokati i pal\u00ebs tjet\u00ebr po th\u00ebrriste dhe th\u00ebrriste ndaj meje, nuk mund t\u00eb p\u00ebrfshihesha n\u00eb bised\u00eb. N\u00eb raste t\u00eb tilla, m\u00eb mir\u00eb funksionon p\u00ebrdorimi i nj\u00eb nd\u00ebrmjet\u00ebsi. Nd\u00ebrmjet\u00ebsi ndalon gjith\u00eb at\u00eb presion q\u00eb bie mbi ty me nj\u00eb rrjedh\u00eb t\u00eb vazhdueshme, ti gjen hap\u00ebsir\u00ebn e nevojshme zen, dhe bashk\u00eb me t\u00eb rikthehet aft\u00ebsia p\u00ebr t\u00eb folur. Kjo \u00ebsht\u00eb nj\u00eb fush\u00eb e gjithanshme e njohurive, ku s\u00eb bashku duhet t\u00eb m\u00ebsohet shum\u00eb, t\u00eb zbulohet shum\u00eb brenda vetes, dhe e gjith\u00eb kjo shnd\u00ebrrohet n\u00eb vendime strategjike me nivel t\u00eb lart\u00eb, t\u00eb ndryshme p\u00ebr njer\u00ebz t\u00eb ndrysh\u00ebm. Disa njer\u00ebz nuk e kan\u00eb problemin e m\u00ebsip\u00ebrm, zakonisht nuk e kan\u00eb ata q\u00eb merren profesionalisht me shitjet. T\u00eb gjith\u00eb ata q\u00eb jetojn\u00eb me fjal\u00eb \u2013 k\u00ebng\u00ebtar\u00ebt e njohur, poet\u00ebt, lider\u00ebt fetar\u00eb dhe politikan\u00ebt, ata gjithmon\u00eb kan\u00eb di\u00e7ka p\u00ebr t\u00eb th\u00ebn\u00eb. Ata nuk kan\u00eb k\u00ebto probleme, por un\u00eb i kam.<\/p>\n<p><\/p>\n<p><strong>Andrei<\/strong>: Kjo ishte\u2026 e papritur. Mir\u00eb, ne kemi diskutuar mjaft dhe \u00ebsht\u00eb koha p\u00ebr t\u00eb p\u00ebrfunduar k\u00ebt\u00eb intervist\u00eb. Patjet\u00ebr do t\u00eb takohemi n\u00eb konferenc\u00eb dhe mund t\u00eb vazhdojm\u00eb k\u00ebt\u00eb dialog. Shihemi n\u00eb Hydra!<\/p>\n<p><\/p>\n<blockquote><p>Mund t\u00eb vazhdoni komunikimin me Kliffin n\u00eb konferenc\u00ebn Hydra 2019, e cila do t\u00eb mbahet m\u00eb 11-12 korrik 2019 n\u00eb Sh\u00ebn Petersburg. Ai do t\u00eb vij\u00eb me nj\u00eb referat <noindex><a rel=\"nofollow\" href=\"https:\/\/hydraconf.com\/2019\/talks\/2jix5mst7iduyp9linqhfj\/?utm_source=habr&amp;utm_medium=45871\">\u00abP\u00ebrvoja e Azul Hardware Transactional Memory\u00bb<\/a><\/noindex>. Biletat mund t\u00eb blihen <noindex><a rel=\"nofollow\" href=\"https:\/\/hydraconf.ru\/?utm_source=habr&amp;utm_medium=458718\">n\u00eb faqen zyrtare<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Burimi: <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.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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\/sq\/blog\/administrirovanie\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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 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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/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\udd47Intervista e madhe me Kliff KliK \u2014 babai i JIT-kompilimit n\u00eb Java | ProHoster","description":"KliFF KliK \u2014 CTO i kompanis\u00eb Cratus (sensor\u00eb IoT p\u00ebr p\u00ebrmir\u00ebsimin e proceseve), themelues dhe bashk\u00ebthemelues i disa startup-eve (p\u00ebrfshir\u00eb Rocket Realtime School, Neurensic dhe H2O.ai) me disa dalje t\u00eb suksesshme. KliFF shkroi kompilatorin e tij t\u00eb par\u00eb n\u00eb mosh\u00ebn 15 vje\u00e7are (Pascal p\u00ebr TRS Z-80)! Ai \u00ebsht\u00eb m\u00eb i njohur p\u00ebr pun\u00ebn mbi C2 n\u00eb Java (the Sea of Nodes IR). Ky kompilator tregoi","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/bolshoe-intervyu-s-kliffom-klikom-ottsom-jit-kompilyatsii-v-java","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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 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","og:url":"https:\/\/prohoster.info\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/35851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=35851"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35851\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=35851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=35851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=35851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}