Nindot nga interbyu sa Cliff Click, ang amahan sa JIT compilation sa Java

Nindot nga interbyu sa Cliff Click, ang amahan sa JIT compilation sa JavaCliff Click β€” CTO sa Cratus (IoT sensors alang sa pagpaayo sa proseso), founder ug co-founder sa daghang mga startup (lakip ang Rocket Realtime School, Neurensic ug H2O.ai) nga adunay daghang malampuson nga paggawas. Gisulat ni Cliff ang iyang unang compiler sa edad nga 15 (Pascal alang sa TRS Z-80)! Nailhan siya sa iyang trabaho sa C2 sa Java (ang Sea of ​​Nodes IR). Gipakita niini nga compiler sa kalibutan nga ang JIT makahimo og taas nga kalidad nga code, nga usa sa mga hinungdan sa pagtungha sa Java isip usa sa mga nag-unang modernong software platform. Dayon gitabangan ni Cliff ang Azul Systems sa paghimo og 864-core mainframe nga adunay purong Java software nga nagsuporta sa GC nga paghunong sa usa ka 500-gigabyte heap sulod sa 10 milliseconds. Sa kinatibuk-an, si Cliff nakahimo sa pagtrabaho sa tanang aspeto sa JVM.

 
Kini nga habrapost usa ka maayo nga pakighinabi ni Cliff. Maghisgot kita bahin sa mosunod nga mga topiko:

  • Pagbalhin ngadto sa ubos nga lebel nga pag-optimize
  • Giunsa paghimo ang usa ka dako nga refactoring
  • Modelo sa gasto
  • Ubos nga lebel sa pag-optimize sa pagbansay
  • Praktikal nga mga pananglitan sa pagpalambo sa performance
  • Ngano nga maghimo sa imong kaugalingon nga programming language
  • Karera sa Performance Engineer
  • Teknikal nga mga Hagit
  • Usa ka gamay bahin sa pagrehistro sa alokasyon ug multi-core
  • Ang pinakadako nga hagit sa kinabuhi

Ang interbyu gihimo ni:

  • Andrey Satarin gikan sa Amazon Web Services. Sa iyang karera, nakahimo siya sa pagtrabaho sa hingpit nga lain-laing mga proyekto: gisulayan niya ang NewSQL distributed database sa Yandex, usa ka cloud detection system sa Kaspersky Lab, usa ka multiplayer nga dula sa Mail.ru ug usa ka serbisyo alang sa pagkalkula sa mga presyo sa foreign exchange sa Deutsche Bank. Interesado sa pagsulay sa dako nga backend ug gipang-apod-apod nga mga sistema.
  • Vladimir Sitnikov gikan sa Netcracker. Napulo ka tuig nga pagtrabaho sa performance ug scalability sa NetCracker OS, software nga gigamit sa mga telecom operators aron ma-automate ang mga proseso sa pagdumala sa network ug network equipment. Interesado sa mga isyu sa performance sa Java ug Oracle Database. Awtor sa labaw pa sa usa ka dosena nga pagpaayo sa pasundayag sa opisyal nga drayber sa PostgreSQL JDBC.

Pagbalhin ngadto sa ubos nga lebel nga pag-optimize

Andrei: Dako ka nga ngalan sa kalibutan sa JIT compilation, Java, ug performance work sa kinatibuk-an, di ba? 

Cliff: Parang ganun na nga!

Andrei: Magsugod ta sa pipila ka kinatibuk-ang pangutana bahin sa pagbuhat sa trabaho. Unsa ang imong hunahuna bahin sa pagpili tali sa taas nga lebel ug ubos nga lebel nga pag-optimize sama sa pagtrabaho sa lebel sa CPU?

Cliff: Oo, ang tanan yano ra dinhi. Ang pinakapaspas nga kodigo mao ang dili modagan. Busa, kinahanglan nimo kanunay nga magsugod gikan sa taas nga lebel, magtrabaho sa mga algorithm. Ang usa ka mas maayo nga O nga notasyon mopildi sa usa ka mas grabe nga O nga notasyon, gawas kung ang pipila ka igo nga dagkong mga makanunayon mangilabot. Ang ubos nga lebel nga mga butang nagpadayon sa katapusan. Kasagaran, kung imong na-optimize ang nahabilin sa imong stack nga igo ug adunay nahabilin nga makapaikag nga mga butang, kana usa ka ubos nga lebel. Apan unsaon pagsugod gikan sa taas nga lebel? Giunsa nimo pagkahibalo nga igo na nga taas nga lebel nga trabaho ang nahimo? Aw... dili. Wala'y andam nga mga resipe. Kinahanglan nimo nga masabtan ang problema, pagdesisyon kung unsa ang imong buhaton (aron dili nimo buhaton ang wala kinahanglana nga mga lakang sa umaabot) ug unya mahimo nimong mahibal-an ang profiler, nga makasulti usa ka butang nga mapuslanon. Sa usa ka punto, ikaw mismo nakaamgo nga imong gitangtang ang wala kinahanglana nga mga butang ug panahon na nga buhaton ang pipila ka ubos nga lebel nga maayo nga pag-tune. Kini siguradong usa ka espesyal nga matang sa arte. Adunay daghang mga tawo nga nagbuhat sa wala kinahanglana nga mga butang, apan kusog kaayo nga paglihok nga wala na silay panahon nga mabalaka bahin sa pagka-produktibo. Apan kini hangtod nga ang pangutana mitungha nga prangka. Kasagaran 99% sa panahon walay usa nga nagpakabana sa akong gibuhat, hangtod sa higayon nga ang usa ka hinungdanon nga butang moabut sa kritikal nga dalan nga wala’y nagpakabana. Ug dinhi ang tanan nagsugod sa pagsamok kanimo bahin sa "ngano nga wala kini molihok nga hingpit gikan sa sinugdanan." Sa kinatibuk-an, kanunay adunay usa ka butang nga mapauswag sa pasundayag. Apan 99% sa panahon nga wala kay mga lead! Naningkamot ka lang sa paghimo sa usa ka butang nga molihok ug sa proseso nahibal-an nimo kung unsa ang hinungdanon. Dili nimo mahibal-an daan nga kini nga piraso kinahanglan nga perpekto, busa, sa tinuud, kinahanglan ka nga perpekto sa tanan. Apan imposible kini ug dili nimo kini buhaton. Kanunay adunay daghang mga butang nga ayohon - ug normal kana.

Giunsa paghimo ang usa ka dako nga refactoring

Andrei: Giunsa nimo pagtrabaho ang usa ka pasundayag? Kini usa ka cross-cutting nga problema. Pananglitan, kinahanglan ba nimo nga magtrabaho sa mga problema nga mitumaw gikan sa intersection sa daghang naglungtad nga gamit?

Cliff: Ako naningkamot sa paglikay niini. Kung nahibal-an nako nga ang pasundayag usa ka isyu, gihunahuna ko kini sa wala pa ako magsugod sa pag-coding, labi na sa mga istruktura sa datos. Apan sa kasagaran imong madiskobrehan kining tanan sa ulahi. Ug unya kinahanglan ka nga moadto sa grabe nga mga lakang ug buhaton ang gitawag nako nga "pagsulat pag-usab ug pagbuntog": kinahanglan nimo nga makakuha usa ka dako nga piraso. Ang pipila sa mga code kinahanglan pa nga isulat pag-usab tungod sa mga problema sa pasundayag o uban pa. Bisan unsa pa ang hinungdan sa pagsulat pag-usab sa code, hapit kanunay nga mas maayo nga isulat pag-usab ang usa ka mas dako nga piraso kaysa usa ka gamay nga piraso. Niining higayona, ang tanan nagsugod sa pagkurog sa kahadlok: "Oh Dios ko, dili ka makahikap sa daghang code!" Apan sa tinuud, kini nga pamaagi hapit kanunay molihok nga labi ka maayo. Kinahanglan nimo nga atubangon dayon ang usa ka dako nga problema, pagdrowing og usa ka dako nga lingin sa palibot niini ug isulti: Akong isulat pag-usab ang tanan sulod sa lingin. Ang utlanan mas gamay kay sa sulod niini nga kinahanglang ilisan. Ug kung ang ingon nga delineation sa mga utlanan nagtugot kanimo sa pagbuhat sa trabaho sa sulod nga hingpit, ang imong mga kamot libre, buhata ang imong gusto. Sa higayon nga imong masabtan ang problema, ang proseso sa pagsulat pag-usab mas sayon, busa kuhaa ang usa ka dako nga pagpaak!
Sa parehas nga oras, kung maghimo ka usa ka dako nga pagsulat pag-usab ug nahibal-an nga ang pasundayag mahimong usa ka isyu, mahimo ka dayon magsugod sa pagkabalaka bahin niini. Kasagaran kini mahimong yano nga mga butang sama sa "ayaw pagkopya sa datos, pagdumala sa datos sa yano nga mahimo, himoa kini nga gamay." Sa dagkong mga pagsulat pag-usab, adunay mga sumbanan nga paagi aron mapauswag ang pasundayag. Ug hapit sila kanunay nga naglibot sa datos.

Modelo sa gasto

Andrei: Sa usa sa mga podcast nga imong gihisgutan mahitungod sa mga modelo sa gasto sa konteksto sa pagka-produktibo. Mahimo ba nimo ipasabut kung unsa ang imong gipasabut niini?

Cliff: Sigurado. Natawo ko sa usa ka panahon diin ang pasundayag sa processor hinungdanon kaayo. Ug kini nga panahon mibalik pag-usab - ang kapalaran dili walay irony. Nagsugod ako sa pagpuyo sa mga adlaw sa walo ka bit nga mga makina; ang akong una nga kompyuter nagtrabaho uban ang 256 bytes. Eksakto nga bytes. Ang tanan gamay ra kaayo. Kinahanglang maihap ang mga instruksyon, ug samtang nagsugod kami sa pag-uswag sa stack sa programming language, ang mga pinulongan nagkadaghan. Adunay Assembler, unya Basic, unya C, ug C ang nag-atiman sa daghang mga detalye, sama sa alokasyon sa rehistro ug pagpili sa pagtudlo. Apan ang tanan klaro kaayo didto, ug kung maghimo ako usa ka pointer sa usa ka pananglitan sa usa ka variable, nan ako makakuha og load, ug ang gasto sa kini nga panudlo nahibal-an. Ang hardware naghimo og usa ka piho nga gidaghanon sa mga siklo sa makina, mao nga ang katulin sa pagpatuman sa lain-laing mga butang mahimong kalkulado pinaagi lamang sa pagdugang sa tanan nga mga instruksyon nga imong padaganon. Ang matag pagtandi / pagsulay / sanga / tawag / load / tindahan mahimong idugang ug giingon: kana ang oras sa pagpatuman alang kanimo. Kung nagtrabaho sa pagpauswag sa pasundayag, siguradong hatagan nimo ug pagtagad kung unsang mga numero ang katumbas sa gagmay nga mga init nga siklo. 
Apan sa diha nga mobalhin ka sa Java, Python ug susama nga mga butang, dali ka nga mopahilayo gikan sa ubos nga lebel nga hardware. Unsa ang gasto sa pagtawag sa usa ka getter sa Java? Kung tama ang JIT sa HotSpot inline, kini mag-load, apan kung dili kini mahimo, kini usa ka tawag sa function. Tungod kay ang tawag anaa sa usa ka mainit nga loop, kini molapas sa tanan nga uban nga mga pag-optimize sa maong loop. Busa, ang tinuod nga gasto mahimong mas taas. Ug nawad-an ka dayon sa abilidad sa pagtan-aw sa usa ka piraso sa code ug nasabtan nga kinahanglan namon nga ipatuman kini sa mga termino sa katulin sa orasan sa processor, memorya ug gigamit nga cache. Kining tanan mahimong makaiikag lamang kung makasulod ka sa pasundayag.
Karon nahibal-an namon ang among kaugalingon sa usa ka kahimtang diin ang mga katulin sa processor halos wala’y pagtaas sa usa ka dekada. Mibalik ang karaang mga adlaw! Dili ka na makasalig sa maayo nga single-threaded nga pasundayag. Apan kung kalit ka nga mosulod sa parallel computing, lisud kaayo, ang tanan nagtan-aw kanimo sama sa James Bond. Napulo ka pilo nga pagpatulin dinhi kasagaran mahitabo sa mga lugar diin adunay nakagubot sa usa ka butang. Ang concurrency nanginahanglan daghang trabaho. Aron makuha ang XNUMXx nga pagpadali, kinahanglan nimo nga masabtan ang modelo sa gasto. Unsa ug pila ang gasto? Ug aron mahimo kini, kinahanglan nimo nga masabtan kung giunsa ang dila mohaum sa nagpahiping hardware.
Gipili ni Martin Thompson ang usa ka maayong pulong alang sa iyang blog Mekanikal nga simpatiya! Kinahanglan nimong masabtan kung unsa ang buhaton sa hardware, kung giunsa kini buhaton, ug kung ngano nga gibuhat niini kung unsa ang gibuhat sa una. Gamit kini, dali ra magsugod sa pag-ihap sa mga panudlo ug mahibal-an kung asa moadto ang oras sa pagpatay. Kung wala ka'y ​​angay nga pagbansay, nangita ka lang usa ka itom nga iring sa usa ka ngitngit nga kwarto. Nakita nako ang mga tawo nga nag-optimize sa pasundayag sa tanan nga oras nga wala’y ideya kung unsa ang impyerno nga ilang gibuhat. Nag-antos sila pag-ayo ug wala kaayoy pag-uswag. Ug kung gikuha nako ang parehas nga piraso sa code, pag-slip sa usa ka pares nga gagmay nga mga hack ug pagkuha usa ka lima o napulo ka pilo nga pagpadali, ingon sila: maayo, dili kana patas, nahibal-an na namon nga mas maayo ka. Kahibulongan. Unsa ang akong gihisgutan ... ang modelo sa gasto mahitungod sa unsa nga matang sa code ang imong gisulat ug unsa ka paspas kini modagan sa kasagaran sa dako nga hulagway.

Andrei: Ug unsaon nimo pagpabilin ang ingon nga volume sa imong ulo? Nakab-ot ba kini nga adunay daghang kasinatian, o? Diin gikan ang maong kasinatian?

Cliff: Aw, wala nako makuha ang akong kasinatian sa labing sayon ​​nga paagi. Nagprograma ko sa Assembly balik sa mga adlaw nga masabtan nimo ang matag panudlo. Morag hungog, apan sukad niadto ang set sa panudlo sa Z80 kanunay nga nagpabilin sa akong ulo, sa akong panumduman. Dili nako mahinumduman ang mga ngalan sa mga tawo sulod sa usa ka minuto sa pagsulti, apan akong nahinumduman ang code nga gisulat 40 ka tuig na ang milabay. Kataw-anan, murag syndrome"idiot nga siyentista".

Ubos nga lebel sa pag-optimize sa pagbansay

Andrei: Aduna bay mas sayon ​​nga paagi sa pagsulod?

Cliff: Oo ug dili. Ang hardware nga gigamit natong tanan wala kaayo nagbag-o sa paglabay sa panahon. Ang tanan naggamit sa x86, gawas sa Arm smartphones. Kung wala ka maghimo usa ka matang sa hardcore embedding, gibuhat nimo ang parehas nga butang. Okay, sunod. Ang mga instruksiyon wala usab mausab sulod sa mga siglo. Kinahanglan ka nga moadto ug isulat ang usa ka butang sa Assembly. Dili daghan, apan igo aron magsugod sa pagsabut. Nagpahiyom ka, apan seryoso ako nga nagsulti. Kinahanglan nimong masabtan ang mga sulat tali sa pinulongan ug hardware. Pagkahuman niana kinahanglan ka nga moadto ug magsulat og gamay ug maghimo usa ka gamay nga tigkompiler sa dulaan alang sa usa ka gamay nga sinultian nga dulaan. Ang sama sa dulaan nagpasabut nga kini kinahanglan nga himuon sa usa ka makatarunganon nga oras. Mahimo kini nga labi ka yano, apan kinahanglan nga maghimo mga panudlo. Ang buhat sa pagmugna og instruksyon makatabang kanimo nga masabtan ang modelo sa gasto alang sa tulay tali sa taas nga lebel nga code nga gisulat sa tanan ug sa machine code nga nagdagan sa hardware. Kini nga sulat masunog sa utok sa panahon nga gisulat ang compiler. Bisan ang pinakasimple nga compiler. Pagkahuman niana, mahimo ka magsugod sa pagtan-aw sa Java ug ang kamatuoran nga ang semantic chasm niini labi ka lawom, ug labi ka lisud ang paghimo og mga tulay sa ibabaw niini. Sa Java, mas lisud sabton kung maayo ba o daotan ang atong tulay, unsa ang hinungdan sa pagkaguba ug kung unsa ang dili. Apan kinahanglan nimo ang usa ka matang sa pagsugod nga punto diin imong tan-awon ang code ug sabton: "oo, kini nga getter kinahanglan nga ma-inline matag oras." Ug unya kini nahimo nga usahay kini mahitabo, gawas sa sitwasyon kung ang pamaagi mahimong dako kaayo, ug ang JIT nagsugod sa pag-inlining sa tanan. Ang pasundayag sa maong mga dapit mahimong matagna dayon. Kasagaran ang mga getter nagtrabaho og maayo, apan unya imong tan-awon ang dagkong mga init nga mga galong ug nahibal-an nga adunay pipila ka mga tawag sa function nga naglutaw sa palibot didto nga wala mahibal-an kung unsa ang ilang gibuhat. Kini ang problema sa kaylap nga paggamit sa mga getter, ang hinungdan ngano nga wala sila ma-inline tungod kay dili klaro kung sila usa ka getter. Kung ikaw adunay usa ka gamay kaayo nga base sa code, mahimo nimong hinumdoman kini ug dayon isulti: kini usa ka getter, ug kini usa ka setter. Sa usa ka dako nga base sa code, ang matag function nagpuyo sa kaugalingon nga kasaysayan, nga, sa kinatibuk-an, wala nahibal-an ni bisan kinsa. Ang profiler nag-ingon nga nawala ang 24% sa oras sa pipila ka loop ug aron masabtan kung unsa ang gibuhat niini nga loop, kinahanglan natong tan-awon ang matag function sa sulod. Imposible nga masabtan kini nga wala’y pagtuon sa function, ug kini seryoso nga nagpahinay sa proseso sa pagsabut. Mao nga dili ko mogamit og mga getter ug setter, naabot nako ang bag-ong lebel!
Asa makuha ang modelo sa gasto? Aw, duna kay mabasa, siyempre... Apan sa akong hunahuna ang labing maayong paagi mao ang paglihok. Ang paghimo sa usa ka gamay nga compiler mao ang labing kaayo nga paagi aron masabtan ang modelo sa gasto ug ipahiangay kini sa imong kaugalingon nga ulo. Ang usa ka gamay nga compiler nga angay alang sa pagprograma sa usa ka microwave usa ka buluhaton alang sa usa ka nagsugod. Bueno, ang akong gipasabut, kung naa ka na sa kahanas sa programming, igo na kana. Tanan kini nga mga butang sama sa pag-parse sa usa ka hilo nga naa kanimo ingon usa ka matang sa algebraic nga ekspresyon, pagkuha sa mga panudlo alang sa mga operasyon sa matematika gikan didto sa husto nga pagkasunod-sunod, pagkuha sa husto nga mga kantidad gikan sa mga rehistro - kining tanan gihimo sa usa ka higayon. Ug samtang buhaton nimo kini, kini maimprinta sa imong utok. Sa akong hunahuna nahibal-an sa tanan kung unsa ang gibuhat sa usa ka compiler. Ug kini maghatag ug pagsabot sa modelo sa gasto.

Praktikal nga mga pananglitan sa pagpalambo sa performance

Andrei: Unsa pa ang angay nimong hatagan ug pagtagad kung magtrabaho sa pagka-produktibo?

Cliff: Mga istruktura sa datos. By the way, oo, dugay na kong wala magtudlo niini nga mga klase... Rocket School. Makalingaw kini, apan nagkinahanglan kini og daghang paningkamot, ug ako usab adunay kinabuhi! OK ra. Mao nga, sa usa sa dako ug makapaikag nga mga klase, "Asa moadto ang imong pasundayag," gihatagan nako ang mga estudyante og usa ka pananglitan: duha ug tunga nga gigabytes nga datos sa fintech ang gibasa gikan sa usa ka CSV file ug dayon kinahanglan nila nga kuwentahon ang gidaghanon sa mga produkto nga gibaligya. . Regular nga marka sa datos sa merkado. Ang mga pakete sa UDP nakabig sa format sa teksto sukad sa 70s. Chicago Mercantile Exchange - tanang matang sa mga butang sama sa mantekilya, mais, soybeans, mga butang nga sama niana. Gikinahanglan ang pag-ihap niini nga mga produkto, ang gidaghanon sa mga transaksyon, ang kasagaran nga gidaghanon sa paglihok sa mga pondo ug mga butang, ug uban pa. Simple ra kini nga matematika sa pamatigayon: pangitaa ang code sa produkto (kana ang 1-2 nga mga karakter sa lamesa sa hash), kuhaa ang kantidad, idugang kini sa usa sa mga set sa pamatigayon, idugang ang gidaghanon, idugang ang kantidad, ug uban pang mga butang. Simple kaayo nga math. Ang pagpatuman sa dulaan prangka kaayo: ang tanan naa sa usa ka file, gibasa nako ang file ug gibalhin kini, gibahin ang indibidwal nga mga rekord sa mga string sa Java, gipangita ang kinahanglan nga mga butang sa kanila ug gidugang kini sumala sa matematika nga gihulagway sa ibabaw. Ug kini nagtrabaho sa gamay nga tulin.

Uban niini nga pamaagi, klaro kung unsa ang nahitabo, ug ang parallel computing dili makatabang, di ba? Kini nahimo nga ang usa ka lima ka pilo nga pagtaas sa pasundayag mahimong makab-ot pinaagi lamang sa pagpili sa husto nga mga istruktura sa datos. Ug kini makapakurat bisan sa eksperyensiyadong mga programmer! Sa akong partikular nga kaso, ang lansis mao nga dili ka kinahanglan maghimo mga alokasyon sa panumduman sa usa ka mainit nga loop. Aw, dili kini ang tibuuk nga kamatuoran, apan sa kinatibuk-an - dili nimo kinahanglan nga i-highlight ang "kausa sa X" kung ang X igo na. Kung ang X duha ug tunga ka gigabytes, dili ka kinahanglan nga maggahin ug bisan unsa nga "kausa matag letra", o "kausa matag linya", o "kausa matag uma", bisan unsa nga ingon niana. Dinhi gigugol ang oras. Sa unsang paagi kini molihok? Hunahunaa nga nagtawag ko String.split() o BufferedReader.readLine(). Readline naghimo ug usa ka hilo gikan sa usa ka hugpong sa mga byte nga miabot sa network, kausa alang sa matag linya, alang sa matag usa sa gatusan ka milyon nga mga linya. Gikuha nako kini nga linya, gi-parse ug gilabay. Ngano nga gilabay ko kini - aw, giproseso ko na kini, mao ra. Mao nga, alang sa matag byte nga mabasa gikan sa kini nga 2.7G, duha ka mga karakter ang isulat sa linya, nga mao, na 5.4G, ug wala na nako kinahanglana sila alang sa bisan unsang dugang, mao nga sila gilabay. Kung imong tan-awon ang bandwidth sa memorya, nag-load kami sa 2.7G nga moagi sa memorya ug memory bus sa processor, ug dayon doble ang ipadala sa linya nga nahimutang sa panumduman, ug kining tanan nabuak kung ang matag bag-ong linya gihimo. Apan kinahanglan nako nga basahon kini, ang hardware nagbasa niini, bisan kung ang tanan maguba sa ulahi. Ug kinahanglan nako nga isulat kini tungod kay naghimo ako usa ka linya ug ang mga cache puno - ang cache dili maka-accommodate sa 2.7G. Busa, sa matag byte nga akong nabasa, nagbasa ko og duha pa ka byte ug nagsulat og duha pa ka byte, ug sa katapusan sila adunay 4: 1 nga ratio - sa niini nga ratio kita nag-usik sa memory bandwidth. Ug unya kini nahimo nga kung buhaton nako String.split() – dili kini ang kataposang higayon nga akong buhaton kini, basin adunay laing 6-7 ka field sa sulod. Mao nga ang klasiko nga kodigo sa pagbasa sa CSV ug dayon pag-parse sa mga kuwerdas moresulta sa usa ka pag-usik sa bandwidth sa memorya nga mga 14: 1 kalabot sa kung unsa ang gusto nimo nga maangkon. Kung imong ilabay kini nga mga pagpili, mahimo nimong makuha ang lima ka pilo nga pagpadali.

Ug dili kini lisud. Kung imong tan-awon ang code gikan sa husto nga anggulo, ang tanan mahimong yano sa higayon nga imong maamgohan ang problema. Dili nimo kinahanglan nga hunongon ang tanan nga paggahin sa memorya: ang bugtong problema mao nga imong gigahin ang usa ka butang ug kini mamatay dayon, ug sa dalan kini nagsunog sa usa ka hinungdanon nga kapanguhaan, nga sa kini nga kaso mao ang bandwidth sa memorya. Ug kining tanan moresulta sa pagkunhod sa produktibo. Sa x86 kasagaran kinahanglan nimo nga aktibo nga magsunog sa mga siklo sa processor, apan dinhi imong gisunog ang tanan nga memorya sa sayo pa. Ang solusyon mao ang pagpakunhod sa gidaghanon sa discharge. 
Ang laing bahin sa problema mao nga kung imong ipadagan ang profiler kung mahurot na ang memory stripe, sa diha nga kini mahitabo, kasagaran naghulat ka nga mobalik ang cache tungod kay kini puno sa basura nga imong giprodyus, tanan nga mga linya. Busa, ang matag load o tindahan nga operasyon mahimong hinay, tungod kay kini mosangpot sa cache misses - ang tibuok cache nahimong hinay, naghulat alang sa basura nga mobiya niini. Busa, ang profiler magpakita lamang sa mainit nga random nga kasaba nga gipahid sa tibuok loop - wala'y lain nga init nga panudlo o lugar sa code. Saba lang. Ug kung imong tan-awon ang mga siklo sa GC, silang tanan Young Generation ug super paspas - microseconds o milliseconds maximum. Human sa tanan, kining tanan nga panumduman mamatay dayon. Imong gigahin ang binilyon nga gigabytes, ug iyang giputol sila, ug giputol sila, ug giputol sila pag-usab. Kining tanan dali kaayong mahitabo. Kini nahimo nga adunay barato nga mga siklo sa GC, mainit nga kasaba sa tibuuk nga siklo, apan gusto namon nga makakuha usa ka 5x nga tulin. Niining higayona, kinahanglan nga adunay mosira sa imong ulo ug motingog: "ngano kini?!" Ang pag-awas sa memory strip wala gipakita sa klasiko nga debugger; kinahanglan nimo nga ipadagan ang hardware performance counter debugger ug tan-awa kini sa imong kaugalingon ug direkta. Apan kini dili direkta nga gidudahan gikan niining tulo ka mga sintomas. Ang ikatulo nga simtomas mao kung imong tan-awon kung unsa ang imong gipasiugda, pangutan-a ang profiler, ug tubag niya: "Nakahimo ka usa ka bilyon nga linya, apan ang GC nagtrabaho nga libre." Sa diha nga kini mahitabo, imong naamgohan nga nakahimo ka og daghan kaayong mga butang ug gisunog ang tibuok memory lane. Adunay usa ka paagi aron mahibal-an kini, apan dili kini klaro. 

Ang problema naa sa istruktura sa datos: ang hubo nga istruktura nga nagpailalom sa tanan nga mahitabo, kini dako kaayo, kini 2.7G sa disk, mao nga dili gusto ang paghimo sa usa ka kopya niini nga butang - gusto nimo nga i-load dayon kini gikan sa network byte buffer. ngadto sa mga rehistro, aron dili magbasa-magsulat ngadto sa linya balik-balik sa lima ka higayon. Ikasubo, ang Java wala maghatag kanimo sa ingon nga librarya isip bahin sa JDK pinaagi sa default. Apan kini gamay ra, dili ba? Sa esensya, kini mao ang 5-10 ka linya sa code nga gamiton sa pagpatuman sa imong kaugalingong buffered string loader, nga nagsubli sa kinaiya sa string class, samtang usa ka wrapper sa palibot sa underlying byte buffer. Ingon usa ka sangputanan, kini nahimo nga nagtrabaho ka hapit nga adunay mga kuwerdas, apan sa tinuud ang mga pointer sa buffer naglihok didto, ug ang mga hilaw nga byte wala gikopya bisan diin, ug sa ingon ang parehas nga mga buffer gigamit pag-usab, ug ang operating system nalipay sa pagkuha sa imong kaugalingon sa mga butang nga kini gidisenyo, sama sa tinago nga double-buffering niini nga mga byte buffers, ug ikaw dili na grinding pinaagi sa usa ka walay katapusan nga sapa sa wala kinahanglana nga data. Pinaagi sa dalan, nakasabut ka ba nga kung nagtrabaho kauban ang GC, gigarantiyahan nga ang matag alokasyon sa memorya dili makita sa processor pagkahuman sa katapusan nga siklo sa GC? Busa, kining tanan dili mahimo nga naa sa cache, ug unya usa ka 100% nga garantiya nga miss ang mahitabo. Kung nagtrabaho gamit ang usa ka pointer, sa x86, ang pagkuha sa usa ka rehistro gikan sa panumduman nagkinahanglag 1-2 nga mga siklo sa orasan, ug sa diha nga kini mahitabo, magbayad ka, magbayad, magbayad, tungod kay ang panumduman naa sa tanan. SIYAM ka mga cache – ug kini ang gasto sa alokasyon sa memorya. Tinuod nga bili.

Sa laing pagkasulti, ang mga istruktura sa datos mao ang pinakalisud nga butang nga usbon. Ug kung nahibal-an nimo nga gipili nimo ang sayup nga istruktura sa datos nga makapatay sa pasundayag sa ulahi, kasagaran adunay daghang trabaho nga buhaton, apan kung dili nimo buhaton, mograbe ang mga butang. Una sa tanan, kinahanglan nimo nga hunahunaon ang mga istruktura sa datos, hinungdanon kini. Ang nag-unang gasto dinhi nahulog sa tambok nga mga istruktura sa datos, nga nagsugod nga gigamit sa estilo sa "Gikopya nako ang istruktura sa datos X ngadto sa istruktura sa datos nga Y tungod kay mas gusto nako ang porma sa Y." Apan ang operasyon sa pagkopya (nga morag barato) sa tinuud nag-usik sa bandwidth sa panumduman ug didto nalubong ang tanan nga nausik nga oras sa pagpatay. Kung naa koy giant string sa JSON ug gusto nako nga himuon kini nga structured DOM tree sa POJOs o usa ka butang, ang operasyon sa pag-parse sa string ug pagtukod sa POJO, ug dayon pag-access sa POJO pag-usab sa ulahi, moresulta sa dili kinahanglan nga gasto - kini dili barato. Gawas kung magdagan-dagan ka sa mga POJO nga mas kanunay kaysa magdagan ka sa usa ka pisi. Sa tinuud, mahimo nimong sulayan nga i-decrypt ang hilo ug kuhaon kung unsa ang imong kinahanglan gikan didto, nga wala kini himuon nga POJO. Kung kining tanan mahitabo sa usa ka dalan diin gikinahanglan ang pinakataas nga pasundayag, walay mga POJO alang kanimo, kinahanglan nimo nga magkalot sa linya direkta.

Ngano nga maghimo sa imong kaugalingon nga programming language

Andrei: Miingon ka nga aron masabtan ang modelo sa gasto, kinahanglan nimong isulat ang imong kaugalingong gamay nga pinulongan...

Cliff: Dili usa ka pinulongan, apan usa ka compiler. Ang usa ka pinulongan ug usa ka compiler duha ka lain-laing mga butang. Ang labing hinungdanon nga kalainan naa sa imong ulo. 

Andrei: By the way, sa akong nahibal-an, nag-eksperimento ka sa paghimo sa imong kaugalingon nga mga pinulongan. Para unsa?

Cliff: Kay kaya nako! Semi-retired na ko, mao ni akong kalingawan. Gipatuman nako ang mga pinulongan sa ubang mga tawo sa tibuok nakong kinabuhi. Nagtrabaho usab ako pag-ayo sa akong istilo sa coding. Ug tungod usab kay nakakita kog mga problema sa ubang mga pinulongan. Nakita nako nga adunay mas maayong mga paagi sa pagbuhat sa pamilyar nga mga butang. Ug gamiton ko sila. Gikapoy na lang ko sa pagtan-aw sa mga problema sa akong kaugalingon, sa Java, sa Python, sa bisan unsang laing pinulongan. Nagsulat ako karon sa React Native, JavaScript ug Elm isip usa ka kalingawan nga dili bahin sa pagretiro, apan bahin sa aktibo nga trabaho. Nagsulat usab ako sa Python ug, lagmit, magpadayon sa pagtrabaho sa pagkat-on sa makina alang sa mga backend sa Java. Adunay daghang mga sikat nga lengguwahe ug silang tanan adunay makapaikag nga mga bahin. Ang tanan maayo sa ilang kaugalingon nga paagi ug mahimo nimong sulayan nga mahiusa ang tanan niini nga mga bahin. Busa, ako nagtuon sa mga butang nga makapainteres kanako, ang kinaiya sa pinulongan, naningkamot sa paghimo sa makatarunganon nga semantics. Ug hangtod karon nagmalampuson ako! Sa pagkakaron nanlimbasug ko sa memory semantics, tungod kay gusto nako nga maangkon kini sama sa C ug Java, ug makakuha og lig-on nga memory model ug memory semantics alang sa mga load ug mga tindahan. Sa parehas nga oras, adunay awtomatik nga tipo nga inference sama sa Haskell. Dinhi, naningkamot ko sa pagsagol sa Haskell-like type inference sa memory work sa C ug Java. Kini ang akong gibuhat sa miaging 2-3 ka bulan, pananglitan.

Andrei: Kung magtukod ka og usa ka pinulongan nga nagkinahanglan og mas maayong mga aspeto gikan sa ubang mga pinulongan, sa imong hunahuna adunay usa nga mobuhat sa sukwahi: kuhaa ang imong mga ideya ug gamita kini?

Cliff: Ingon niini kung giunsa ang pagpakita sa bag-ong mga pinulongan! Ngano nga ang Java parehas sa C? Tungod kay ang C adunay usa ka maayo nga syntax nga nasabtan sa tanan ug ang Java nadasig sa kini nga syntax, pagdugang sa kaluwasan sa tipo, pagsusi sa mga utlanan sa array, GC, ug gipauswag usab nila ang pipila ka mga butang gikan sa C. Gidugang nila ang ilang kaugalingon. Pero daghan kaayo silag inspirasyon, di ba? Ang tanan nagbarug sa mga abaga sa mga higante nga nag-una kanimo - ingon niana ang pag-uswag.

Andrei: Sa akong pagsabot niini, ang imong pinulongan mahimong memory safe. Nakahunahuna ka ba mahitungod sa pagpatuman sa usa ka butang sama sa usa ka borrow checker gikan sa Rust? Gitan-aw ba nimo siya, unsa ang imong hunahuna kaniya?

Cliff: Aw, dugay na kong gisulat ang C, uban niining tanan nga malloc ug libre, ug mano-mano ang pagdumala sa tibuok kinabuhi. Nahibal-an nimo, 90-95% sa oras sa kinabuhi nga kontrolado sa mano-mano adunay parehas nga istruktura. Ug sakit kaayo ang pagbuhat niini nga mano-mano. Gusto ko nga isulti lang kanimo sa compiler kung unsa ang nahitabo didto ug kung unsa ang imong nakab-ot sa imong mga aksyon. Alang sa pipila ka mga butang, ang borrow checker naghimo niini nga wala sa kahon. Ug kini kinahanglan nga awtomatiko nga magpakita sa kasayuran, makasabut sa tanan, ug dili gani makapabug-at kanako sa pagpresentar niini nga pagsabut. Kinahanglan nga maghimo kini labing menos lokal nga pag-analisar sa pag-ikyas, ug kung kini mapakyas, nan kinahanglan nga idugang ang mga anotasyon sa tipo nga maghulagway sa tibuok kinabuhi - ug ang ingon nga laraw labi ka komplikado kaysa usa ka tigsusi sa paghulam, o sa tinuud nga bisan unsang naglungtad nga tigsusi sa panumduman. Ang pagpili tali sa "maayo ra ang tanan" ug "Wala ko'y nasabtan" - dili, kinahanglan nga adunay mas maayo. 
Busa, isip usa ka tawo nga nagsulat og daghang code sa C, sa akong hunahuna ang pagbaton og suporta alang sa awtomatikong pagkontrol sa tibuok kinabuhi mao ang labing importante nga butang. Napul-an na usab ako kung unsa kadaghan ang gigamit sa Java sa memorya ug ang panguna nga reklamo mao ang GC. Kung imong gigahin ang memorya sa Java, dili nimo mabalik ang memorya nga lokal sa katapusang GC cycle. Dili kini ang kaso sa mga pinulongan nga adunay mas tukma nga pagdumala sa memorya. Kung motawag ka sa malloc, makuha dayon nimo ang memorya nga sagad gigamit lang. Kasagaran imong buhaton ang pipila ka temporaryo nga mga butang nga adunay memorya ug ibalik dayon kini. Ug kini mibalik dayon sa malloc pool, ug ang sunod nga malloc cycle mibira niini pag-usab. Busa, ang aktuwal nga paggamit sa panumduman gipakunhod ngadto sa hugpong sa buhi nga mga butang sa usa ka panahon, dugang sa mga pagtulo. Ug kung ang tanan dili mogawas sa usa ka hingpit nga dili maayo nga paagi, kadaghanan sa panumduman matapos sa mga cache ug processor, ug kini molihok dayon. Apan nanginahanglan daghang manwal nga pagdumala sa panumduman nga adunay malloc ug libre nga gitawag sa husto nga pagkasunud, sa husto nga lugar. Ang taya makahimo sa pagdumala niini sa hustong paagi sa iyang kaugalingon, ug sa daghang mga kaso makahatag og mas maayo nga performance, tungod kay ang konsumo sa panumduman gipakunhod ngadto lamang sa kasamtangan nga pagkuwenta - sukwahi sa paghulat sa sunod nga GC cycle aron mapagawas ang memorya. Ingon usa ka sangputanan, nakakuha kami usa ka makapaikag nga paagi aron mapaayo ang pasundayag. Ug labi ka kusgan - gipasabut nako, gibuhat nako ang ingon nga mga butang sa pagproseso sa datos alang sa fintech, ug kini nagtugot kanako nga makakuha usa ka tulin nga mga lima ka beses. Kana usa ka dako nga pag-uswag, labi na sa usa ka kalibutan diin ang mga processor dili labi ka paspas ug naghulat pa kami alang sa mga pag-uswag.

Karera sa Performance Engineer

Andrei: Gusto ko usab nga mangutana sa palibot bahin sa mga karera sa kinatibuk-an. Nabantog ka sa imong trabaho sa JIT sa HotSpot ug dayon mibalhin sa Azul, nga usa usab ka kompanya sa JVM. Apan mas nagtrabaho na kami sa hardware kaysa software. Ug unya kalit silang mibalhin sa Big Data ug Machine Learning, ug dayon sa pag-detect sa fraud. Giunsa kini nahitabo? Lahi kaayo kini nga mga bahin sa pag-uswag.

Cliff: Dugay na kong nagprograma ug nakahimo sa pagkuha sa daghang lain-laing mga klase. Ug kung ang mga tawo moingon: "oh, ikaw ang naghimo sa JIT para sa Java!", kini kanunay nga kataw-anan. Apan sa wala pa kana, nagtrabaho ako sa usa ka clone sa PostScript - ang pinulongan nga gigamit kaniadto sa Apple alang sa mga laser printer niini. Ug sa wala pa kana naghimo ako usa ka pagpatuman sa Forth nga sinultian. Sa akong hunahuna ang komon nga tema alang kanako mao ang pag-uswag sa himan. Sa tibuok nakong kinabuhi naghimo ko og mga himan diin ang ubang mga tawo nagsulat sa ilang mga cool nga programa. Apan nalambigit usab ako sa pagpalambo sa mga operating system, mga drayber, mga debugger sa lebel sa kernel, mga pinulongan alang sa pagpalambo sa OS, nga nagsugod nga walay hinungdan, apan sa paglabay sa panahon nahimong mas komplikado. Apan ang nag-unang hilisgutan mao gihapon ang pagpalambo sa mga himan. Usa ka dakong bahin sa akong kinabuhi ang milabay tali sa Azul ug Sun, ug kini mahitungod sa Java. Apan sa dihang nakasulod na ko sa Big Data ug Machine Learning, akong gisul-ob pagbalik ang akong nindot nga kalo ug miingon, "Oh, karon kami adunay usa ka dili importante nga problema, ug adunay daghang makapaikag nga mga butang nga nahitabo ug ang mga tawo nagbuhat sa mga butang." Kini usa ka maayo nga dalan sa pag-uswag nga buhaton.

Oo, ganahan kaayo ko sa distributed computing. Ang akong una nga trabaho mao ang usa ka estudyante sa C, sa usa ka proyekto sa advertising. Giapod-apod kini sa pag-compute sa Zilog Z80 chips nga nagkolekta og datos alang sa analog OCR, nga gihimo sa usa ka tinuod nga analogue analyzer. Kini usa ka cool ug hingpit nga buang nga hilisgutan. Apan adunay mga problema, ang pipila ka bahin wala mailhi sa husto, mao nga kinahanglan nimo nga magkuha usa ka litrato ug ipakita kini sa usa ka tawo nga nakabasa na sa ilang mga mata ug nagreport kung unsa ang gisulti niini, ug busa adunay mga trabaho nga adunay datos, ug kini nga mga trabaho adunay ilang kaugalingong pinulongan. Adunay usa ka backend nga nagproseso niining tanan - ang mga Z80 nga nagdagan nga parehas sa mga terminal sa vt100 nga nagdagan - usa matag tawo, ug adunay usa ka parallel nga modelo sa programming sa Z80. Pipila ka komon nga piraso sa memorya nga gipaambit sa tanang Z80 sulod sa usa ka bituon nga configuration; Ang backplane gipaambit usab, ug ang katunga sa RAM gipaambit sulod sa network, ug ang laing katunga pribado o miadto sa laing butang. Usa ka makahuluganon nga komplikado nga parallel distributed nga sistema nga adunay shared... semi-shared memory. Kanus-a kini ... dili gani nako mahinumduman, sa usa ka dapit sa tunga-tunga sa 80s. Dugay na kaayo. 
Oo, isipon nato nga ang 30 ka tuig dugay na nga panahon. Beowulf-mga pundok. Ang ingon nga mga clusters tan-awon sama sa ... Pananglitan: adunay Ethernet ug ang imong paspas nga x86 konektado niini nga Ethernet, ug karon gusto nimo nga makakuha og peke nga shared memory, tungod kay wala'y usa nga makahimo sa gipang-apod-apod nga computing coding kaniadto, lisud kaayo ug busa didto usa ka peke nga gipaambit nga panumduman nga adunay mga panid sa panumduman sa panalipod sa x86, ug kung nagsulat ka sa kini nga panid, nan gisultihan namon ang ubang mga processor nga kung ma-access nila ang parehas nga gipaambit nga panumduman, kinahanglan kini i-load gikan kanimo, ug sa ingon usa ka butang sama sa usa ka protocol alang sa pagsuporta cache coherence nagpakita ug software alang niini. Makapaikag nga konsepto. Ang tinuod nga problema, siyempre, lain pa. Tanan kini nagtrabaho, apan dali ka nga nakakuha mga problema sa pasundayag, tungod kay wala’y nakasabut sa mga modelo sa pasundayag sa igo nga lebel - kung unsang mga pattern sa pag-access sa memorya ang naa didto, kung giunsa pagsiguro nga ang mga node wala’y katapusan nga nag-ping sa usag usa, ug uban pa.

Ang akong nahibal-an sa H2O mao nga ang mga developer mismo ang responsable sa pagtino kung diin gitago ang paralelismo ug kung diin kini wala. Naghimo ako og usa ka modelo sa coding nga naghimo sa pagsulat sa high-performance code nga sayon ​​ug yano. Apan ang pagsulat sa hinay nga pagdagan nga code lisud, kini tan-awon nga dili maayo. Kinahanglan nimo nga seryoso nga sulayan ang pagsulat sa hinay nga code, kinahanglan nimo nga gamiton ang dili standard nga mga pamaagi. Ang braking code makita sa unang pagtan-aw. Ingon usa ka sangputanan, kasagaran nimo nga isulat ang code nga kusog nga nagdagan, apan kinahanglan nimo nga mahibal-an kung unsa ang buhaton sa kaso sa gipaambit nga panumduman. Kining tanan gihigot sa dagkong mga arrays ug ang kinaiya didto susama sa dili-volatile nga dagkong arrays sa parallel Java. Buot ipasabot, hunahunaa nga ang duha ka mga hilo nagsulat sa usa ka parallel array, ang usa kanila midaog, ug ang lain, sumala niana, napildi, ug wala ka mahibalo kung hain ang usa. Kung dili sila dali moalisngaw, nan ang order mahimong bisan unsa nga gusto nimo - ug kini molihok nga maayo. Ang mga tawo nagpakabana gyud sa pagkahan-ay sa mga operasyon, gibutang nila ang dali nga paglihok sa husto nga mga lugar, ug gipaabut nila ang mga problema sa pasundayag nga may kalabotan sa memorya sa husto nga mga lugar. Kung dili, isulat ra nila ang code sa porma sa mga loop gikan sa 1 hangtod sa N, diin ang N pila ka trilyon, sa paglaum nga ang tanan nga komplikado nga mga kaso awtomatiko nga magkaparehas - ug dili kini molihok didto. Apan sa H2O dili kini Java o Scala; mahimo nimong ikonsiderar kini nga "Java minus minus" kung gusto nimo. Kini usa ka tin-aw kaayo nga estilo sa programming ug susama sa pagsulat sa yano nga C o Java code nga adunay mga loop ug arrays. Apan sa samang higayon, ang memorya mahimong maproseso sa terabytes. H2O gihapon akong gigamit. Gigamit nako kini matag karon ug unya sa lainlaing mga proyekto - ug kini gihapon ang labing paspas nga butang, daghang beses nga mas paspas kaysa sa mga kakompetensya niini. Kung naghimo ka ug Big Data nga adunay columnar data, lisud kaayo ang pagpildi sa H2O.

Teknikal nga mga Hagit

Andrei: Unsa ang imong pinakadakong hagit sa tibuok nimong karera?

Cliff: Naghisgot ba kita sa teknikal o dili teknikal nga bahin sa isyu? Moingon ko nga ang pinakadako nga mga hagit dili teknikal. 
Sama sa alang sa teknikal nga mga hagit. Gipildi ra nako sila. Wala ko kahibalo kung unsa ang pinakadako, apan adunay pipila nga medyo makapaikag nga nagkinahanglag gamay nga oras, pakigbisog sa pangisip. Sa akong pag-adto sa Sun, nakasiguro ko nga maghimo ko og paspas nga compiler, ug usa ka pundok sa mga senior ang mitubag nga dili gyud ko molampos. Apan gisundan nako kini nga agianan, nagsulat usa ka compiler hangtod sa tiglista sa rehistro, ug kini paspas kaayo. Sama kini ka paspas sa modernong C1, apan mas hinay ang tigtagana kaniadto, ug kung tan-awon kini usa ka dako nga problema sa istruktura sa datos. Kinahanglan nako kini sa pagsulat sa usa ka graphical register allocator ug wala ako makasabut sa problema tali sa code expressiveness ug speed, nga naglungtad niadtong panahona ug importante kaayo. Nahibal-an nga ang istruktura sa datos kasagaran molapas sa gidak-on sa cache sa x86s nianang panahona, ug busa, kung ako sa sinugdan nagtuo nga ang tigtala sa rehistro molihok sa 5-10 porsyento sa kinatibuk-ang oras sa jitter, nan sa tinuud kini nahimo nga 50 porsyento.

Sa paglabay sa panahon, ang compiler nahimong mas limpyo ug mas episyente, mihunong sa pagmugna og makalilisang nga code sa daghang mga kaso, ug ang pasundayag nagsugod nga susama sa unsay gihimo sa usa ka C compiler. Gawas kon, siyempre, nagsulat ka og pipila ka mga crap nga bisan ang C dili mapadali . Kung magsulat ka og code sama sa C, makakuha ka og performance sama sa C sa daghang mga kaso. Ug sa dugang nga imong pag-adto, mas kanunay ka nga makakuha og code nga asymptotically coincided sa level C, ang register allocator nagsugod nga tan-awon sama sa usa ka butang nga kompleto ... bisan pa kon ang imong code modagan nga paspas o hinay. Nagpadayon ko sa pagtrabaho sa allocator aron mahimo kini nga mas maayo nga mga pagpili. Siya nahimong mas hinay ug mas hinay, apan siya mihatag og mas maayo ug mas maayo nga performance sa mga kaso diin walay lain nga makasagubang. Mahimo kong mosalom sa usa ka tigtagana sa rehistro, ilubong ang usa ka bulan nga trabaho didto, ug sa kalit ang tibuok code magsugod sa pagpatuman sa 5% nga mas paspas. Nahitabo kini matag karon ug unya ug ang tighatag sa rehistro nahimong usa ka buhat sa arte - ang tanan nahigugma niini o nagdumot niini, ug ang mga tawo gikan sa akademya nangutana sa hilisgutan nga "ngano nga ang tanan nahimo sa ingon niini nga paagi", nganong dili. linya scan, ug unsa ang kalainan. Ang tubag mao ra gihapon: ang usa ka allocator nga gibase sa pagkolor sa graph plus mabinantayon kaayo nga trabaho uban ang buffer code katumbas sa usa ka hinagiban sa kadaugan, ang pinakamaayo nga kombinasyon nga walay usa nga makapildi. Ug kini usa ka dili klaro nga butang. Ang tanan nga gibuhat sa compiler adunay medyo maayo nga gitun-an nga mga butang, bisan kung kini gidala usab sa lebel sa arte. Kanunay nakong gibuhat ang mga butang nga kinahanglan nga himuon ang compiler nga usa ka buhat sa arte. Apan walay bisan usa niini nga talagsaon - gawas sa tigtagana sa rehistro. Ang lansis mao ang pag-amping putlon ubos sa load ug, kon kini mahitabo (akong ipasabut sa mas detalyado kon interesado), kini nagpasabot nga kamo mahimo inline nga mas agresibo, nga walay risgo nga mahulog sa ibabaw sa usa ka kink sa performance eskedyul. Niadtong mga adlawa, adunay usa ka hugpong sa mga full-scale compiler, gibitay sa mga baubles ug whistles, nga adunay mga tig-alok sa rehistro, apan walay lain nga makahimo niini.

Ang problema mao nga kung magdugang ka mga pamaagi nga gipailalom sa inlining, pagdugang ug pagdugang sa inlining area, ang set sa gigamit nga mga kantidad dali nga milabaw sa gidaghanon sa mga rehistro, ug kinahanglan nimo nga putlon kini. Ang kritikal nga lebel kasagaran moabut sa diha nga ang allocator mohunong, ug ang usa ka maayo nga kandidato alang sa usa ka spill adunay bili sa lain, imong ibaligya ang pipila ka kasagarang ihalas nga mga butang. Ang bili sa inlining dinhi mao nga mawad-an ka bahin sa overhead, overhead alang sa pagtawag ug pagtipig, imong makita ang mga kantidad sa sulod ug mahimo pa nga ma-optimize kini. Ang gasto sa inlining mao nga daghang gidaghanon sa mga buhi nga kantidad ang naporma, ug kung ang imong tigtagana sa rehistro masunog labaw pa sa gikinahanglan, mawala dayon ka. Busa, kadaghanan sa mga alokador adunay problema: kung ang inlining motabok sa usa ka linya, ang tanan sa kalibutan magsugod sa pagputol ug ang pagka-produktibo mahimong ma-flush sa kasilyas. Kadtong nag-implementar sa compiler nagdugang sa pipila ka mga heuristics: pananglitan, sa paghunong sa inlining, sugod sa pipila ka igo nga dako nga gidak-on, tungod kay ang mga alokasyon makaguba sa tanan. Ingon niini ang pagkaporma sa usa ka kink sa performance graph - ikaw inline, inline, ang performance hinay-hinay nga mitubo - ug unya boom! – nahulog kini sama sa usa ka tulin nga jack tungod kay naglinya ka kaayo. Ingon niini kung giunsa ang tanan nagtrabaho sa wala pa ang pag-abut sa Java. Ang Java nanginahanglan labi pa nga pag-inlining, mao nga kinahanglan nako nga himuon ang akong tigtagana nga labi ka agresibo aron kini mag-level out kaysa mag-crash, ug kung sobra ka mag-inline, magsugod kini sa pag-agas, apan moabut gihapon ang "wala na pag-agas". Kini usa ka makapaikag nga obserbasyon ug kini miabut kanako gikan sa wala, dili klaro, apan kini mibayad og maayo. Gikuha nako ang agresibo nga pag-inlining ug kini nagdala kanako sa mga dapit diin ang Java ug C nga performance nagtrabaho nga magkauban. Duol gyud sila - makasulat ko sa Java code nga mas paspas kay sa C code ug mga butang nga sama niana, apan sa kasagaran, sa dako nga hulagway sa mga butang, sila halos ikatandi. Sa akong hunahuna nga bahin sa kini nga merito mao ang tighatag sa rehistro, nga nagtugot kanako nga mag-inline nga ingon ka hungog kutob sa mahimo. Inline ra nako tanan akong makita. Ang pangutana dinhi mao kung maayo ba ang pagtrabaho sa allocator, kung ang resulta ba intelihenteng nagtrabaho nga code. Kini usa ka dako nga hagit: aron masabtan kining tanan ug himoon kini nga trabaho.

Usa ka gamay bahin sa pagrehistro sa alokasyon ug multi-core

Vladimir: Ang mga problema sama sa alokasyon sa rehistro ingon og usa ka matang sa walay katapusan, walay katapusan nga hilisgutan. Naghunahuna ko kung adunay usa ka ideya nga ingon og maayo ug unya napakyas sa praktis?

Cliff: Sigurado! Ang alokasyon sa pagrehistro usa ka lugar diin imong gisulayan ang pagpangita sa pipila ka mga heuristic aron masulbad ang usa ka NP-kompleto nga problema. Ug dili gyud nimo makab-ot ang usa ka hingpit nga solusyon, di ba? Kini mao ang yano nga imposible. Tan-awa, Ahead of Time compilation - dili usab kini molihok. Ang panag-istoryahanay dinhi mahitungod sa pipila ka kasagaran nga mga kaso. Mahitungod sa tipikal nga pasundayag, aron makaadto ka ug makasukod sa usa ka butang nga sa imong hunahuna maayo nga tipikal nga pasundayag - pagkahuman, nagtrabaho ka aron mapaayo kini! Ang alokasyon sa pagrehistro usa ka hilisgutan bahin sa pasundayag. Kung naa na nimo ang una nga prototype, kini molihok ug magpintal kung unsa ang kinahanglan, magsugod ang buhat sa pasundayag. Kinahanglan ka makakat-on sa pagsukod og maayo. Nganong importante kini? Kung adunay ka tin-aw nga datos, mahimo nimong tan-awon ang lainlaing mga lugar ug tan-awa: oo, nakatabang kini dinhi, apan didto nabuak ang tanan! Ang pipila ka maayong mga ideya moabut, ikaw nagdugang bag-ong heuristics ug sa kalit ang tanan nagsugod sa pagtrabaho nga mas maayo sa kasagaran. O dili kini magsugod. Ako adunay daghang mga kaso diin kami nakig-away alang sa singko porsyento nga pasundayag nga nagpalahi sa among pag-uswag gikan sa miaging tigtagana. Ug sa matag higayon nga kini tan-awon sama niini: sa usa ka dapit nga ikaw modaog, sa usa ka dapit ikaw mapildi. Kung ikaw adunay maayo nga mga himan sa pag-analisar sa pasundayag, makit-an nimo ang nawala nga mga ideya ug masabtan kung ngano nga napakyas sila. Tingali angayan nga biyaan ang tanan nga ingon niini, o tingali maghimo usa ka labi ka seryoso nga pamaagi sa pag-ayo, o paggawas ug pag-ayo sa uban pa. Kini usa ka bug-os nga hugpong sa mga butang! Gihimo nako kini nga cool nga hack, apan kinahanglan ko usab kini, ug kini, ug kini - ug ang ilang kinatibuk-ang kombinasyon naghatag pipila ka mga pag-uswag. Ug ang mga nag-inusara mahimong mapakyas. Kini ang kinaiya sa pagbuhat sa trabaho sa NP-kompleto nga mga problema.

Vladimir: Ang usa makabati nga ang mga butang sama sa pagpintal sa mga tigtagana usa ka problema nga nasulbad na. Buweno, kini nakahukom alang kanimo, sa paghukom sa imong gisulti, mao nga takus ba kini ...

Cliff: Dili kini masulbad sa ingon. Ikaw ang kinahanglan nga himuon kini nga "masulbad". Adunay mga lisud nga mga problema ug kini kinahanglan nga sulbaron. Kung mahuman na kini, panahon na sa pagtrabaho sa pagka-produktibo. Kinahanglan nimo nga duolon kini nga trabaho sumala niana - paghimo og mga benchmark, pagkolekta sa mga sukatan, pagpatin-aw sa mga sitwasyon kung kanus-a, sa dihang mibalik ka sa miaging bersyon, ang imong daan nga hack nagsugod sa pagtrabaho pag-usab (o vice versa, mihunong). Ug ayaw pag-undang hangtod nga makab-ot nimo ang usa ka butang. Sa ako nang giingon, kung adunay mga cool nga ideya nga wala molihok, apan sa natad sa alokasyon sa mga rehistro sa mga ideya kini hapit wala’y katapusan. Mahimo nimo, pananglitan, magbasa sa siyentipikong mga publikasyon. Bisan tuod karon kini nga dapit nagsugod sa paglihok nga mas hinay ug nahimong mas tin-aw kay sa iyang pagkabatan-on. Bisan pa, adunay dili maihap nga mga tawo nga nagtrabaho sa kini nga uma ug ang tanan nilang mga ideya angay nga sulayan, silang tanan naghulat sa mga pako. Ug dili nimo masulti kung unsa sila ka maayo kung dili nimo kini sulayan. Unsa ka maayo ang ilang pag-integrate sa tanan nga butang sa imong allocator, tungod kay ang usa ka allocator naghimo og daghang mga butang, ug ang pipila ka mga ideya dili molihok sa imong piho nga allocator, apan sa laing allocator kini dali. Ang nag-unang paagi sa pagdaog alang sa allocator mao ang pagbira sa hinay nga mga butang sa gawas sa nag-unang agianan ug pugson kini sa pagbahin sa mga utlanan sa hinay nga mga agianan. Mao nga kung gusto nimo magpadagan sa usa ka GC, kuhaa ang hinay nga agianan, i-deoptimize, ihulog ang usa ka eksepsiyon, tanan nga mga butang - nahibal-an nimo nga kini nga mga butang medyo talagsaon. Ug talagsa ra gyud sila, gisusi nako. Naghimo ka og dugang nga trabaho ug gitangtang niini ang daghang mga pagdili sa kini nga hinay nga mga agianan, apan dili kini hinungdanon tungod kay kini hinay ug panagsa ra nga mobiyahe. Pananglitan, usa ka null pointer - dili kini mahitabo, di ba? Kinahanglan nga adunay daghang mga agianan alang sa lainlaing mga butang, apan dili kini kinahanglan nga makabalda sa panguna. 

Vladimir: Unsa ang imong hunahuna bahin sa multi-core, kung adunay libu-libo nga mga cores sa usa ka higayon? Kini ba usa ka mapuslanon nga butang?

Cliff: Ang kalampusan sa GPU nagpakita nga kini mapuslanon kaayo!

Vladimir: Sila espesyal kaayo. Unsa ang mahitungod sa kinatibuk-ang katuyoan processors?

Cliff: Aw, kana ang modelo sa negosyo ni Azul. Ang tubag mibalik sa usa ka panahon nga ang mga tawo ganahan kaayo sa matag-an nga pasundayag. Lisod ang pagsulat ug parallel code kaniadto. Ang H2O coding model kay scalable kaayo, pero dili kay general purpose model. Tingali usa ka gamay nga kinatibuk-an kaysa sa paggamit sa usa ka GPU. Naghisgot ba kita mahitungod sa pagkakomplikado sa pagpalambo sa maong butang o sa pagkakomplikado sa paggamit niini? Pananglitan, gitudloan ko ni Azul og usa ka makapaikag nga leksyon, usa ka dili klaro: ang gagmay nga mga cache normal. 

Ang pinakadako nga hagit sa kinabuhi

Vladimir: Unsa man ang bahin sa dili teknikal nga mga hagit?

Cliff: Ang pinakadako nga hagit mao ang dili... buotan ug buotan sa mga tawo. Ug isip resulta, kanunay nakong nakit-an ang akong kaugalingon sa hilabihang panagbangi nga mga sitwasyon. Kadto nga nahibal-an nako nga ang mga butang dili maayo, apan wala mahibal-an kung giunsa ang pagpadayon sa mga problema ug dili kini mahimo. Daghang dugay nga mga problema, nga milungtad sa mga dekada, mitungha niining paagiha. Ang kamatuoran nga ang Java adunay C1 ug C2 compiler usa ka direkta nga sangputanan niini. Ang kamatuoran nga walay multi-level compilation sa Java sulod sa napulo ka tuig nga sunud-sunod usa usab ka direkta nga sangputanan. Dayag nga gikinahanglan nato ang maong sistema, apan dili klaro kon nganong wala kini. Naa koy problema sa usa ka engineer... o grupo sa mga engineer. Kaniadto, sa dihang nagsugod ko sa pagtrabaho sa Sun, ako... Okay, dili lang unya, kasagaran ako kanunay adunay kaugalingon nga opinyon sa tanan. Ug nahunahuna ko nga tinuod nga mahimo nimong dawaton kining imong kamatuoran ug isulti kini sa unahan. Labi na kay na shocking kaayo ko sa kasagaran. Ug kung dili nimo gusto kini nga pamaagi ... labi na kung klaro ka nga sayup ug nagbuhat ka nga walay hinungdan ... Sa kinatibuk-an, pipila ka mga tawo ang makatugot niini nga porma sa komunikasyon. Bisan tuod ang uban makahimo, sama kanako. Gitukod nako ang akong tibuok kinabuhi sa meritocratic nga mga prinsipyo. Kung naa kay pakitaan nga sayop, mulingi dayon ko ug ingnon: walay pulos ang imong gisulti. Sa samang higayon, siyempre, nangayo ako og pasaylo ug ang tanan nga, akong timan-an ang mga merito, kon aduna man, ug mohimo sa uban nga husto nga mga aksyon. Sa pikas nga bahin, ako makapakurat nga husto bahin sa usa ka makapakurat nga dako nga porsyento sa kinatibuk-ang oras. Ug kini dili kaayo maayo sa mga relasyon sa mga tawo. Wala ko maningkamot nga mahimong buotan, apan prangka kong gipangutana ang pangutana. "Dili gyud kini molihok, tungod kay usa, duha ug tulo." Ug ingon sila, "Oh!" Adunay ubang mga sangputanan nga tingali mas maayo nga ibaliwala: pananglitan, kadtong misangpot sa diborsyo gikan sa akong asawa ug napulo ka tuig nga depresyon pagkahuman niana.

Ang hagit usa ka pakigbisog sa mga tawo, uban ang ilang panan-aw kung unsa ang mahimo nimo o dili mahimo, kung unsa ang hinungdanon ug kung unsa ang dili. Adunay daghang mga hagit bahin sa estilo sa coding. Nagsulat gihapon ko og daghang kodigo, ug niadtong mga adlawa kinahanglan pa kong maghinay-hinay tungod kay daghan kaayo ang akong gibuhat nga susama nga mga buluhaton ug dili maayo ang pagbuhat niini, imbes nga mag-focus sa usa. Sa paghinumdom, gisulat nako ang katunga sa code alang sa Java JIT command, ang C2 command. Ang sunod nga labing paspas nga coder misulat sa katunga ingon hinay, ang sunod nga katunga ingon hinay, ug kini usa ka exponential nga pagkunhod. Ang ikapitong tawo niini nga laray hinay kaayo - kana kanunay mahitabo! Gihikap nako ang daghang code. Gitan-aw nako kung kinsa ang nagsulat kung unsa, nga walay eksepsiyon, akong gitan-aw ang ilang code, gisusi ang matag usa kanila, ug nagpadayon gihapon sa pagsulat sa akong kaugalingon kaysa bisan kinsa kanila. Kini nga pamaagi dili kaayo magamit sa mga tawo. Ang ubang mga tawo dili ganahan niini. Ug kung dili nila kini maagwanta, nagsugod ang tanan nga mga reklamo. Pananglitan, ako gisultihan kas-a nga hunongon ang coding tungod kay daghan kaayo ang akong gisulat nga code ug kini nagpameligro sa team, ug ang tanan ingon og usa ka komedya alang kanako: dude, kung ang nahabilin sa team mawala ug ako magpadayon sa pagsulat sa code, ikaw Mapildi lang katunga sa teams. Sa laing bahin, kung magpadayon ko sa pagsulat sa code ug mawala ang katunga sa team, morag dili maayo nga pagdumala. Wala gyud ko maghunahuna bahin niini, wala gyud maghisgot bahin niini, apan naa gihapon kini sa akong hunahuna. Ang hunahuna nagtuyok sa luyo sa akong hunahuna: β€œKamong tanan nagbiaybiay kanako?” Busa, ang pinakadako nga problema mao ako ug ang akong relasyon sa mga tawo. Karon mas nasabtan nako ang akong kaugalingon, ako usa ka team lead sa mga programmer sa dugay nga panahon, ug karon direkta nakong gisultihan ang mga tawo: nahibal-an nimo, ako kung kinsa ako, ug kinahanglan nimo akong atubangon - okay ba kung mobarug ako dinhi? Ug sa dihang nagsugod sila sa pag-atubang niini, ang tanan nagtrabaho. Sa tinuud, dili ako daotan o maayo, wala akoy daotan nga katuyoan o hinakog nga mga pangandoy, kini ra ang akong esensya, ug kinahanglan nako nga magpuyo uban niini bisan unsang paagi.

Andrei: Bag-o lang ang tanan nagsugod sa paghisgot bahin sa pagkahibalo sa kaugalingon alang sa mga introvert, ug humok nga kahanas sa kinatibuk-an. Unsay imong ikasulti bahin niini?

Cliff: Oo, mao kana ang panabut ug leksyon nga akong nakat-unan gikan sa akong pagbulag sa akong asawa. Ang akong nakat-onan sa diborsiyo mao ang pagsabot sa akong kaugalingon. Ingon niini ang pagsugod nako sa pagsabut sa ubang mga tawo. Sabta kung giunsa kini nga interaksyon molihok. Kini mitultol sa sunodsunod nga mga nadiskobrehan. Adunay usa ka kahibalo kung kinsa ako ug unsa ang akong girepresentar. Unsa man ang akong gibuhat: bisan ako nabalaka sa buluhaton, o naglikay ako sa panagbangi, o uban pa - ug kini nga lebel sa pagkahibalo sa kaugalingon makatabang gyud nga makontrol ang akong kaugalingon. Human niini ang tanan mas sayon. Usa ka butang nga akong nadiskobrehan dili lamang sa akong kaugalingon, apan usab sa ubang mga programmer mao ang kawalay katakus sa pagsulti sa mga hunahuna sa diha nga ikaw anaa sa ilalum sa emosyonal nga kapit-os. Pananglitan, naglingkod ka didto nga nag-coding, sa usa ka kahimtang sa pag-agos, ug dayon sila modagan kanimo ug magsugod sa pagsinggit sa mga hysterics nga adunay nabuak ug karon grabe nga mga lakang ang himuon batok kanimo. Ug dili ka makasulti og usa ka pulong tungod kay anaa ka sa kahimtang sa emosyonal nga kapit-os. Ang nakuha nga kahibalo nagtugot kanimo sa pag-andam alang niini nga higayon, mabuhi kini ug magpadayon sa usa ka plano sa pag-atras, pagkahuman mahimo nimo ang usa ka butang. Mao nga oo, kung nagsugod ka nga nahibal-an kung giunsa kini tanan, kini usa ka dako nga panghitabo nga nagbag-o sa kinabuhi. 
Ako sa akong kaugalingon dili makakaplag sa husto nga mga pulong, apan ako nahinumdom sa han-ay sa mga aksyon. Ang punto mao nga kini nga reaksyon sama ka pisikal sama sa berbal, ug kinahanglan nimo ang luna. Ang ingon nga luna, sa kahulugan sa Zen. Mao gyud kini ang kinahanglan nga ipasabut, ug dayon mopadaplin - puro pisikal nga pagpalayo. Kung ako magpabilin nga hilom sa pulong, akong maproseso ang sitwasyon sa emosyonal nga paagi. Samtang ang adrenaline moabot sa imong utok, mobalhin kanimo ngadto sa fight o flight mode, dili ka na makasulti bisan unsa, dili - karon ikaw usa ka idiot, usa ka whipping engineer, dili makahimo sa usa ka desente nga tubag o bisan sa pagpahunong sa pag-atake, ug ang tig-atake libre. sa pag-atake pag-usab ug pag-usab. Kinahanglan nimo nga mahimong imong kaugalingon pag-usab, mabawi ang kontrol, makagawas sa mode nga "away o paglupad".

Ug alang niini gikinahanglan nato ang verbal space. Libre nga space. Kung nagsulti ka bisan unsa, nan mahimo nimong isulti nga eksakto kana, ug dayon lakaw ug pangitaa gyud ang "luna" alang sa imong kaugalingon: paglakawlakaw sa parke, pag-lock sa imong kaugalingon sa shower - dili igsapayan. Ang nag-unang butang mao ang temporaryo nga pag-disconnect gikan sa kana nga sitwasyon. Sa diha nga imong gipalong sa labing menos pipila ka mga segundo, ang pagkontrol sa pagbalik, nagsugod ka sa paghunahuna nga maayo. "Okay, dili ako usa ka matang sa idiot, wala ako nagbuhat mga binuang nga butang, usa ako ka mapuslanon nga tawo." Kung nakombinsir na nimo ang imong kaugalingon, panahon na nga mopadayon sa sunod nga yugto: pagsabot sa nahitabo. Giatake ka, ang pag-atake naggikan sa wala nimo damha, kini usa ka dili matinuoron, daotan nga ambus. Kini daotan. Ang sunod nga lakang mao ang pagsabut kung nganong gikinahanglan kini sa tig-atake. Tinuod, ngano? Tingali tungod kay siya mismo nasuko? Nganong nasuko siya? Pananglitan, tungod kay iyang gibalibaran ang iyang kaugalingon ug dili makadawat sa responsibilidad? Mao kini ang paagi sa pag-amping pag-ayo sa tibuok nga sitwasyon. Apan kini nagkinahanglan ug luna alang sa pagmaniobra, verbal space. Ang una nga lakang mao ang pagtangtang sa verbal contact. Likayi ang panaghisgot gamit ang mga pulong. Ikansela kini, lakaw dayon kutob sa mahimo. Kung kini usa ka panag-istoryahanay sa telepono, ibitay lang ang tawag - kini usa ka kahanas nga akong nakat-unan gikan sa pagpakigsulti sa akong kanhing asawa. Kung dili maayo ang panag-istoryahanay, isulti lang ang "paalam" ug ibitay ang tawag. Gikan sa pikas bahin sa telepono: "blah blah blah", tubag nimo: "oo, bye!" ug ibitay. Tapuson nimo ang panag-istoryahanay. Paglabay sa lima ka minuto, kung ang abilidad sa paghunahuna nga mahunahunaon mobalik kanimo, nabugnaw ka gamay, mahimo’g posible nga hunahunaon ang tanan, kung unsa ang nahitabo ug kung unsa ang sunod nga mahitabo. Ug magsugod sa paghimo og usa ka mahunahunaon nga tubag, imbes nga mag-reaksyon lang tungod sa emosyon. Alang kanako, ang pagkahugno sa pagkahibalo sa kaugalingon mao gyud ang kamatuoran nga kung adunay emosyonal nga kapit-os dili ako makasulti. Ang paggawas sa kini nga estado, paghunahuna ug pagplano kung unsaon pagtubag ug pagbayad sa mga problema - kini ang husto nga mga lakang sa kaso kung dili ka makasulti. Ang pinakasayon ​​nga paagi mao ang paglayas gikan sa sitwasyon diin ang emosyonal nga kapit-os nagpakita sa iyang kaugalingon ug mohunong na lang sa pag-apil niini nga kapit-os. Pagkahuman niana mahimo ka nga makahunahuna, kung makahunahuna ka, makasulti ka, ug uban pa.

Pinaagi sa dalan, sa korte, ang kaatbang nga abogado naningkamot sa pagbuhat niini kanimo - karon klaro na kung ngano. Kay naa siyay abilidad nga pugngan ka sa ingon nga kahimtang nga dili nimo ma-pronounce ang imong ngalan, pananglitan. Sa tinuod nga diwa, dili ka makasulti. Kung mahitabo kini kanimo, ug kung nahibal-an nimo nga makit-an nimo ang imong kaugalingon sa usa ka lugar diin ang mga panagsangka sa binaba, sa usa ka lugar nga sama sa korte, nan mahimo ka nga moadto sa imong abogado. Ang abogado mobarug alang kanimo ug mohunong sa binaba nga pag-atake, ug buhaton kini sa hingpit nga legal nga paagi, ug ang nawala nga luna sa Zen mobalik kanimo. Pananglitan, kinahanglan nakong tawagan ang akong pamilya sa pipila ka mga higayon, ang maghuhukom medyo mahigalaon bahin niini, apan ang kaatbang nga abogado misinggit ug misinggit kanako, dili ako makakuha bisan usa ka pulong sa sulud. Niini nga mga kaso, ang paggamit sa usa ka tigpataliwala labing maayo alang kanako. Gipahunong sa tigpataliwala ang tanan nga presyur nga nagbubo kanimo sa usa ka padayon nga sapa, nakit-an nimo ang kinahanglan nga wanang sa Zen, ug uban niini ang abilidad sa pagsulti mobalik. Kini usa ka tibuuk nga natad sa kahibalo diin adunay daghang tun-an, daghang madiskobrehan sa imong kaugalingon, ug kining tanan nahimo nga taas nga lebel nga estratehikong mga desisyon nga lahi sa lainlaing mga tawo. Ang ubang mga tawo walay mga problema nga gihulagway sa ibabaw; kasagaran, ang mga tawo nga propesyonal nga mga tigbaligya wala kanila. Kining tanan nga mga tawo nga nanginabuhi sa mga pulong - bantog nga mga mag-aawit, mga magbabalak, mga lider sa relihiyon ug mga politiko, kanunay silang adunay isulti. Wala silay ingon niana nga mga problema, apan ako adunay.

Andrei: Kadto... wala damha. Maayo, daghan na kami nga nahisgutan ug oras na aron tapuson kini nga interbyu. Magkita gyud mi sa komperensya ug makapadayon kami niini nga dayalogo. Magkita ta sa Hydra!

Mahimo nimong ipadayon ang imong panag-istoryahanay uban ni Cliff sa komperensya sa Hydra 2019, nga ipahigayon sa Hulyo 11-12, 2019 sa St. Moabot siya nga dunay report "Ang Azul Hardware Transactional Memory nga kasinatian". Mahimong mapalit ang mga tiket sa opisyal nga website.

Source: www.habr.com

Idugang sa usa ka comment