Gwo entèvyou ak Cliff Click, papa konpilasyon JIT nan Java

Gwo entèvyou ak Cliff Click, papa konpilasyon JIT nan JavaCliff Klike — CTO nan Cratus (detèktè IoT pou amelyorasyon pwosesis), fondatè ak ko-fondatè plizyè demaraj (ki gen ladan Rocket Realtime School, Neurensic ak H2O.ai) ak plizyè sòti siksè. Cliff te ekri premye du li a laj 15 (Pascal pou TRS Z-80)! Li se pi byen li te ye pou travay li sou C2 nan Java (lanmè a nan nœuds IR). Konpilateur sa a te montre mond lan ke JIT te kapab pwodwi bon jan kalite kòd, ki te youn nan faktè sa yo nan aparisyon Java kòm youn nan prensipal platfòm lojisyèl modèn yo. Lè sa a, Cliff te ede Azul Systems bati yon mainframe 864-debaz ak lojisyèl Java pi bon kalite ki sipòte poz GC sou yon pil 500-gigabyte nan 10 milisgond. An jeneral, Cliff jere yo travay sou tout aspè nan JVM la.

 
Habrapost sa a se yon gwo entèvyou ak Cliff. Nou pral pale sou sijè sa yo:

  • Tranzisyon nan optimize nivo ki ba yo
  • Ki jan yo fè yon gwo refactoring
  • Modèl pri
  • Fòmasyon optimize ba nivo
  • Egzanp pratik amelyorasyon pèfòmans
  • Poukisa kreye pwòp langaj pwogramasyon ou
  • Karyè Enjenyè Pèfòmans
  • Defi teknik
  • Yon ti kras sou alokasyon enskri ak milti-nwayo
  • Pi gwo defi nan lavi a

Entèvyou a fèt pa:

  • Andrey Satarin soti nan Amazon Web Services. Nan karyè li, li te jere travay nan pwojè konplètman diferan: li teste baz done NewSQL distribye nan Yandex, yon sistèm deteksyon nwaj nan Kaspersky Lab, yon jwèt multijoueurs nan Mail.ru ak yon sèvis pou kalkile pri echanj etranje nan Deutsche Bank. Enterese nan tès gwo echèl backend ak sistèm distribiye.
  • Vladimir Sitnikov soti nan Netcracker. Dis ane travay sou pèfòmans ak évolutivité NetCracker OS, lojisyèl operatè telecom yo itilize pou otomatize pwosesis jesyon ekipman rezo ak rezo. Enterese nan pwoblèm pèfòmans Java ak Oracle Database. Otè plis pase yon douzèn amelyorasyon pèfòmans nan chofè ofisyèl PostgreSQL JDBC.

Tranzisyon nan optimize nivo ki ba yo

Andre: Ou se yon gwo non nan mond lan nan konpilasyon JIT, Java, ak travay pèfòmans an jeneral, dwa? 

Cliff: Se konsa!

Andre: Ann kòmanse ak kèk kesyon jeneral sou travay pèfòmans. Ki sa ou panse sou chwa ki genyen ant optimize wo nivo ak ba nivo tankou travay nan nivo CPU?

Cliff: Wi, tout bagay se senp isit la. Kòd ki pi rapid la se youn ki pa janm kouri. Se poutèt sa, ou toujou bezwen kòmanse soti nan yon wo nivo, travay sou algoritm. Yon pi bon notasyon O pral bat yon pi mal notasyon O, sof si kèk konstan ase gwo entèvni. Bagay ki ba yo ale dènye. Tipikman, si ou te optimize rès la nan pil ou a ase byen epi gen toujou kèk bagay enteresan ki rete, sa a se yon nivo ki ba. Men, ki jan yo kòmanse soti nan yon nivo segondè? Ki jan ou fè konnen ase travay wo nivo te fèt? Oke... pa gen okenn fason. Pa gen resèt pare yo. Ou bezwen konprann pwoblèm nan, deside sa ou pral fè (pou yo pa pran etap nesesè nan tan kap vini an) ak Lè sa a, ou ka dekouvwi profiler la, ki ka di yon bagay itil. Nan kèk pwen, ou menm ou reyalize ke ou te vinn debarase m de bagay ki pa nesesè yo epi li lè yo fè kèk amann amann ba nivo. Sa a se definitivman yon kalite espesyal nan atizay. Gen anpil moun ki fè bagay ki pa nesesè, men k ap deplase tèlman vit ke yo pa gen tan enkyete sou pwodiktivite. Men, sa a se jiskaske kesyon an rive briskeman. Anjeneral 99% nan tan an pa gen moun ki pran swen sa m 'fè, jouk moman sa a lè yon bagay enpòtan vini sou wout la kritik ke pèsonn pa pran swen sou. Ak isit la tout moun kòmanse arselan ou sou "poukisa li pa t 'fonksyone parfe depi nan konmansman an." An jeneral, toujou gen yon bagay pou amelyore nan pèfòmans. Men, 99% nan tan ou pa gen okenn kondwi! Ou jis ap eseye fè yon bagay mache epi nan pwosesis la ou konnen sa ki enpòtan. Ou pa janm ka konnen davans ke moso sa a bezwen pafè, kidonk, an reyalite, ou dwe pafè nan tout bagay. Men, sa a se enposib epi ou pa fè li. Toujou genyen anpil bagay pou ranje - Et sa nèt nòmal.

Ki jan yo fè yon gwo refactoring

Andre: Ki jan ou travay sou yon pèfòmans? Sa a se yon pwoblèm transvèsal. Pou egzanp, èske ou janm oblije travay sou pwoblèm ki rive nan entèseksyon an nan yon anpil nan fonksyonalite ki egziste deja?

Cliff: Mwen eseye evite li. Si mwen konnen pèfòmans yo pral yon pwoblèm, mwen panse sou li anvan mwen kòmanse kodaj, espesyalman ak estrikti done. Men, souvan ou dekouvri tout bagay sa yo trè pita. Lè sa a, ou dwe ale nan mezi ekstrèm ak fè sa mwen rele "reekri ak konkeri": ou bezwen gen tan pwan yon moso gwo ase. Gen kèk nan kòd la ap toujou gen yo dwe reekri akòz pwoblèm pèfòmans oswa yon lòt bagay. Kèlkeswa rezon ki fè yo reekri kòd, li prèske toujou pi bon pou reekri yon moso ki pi gwo pase yon moso ki pi piti. Nan moman sa a, tout moun kòmanse tranble ak laperèz: "o Bondye mwen, ou pa ka manyen anpil kòd!" Men, an reyalite, apwòch sa a prèske toujou travay pi byen. Ou bezwen imedyatman pran sou yon gwo pwoblèm, trase yon gwo sèk alantou li epi di: Mwen pral reekri tout bagay andedan sèk la. Fwontyè a pi piti anpil pase kontni andedan li ki bezwen ranplase. Men, si delimitasyon sa yo nan limit pèmèt ou fè travay la andedan parfe, men ou yo gratis, fè sa ou vle. Yon fwa ou konprann pwoblèm nan, pwosesis reekri a pi fasil, kidonk pran yon gwo mòde!
An menm tan an, lè ou fè yon gwo reekri epi reyalize ke pèfòmans yo pral yon pwoblèm, ou ka imedyatman kòmanse enkyete sou li. Sa a anjeneral vire nan bagay ki senp tankou "pa kopye done, jere done kòm tou senpleman posib, fè li piti." Nan gwo reekri, gen fason estanda amelyore pèfòmans lan. Epi yo prèske toujou vire toutotou done yo.

Modèl pri

Andre: Nan youn nan podcasts yo ou te pale de modèl pri nan yon kontèks pwodiktivite. Èske ou ka eksplike sa ou vle di pa sa a?

Cliff: Sètènman. Mwen te fèt nan yon epòk kote pèfòmans processeur te trè enpòtan. Ak epòk sa a retounen ankò - sò se pa san iwoni. Mwen te kòmanse viv nan epòk machin uit-bit; premye òdinatè mwen an te travay ak 256 bytes. Egzakteman bytes. Tout bagay te piti anpil. Enstriksyon yo te dwe konte, epi kòm nou te kòmanse deplase pile langaj pwogramasyon an, lang yo te pran plis ak plis. Te gen Assembler, Lè sa a, Debaz, Lè sa a, C, ak C te pran swen nan anpil nan detay yo, tankou alokasyon enskri ak seleksyon enstriksyon. Men, tout bagay te byen klè la, epi si mwen te fè yon konsèy sou yon egzanp nan yon varyab, Lè sa a, mwen ta jwenn chaj, ak pri a nan enstriksyon sa a li te ye. Materyèl la pwodui yon sèten kantite sik machin, kidonk vitès ekzekisyon diferan bagay yo ka kalkile tou senpleman pa ajoute tout enstriksyon yo ke ou pral kouri. Chak konpare/tès/branch/rele/chaj/magazen ta ka ajoute leve, li di: sa a se tan an ekzekisyon pou ou. Lè w ap travay sou amelyore pèfòmans, ou pral definitivman peye atansyon sou ki nimewo ki koresponn ak ti sik cho. 
Men, le pli vit ke ou chanje nan Java, Python ak bagay ki sanble, ou trè byen vit deplase lwen pyès ki nan konpitè ki ba. Ki pri pou w rele yon getter nan Java? Si JIT nan HotSpot kòrèk inline, li pral chaje, men si li pa t 'fè sa a, li pral yon apèl fonksyon. Depi apèl la se sou yon bouk cho, li pral pase sou desizyon tout lòt optimize nan bouk sa a. Se poutèt sa, pri reyèl la pral pi wo. Epi ou imedyatman pèdi kapasite nan gade nan yon moso nan kòd ak konprann ke nou ta dwe egzekite li an tèm de vitès revèy processeur, memwa ak kachèt itilize. Tout bagay sa a vin enteresan sèlman si ou reyèlman antre nan pèfòmans lan.
Koulye a, nou jwenn tèt nou nan yon sitiyasyon kote vitès processeur yo diman ogmante pou yon dekad. Ansyen tan yo tounen! Ou pa ka konte sou bon pèfòmans yon sèl-threaded ankò. Men, si ou toudenkou antre nan paralèl informatique, li ekstrèmman difisil, tout moun gade ou tankou James Bond. Akselerasyon diz fwa isit la anjeneral rive nan kote yon moun te dezòd yon bagay. Konkouman mande anpil travay. Pou jwenn vitès XNUMXx sa a, ou bezwen konprann modèl pri a. Ki sa e konbyen li koute? Epi pou fè sa, ou bezwen konprann ki jan lang lan adapte sou pyès ki nan konpitè kache.
Martin Thompson te chwazi yon gwo mo pou blog li a Senpati mekanik! Ou bezwen konprann ki sa kenkayri a pral fè, ki jan egzakteman li pral fè li, ak poukisa li fè sa li fè an plas an premye. Lè l sèvi avèk sa a, li se jistis fasil yo kòmanse konte enstriksyon ak lè n ap kalkile ki kote tan an ekzekisyon prale. Si ou pa gen fòmasyon ki apwopriye a, ou jis ap chèche pou yon chat nwa nan yon chanm nwa. Mwen wè moun ki optimize pèfòmans tout tan an ki pa gen okenn lide kisa lanfè yo ap fè. Yo soufri anpil e yo pa fè anpil pwogrè. Men, lè mwen pran menm moso nan kòd, glise nan yon koup nan antay ti epi jwenn yon vitès senk oswa dis fwa, yo ap tankou: byen, sa a pa jis, nou te deja konnen ou te pi bon. Etonan. Ki sa m ap pale de... modèl pri a se sou ki kalite kòd ou ekri ak ki jan vit li kouri an mwayèn nan gwo foto a.

Andre: Ak ki jan ou ka kenbe yon volim konsa nan tèt ou? Èske sa a reyalize ak plis eksperyans, oswa? Ki kote eksperyans sa a soti?

Cliff: Oke, mwen pa t 'jwenn eksperyans mwen nan fason ki pi fasil. Mwen te pwograme nan Asanble nan epòk ou te kapab konprann chak enstriksyon. Li son estipid, men depi lè sa a seri enstriksyon Z80 la toujou rete nan tèt mwen, nan memwa mwen. Mwen pa sonje non moun nan yon minit nan pale, men mwen sonje kòd ki te ekri 40 ane de sa. Li komik, li sanble yon sendwòm "syantifik sòt'.

Fòmasyon optimize ba nivo

Andre: Èske gen yon fason pi fasil pou antre?

Cliff: Wi e non. Pyès ki nan konpitè nou tout itilize pa te chanje tout sa anpil sou tan. Tout moun sèvi ak x86, eksepte smartphones Arm yo. Si ou pa fè kèk kalite encastrer hardcore, ou ap fè menm bagay la. Oke, pwochen. Enstriksyon yo tou pa chanje pandan plizyè syèk. Ou bezwen ale ekri yon bagay nan Asanble. Pa anpil, men ase pou kòmanse konprann. Ou ap souri, men m ap pale seryezman. Ou bezwen konprann korespondans ki genyen ant lang ak pyès ki nan konpitè. Apre sa ou bezwen ale ekri yon ti kras epi fè yon ti jwèt du pou yon ti lang jwèt. Jwèt tankou vle di li bezwen yo dwe fè nan yon kantite tan rezonab. Li ka trè senp, men li dwe jenere enstriksyon yo. Zak la nan jenere yon enstriksyon pral ede w konprann modèl la pri pou pon ki genyen ant kòd la wo nivo ke tout moun ekri ak kòd la machin ki kouri sou pyès ki nan konpitè. Korespondans sa a pral boule nan sèvo a nan moman konpilatè a ekri. Menm pi senp du a. Apre sa, ou ka kòmanse gade nan Java ak lefèt ke gwo twou semantik li yo pi fon, epi li se pi difisil bati pon sou li. Nan Java, li pi difisil pou konprann si pon nou an te tounen bon oswa move, kisa ki pral lakòz li tonbe apa ak sa ki pa pral. Men, ou bezwen kèk kalite pwen depa kote ou gade nan kòd la epi konprann: "yeah, getter sa a ta dwe enline chak fwa." Lè sa a, li sanble ke pafwa sa rive, eksepte pou sitiyasyon an lè metòd la vin twò gwo, ak JIT la kòmanse inlining tout bagay. Pèfòmans kote sa yo ka prevwa imedyatman. Anjeneral getters travay byen, men Lè sa a, ou gade nan gwo bouk cho epi reyalize ke gen kèk apèl fonksyon k ap flote alantou la ki pa konnen sa yo ap fè. Sa a se pwoblèm nan ak itilizasyon an toupatou nan getters, rezon ki fè yo pa inline se ke li pa klè si yo se yon getter. Si ou gen yon baz kòd super ti, ou ka tou senpleman sonje li epi Lè sa a, di: sa a se yon getter, ak sa a se yon setter. Nan yon baz kòd gwo, chak fonksyon ap viv pwòp istwa li, ki, an jeneral, pa konnen pèsonn. Profiler la di ke nou pèdi 24% nan tan an sou kèk bouk ak konprann ki sa bouk sa a ap fè, nou bezwen gade nan chak fonksyon andedan. Li enposib konprann sa a san yo pa etidye fonksyon an, ak sa seryezman ralanti pwosesis la nan konpreyansyon. Se poutèt sa mwen pa sèvi ak getters ak setters, mwen te rive nan yon nouvo nivo!
Ki kote pou jwenn modèl pri a? Oke, ou ka li yon bagay, nan kou... Men, mwen panse ke pi bon fason an se aji. Fè yon ti du pral pi bon fason pou konprann modèl pri a epi anfòm li nan pwòp tèt ou. Yon ti du ki ta apwopriye pou pwograme yon mikwo ond se yon travay pou yon debutan. Oke, mwen vle di, si ou deja gen ladrès pwogramasyon, Lè sa a, sa ta dwe ase. Tout bagay sa yo tankou analize yon fisèl ke ou genyen kòm yon kalite ekspresyon aljebrik, èkstraksyon enstriksyon pou operasyon matematik soti nan la nan lòd ki kòrèk la, pran valè ki kòrèk yo nan rejis - tout bagay sa a se fè nan yon fwa. Epi pandan w ap fè l, li pral anprint nan sèvo w. Mwen panse ke tout moun konnen sa yon du fè. Lè sa a pral bay yon konpreyansyon sou modèl la pri.

Egzanp pratik amelyorasyon pèfòmans

Andre: Ki lòt bagay ou ta dwe peye atansyon lè w ap travay sou pwodiktivite?

Cliff: Estrikti done. An pasan, wi, mwen pa anseye klas sa yo depi lontan... Lekòl Wòkèt. Li te amizan, men li te mande anpil efò, epi mwen gen yon lavi tou! OK. Se konsa, nan youn nan gwo ak enteresan klas yo, "Ki kote pèfòmans ou ale," mwen te bay elèv yo yon egzanp: de ak yon gigabyte edmi nan done fintech yo te li nan yon dosye CSV ak Lè sa a, yo te oblije kalkile kantite pwodwi yo vann. . Done mache regilye tik. Pake UDP konvèti nan fòma tèks depi ane 70 yo. Chicago Mercantile Exchange - tout kalite bagay tankou bè, mayi, plant soya, bagay konsa. Li te nesesè yo konte pwodwi sa yo, kantite tranzaksyon yo, volim an mwayèn nan mouvman nan lajan ak machandiz, elatriye. Li trè senp matematik komès: jwenn kòd pwodwi a (sa se 1-2 karaktè nan tablo hash la), jwenn kantite lajan an, ajoute li nan youn nan seri komès yo, ajoute volim, ajoute valè, ak yon koup lòt bagay. Trè senp matematik. Aplikasyon jwèt la te trè senp: tout bagay se nan yon fichye, mwen li dosye a epi deplase atravè li, divize dosye endividyèl yo nan kòd Java, chèche bagay ki nesesè yo nan yo epi ajoute yo dapre matematik ki dekri anwo a. Epi li travay nan kèk vitès ki ba.

Avèk apwòch sa a, li evidan sa k ap pase, ak paralèl informatique pa pral ede, dwa? Li sanble ke yon ogmantasyon senk fwa nan pèfòmans ka reyalize tou senpleman pa chwazi estrikti yo done dwa. Ak sa a sipriz menm pwogramasyon ki gen eksperyans! Nan ka patikilye mwen an, jwe fent la te ke ou pa ta dwe fè alokasyon memwa nan yon bouk cho. Oke, sa a se pa tout verite a, men an jeneral - ou pa ta dwe mete aksan sou "yon fwa nan X" lè X se gwo ase. Lè X se de ak yon mwatye jigokte, ou pa ta dwe asiyen anyen "yon fwa pou chak lèt", oswa "yon fwa pou chak liy", oswa "yon fwa pou chak jaden", anyen tankou sa. Sa a se kote tan yo pase. Ki jan sa a menm travay? Imajine m ap fè yon apèl String.split() oswa BufferedReader.readLine(). Readline fè yon kòd ki soti nan yon seri bytes ki te vin sou rezo a, yon fwa pou chak liy, pou chak nan plizyè santèn milyon liy. Mwen pran liy sa a, analize li epi jete li. Poukisa mwen jete li - byen, mwen te deja trete li, se tout. Se konsa, pou chak byte li nan 2.7G sa yo, de karaktè yo pral ekri nan liy lan, se sa ki, deja 5.4G, epi mwen pa bezwen yo pou anyen pi lwen, kidonk yo jete. Si ou gade nan bandwidth memwa a, nou chaje 2.7G ki ale nan memwa a ak otobis memwa nan processeur a, ak Lè sa a, de fwa plis voye nan liy lan kouche nan memwa, ak tout bagay sa a se frayed lè chak nouvo liy yo kreye. Men, mwen bezwen li li, pyès ki nan konpitè li li, menm si tout bagay se frayed pita. Apre sa, mwen dwe ekri li paske mwen te kreye yon liy ak kachèt yo plen - kachèt la pa ka akomode 2.7G. Se konsa, pou chak byte mwen li, mwen li de plis byte epi ekri de plis byte, ak nan fen yo gen yon rapò 4: 1 - nan rapò sa a nou ap gaspiye bandwidth memwa. Lè sa a, li sanble ke si mwen fè sa String.split() – sa a se pa dènye fwa mwen fè sa, ka gen yon lòt 6-7 jaden andedan. Se konsa, kòd la klasik nan lekti CSV ak Lè sa a, analiz fisèl yo rezilta nan yon fatra bandwidth memwa nan apeprè 14: 1 relatif nan sa ou ta aktyèlman renmen genyen. Si ou jete seleksyon sa yo, ou ka jwenn yon vitès senk fwa.

Epi li pa tèlman difisil. Si ou gade nan kòd la nan ang dwat la, li tout vin byen senp yon fwa ou reyalize pwoblèm nan. Ou pa ta dwe sispann asiyen memwa tout ansanm: pwoblèm nan sèlman se ke ou asiyen yon bagay epi li imedyatman mouri, ak sou wout la li boule yon resous enpòtan, ki nan ka sa a se Pleasant memwa. Ak tout sa a rezilta nan yon gout nan pwodiktivite. Sou x86 anjeneral ou bezwen aktivman boule sik processeur, men isit la ou boule moute tout memwa a pi bonè. Solisyon an se diminye kantite egzeyat. 
Lòt pati nan pwoblèm nan se ke si ou kouri profiler la lè bann memwa a fini, dwa lè li rive, anjeneral ou ap tann pou kachèt la tounen paske li plen ak fatra ke ou jis pwodwi, tout liy sa yo. Se poutèt sa, chak chaj oswa operasyon magazen vin ralanti, paske yo mennen nan kachèt rate - te kachèt la tout antye vin ralanti, ap tann pou fatra kite li. Se poutèt sa, profiler la pral jis montre cho bri o aza andipe nan tout bouk la - pa pral gen okenn enstriksyon cho separe oswa plas nan kòd la. Sèlman bri. Men, si ou gade nan sik yo GC, yo tout jèn jenerasyon ak super vit - mikrosgond oswa milisgond maksimòm. Apre yo tout, tout memwa sa a mouri imedyatman. Ou asiyen dè milya de gigaocte, epi li koupe yo, li koupe yo, epi koupe yo ankò. Tout bagay sa yo rive trè vit. Li sanble ke gen sik GC bon mache, bri cho sou sik la tout antye, men nou vle jwenn yon vitès 5x. Nan moman sa a, yon bagay ta dwe fèmen nan tèt ou ak son: "poukisa sa a?!" Memwa teren debòde pa parèt nan debogaj klasik la; ou bezwen kouri debogeur kontwa pèfòmans pyès ki nan konpitè epi wè li tèt ou ak dirèkteman. Men, sa a pa ka dirèkteman sispèk nan twa sentòm sa yo. Twazyèm sentòm la se lè ou gade sa ou mete aksan sou, mande profiler la, epi li reponn: "Ou te fè yon milya ranje, men GC a te travay gratis." Le pli vit ke sa rive, ou reyalize ke ou te kreye twòp objè ak boule moute liy nan memwa tout antye. Gen yon fason pou evalye sa a, men li pa evidan. 

Pwoblèm nan se nan estrikti done a: estrikti a fè ki kache tout bagay k ap pase, li twò gwo, li se 2.7G sou disk, kidonk fè yon kopi bagay sa a se trè endezirab - ou vle chaje li nan tanpon an byte rezo imedyatman. antre nan rejis yo, pou yo pa li-ekri nan liy lan retounen ak lide senk fwa. Malerezman, Java pa ba ou tankou yon bibliyotèk kòm yon pati nan JDK la pa default. Men, sa a se trivial, dwa? Esansyèlman, sa yo se 5-10 liy kòd ki pral itilize pou aplike pwòp chajè fisèl tanpon ou a, ki repete konpòtman an nan klas fisèl la, pandan ke yo te yon anbalaj alantou tanpon an byte kache. Kòm yon rezilta, li vire soti ke w ap travay prèske tankou si ak fisèl, men an reyalite endikasyon nan tanpon an ap deplase la, ak bytes yo anvan tout koreksyon yo pa kopye nenpòt kote, e konsa menm tanpon yo reitilize ankò, epi ankò. sistèm operasyon an kontan pran sou tèt ou bagay sa yo li fèt pou yo, tankou kache doub-tampon nan sa yo tanpon byte, epi ou pa gen okenn ankò fanm k'ap pile nan yon kouran kontinuèl nan done nesesè. By wout la, èske ou konprann ke lè w ap travay ak GC, li garanti ke chak alokasyon memwa pa pral vizib nan processeur a apre dènye sik GC la? Se poutèt sa, tout bagay sa yo pa ka pètèt nan kachèt la, ak Lè sa a, yon 100% garanti miss rive. Lè w ap travay ak yon pointeur, sou x86, soustraksyon yon rejis nan memwa pran 1-2 sik revèy, epi le pli vit ke sa rive, ou peye, peye, peye, paske memwa a tout sou. NÈF kachèt – ak sa a se pri a nan alokasyon memwa. Valè reyèl.

Nan lòt mo, estrikti done yo se bagay ki pi difisil pou chanje. Apre sa, yon fwa ou reyalize ke ou te chwazi estrikti nan done ki mal ki pral touye pèfòmans pita sou, anjeneral gen anpil travay yo dwe fè, men si ou pa fè sa, bagay sa yo pral vin pi mal. Premye a tout, ou bezwen reflechi sou estrikti done, sa a enpòtan. Pri prensipal la isit la tonbe sou estrikti done grès, ki kòmanse itilize nan style la nan "Mwen kopye estrikti done X nan estrikti done Y paske mwen renmen fòm nan Y pi byen." Men, operasyon an kopi (ki sanble bon mache) aktyèlman gaspiye bandwidth memwa ak sa a se kote tout tan an ekzekisyon gaspiye antere l '. Si mwen gen yon fisèl jeyan nan JSON epi mwen vle vire li nan yon pye bwa DOM estriktire nan POJOs oswa yon lòt bagay, operasyon an nan analiz fisèl sa a ak bati POJO a, ak Lè sa a, aksè nan POJO a ankò pita, sa pral lakòz nan pri nesesè - li nan pa bon mache. Eksepte si ou kouri otou POJO yo pi souvan pase ou kouri otou yon fisèl. Offhand, ou ka olye eseye dechifre fisèl la ak ekstrè sèlman sa ou bezwen soti nan la, san yo pa vire l 'nan nenpòt POJO. Si tout bagay sa yo rive sou yon chemen ki soti nan ki pèfòmans maksimòm obligatwa, pa gen okenn POJO pou ou, ou bezwen yon jan kanmenm fouye nan liy lan dirèkteman.

Poukisa kreye pwòp langaj pwogramasyon ou

Andre: Ou te di ke pou w konprann modèl pri a, ou bezwen ekri pwòp ti lang ou...

Cliff: Pa yon lang, men yon du. Yon lang ak yon du se de bagay diferan. Diferans ki pi enpòtan an se nan tèt ou. 

Andre: By the way, jan mwen konnen, w ap fè eksperyans ak kreye pwòp lang ou. Pou kisa?

Cliff: Paske mwen kapab! Mwen semi-retrete, kidonk sa a se plezi mwen. Mwen te aplike lang lòt moun tout lavi mwen. Mwen menm mwen te travay anpil sou style kodaj mwen an. Epi tou paske mwen wè pwoblèm nan lòt lang. Mwen wè ke gen pi bon fason pou fè bagay ki abitye. Apre sa, mwen ta sèvi ak yo. Mwen jis bouke wè pwoblèm nan tèt mwen, nan Java, nan Python, nan nenpòt lòt lang. Kounye a mwen ekri nan React Native, JavaScript ak Elm kòm yon plezi ki pa sou retrèt, men sou travay aktif. Mwen ekri tou nan Python epi, gen plis chans, mwen pral kontinye travay sou aprantisaj machin pou backends Java. Gen anpil lang popilè e yo tout gen karakteristik enteresan. Tout moun se bon nan pwòp fason yo epi ou ka eseye pote tout karakteristik sa yo ansanm. Kidonk, m ap etidye bagay ki enterese m, konpòtman lang, m ap eseye vin ak semantik rezonab. E jiskaprezan mwen reyisi! Nan moman sa a mwen ap goumen ak semantik memwa, paske mwen vle genyen li tankou nan C ak Java, epi jwenn yon modèl memwa fò ak semantik memwa pou charj ak magazen. An menm tan an, gen enferans kalite otomatik tankou nan Haskell. Isit la, mwen ap eseye melanje kalite Haskell-tankou enferans ak travay memwa nan tou de C ak Java. Sa a se sa mwen te fè pou 2-3 mwa ki sot pase yo, pou egzanp.

Andre: Si ou bati yon lang ki pran pi bon aspè nan lòt lang, èske ou panse ke yon moun pral fè opoze a: pran lide ou epi sèvi ak yo?

Cliff: Sa a se egzakteman ki jan nouvo lang parèt! Poukisa Java sanble ak C? Paske C te gen yon sentaks bon ke tout moun konprann ak Java te enspire pa sentaks sa a, ajoute sekirite kalite, etalaj limit tcheke, GC, epi yo tou amelyore kèk bagay soti nan C. Yo te ajoute pwòp yo. Men, yo te enspire anpil, pa vre? Tout moun kanpe sou zepòl gran yo ki te vin anvan ou - se konsa pwogrè yo fèt.

Andre: Jan mwen konprann li, lang ou a pral memwa san danje. Èske w te panse sou aplikasyon yon bagay tankou yon chèk prete soti nan Rust? Ou te gade l, kisa w panse de li?

Cliff: Oke, mwen te ekri C pou laj, ak tout sa a malloc ak gratis, ak manyèlman jere lavi a. Ou konnen, 90-95% nan tan lavi manyèlman kontwole gen menm estrikti a. Epi li trè, trè douloure fè li manyèlman. Mwen ta renmen konpilatè a tou senpleman di ou sa k ap pase la ak sa ou reyalize ak aksyon ou yo. Pou kèk bagay, prete checker fè sa soti nan bwat la. Epi li ta dwe otomatikman montre enfòmasyon, konprann tout bagay, epi li pa menm chaje m ak prezante konpreyansyon sa a. Li dwe fè omwen analiz chape lokal, epi sèlman si li echwe, Lè sa a, li bezwen ajoute anotasyon kalite ki pral dekri tout lavi - ak tankou yon konplo se pi plis konplèks pase yon chèk prete, oswa tout bon nenpòt ki chèk memwa ki deja egziste. Chwa ki genyen ant "tout bagay anfòm" ak "Mwen pa konprann anyen" - non, dwe gen yon bagay ki pi bon. 
Se konsa, kòm yon moun ki te ekri yon anpil nan kòd nan C, mwen panse ke gen sipò pou kontwòl otomatik tout lavi se bagay ki pi enpòtan. Mwen tou bouke ak konbyen Java itilize memwa ak plent prensipal la se GC la. Lè ou asiyen memwa nan Java, ou pa pral refè memwa ki te lokal nan dènye sik GC la. Sa a se pa ka a nan lang ki gen jesyon memwa pi presi. Si ou rele malloc, ou imedyatman jwenn memwa ki te anjeneral jis itilize. Anjeneral ou fè kèk bagay tanporè ak memwa epi imedyatman retounen li tounen. Epi li imedyatman retounen nan pisin nan malloc, ak pwochen sik la malloc rale l 'soti ankò. Se poutèt sa, itilizasyon aktyèl memwa redwi a seri objè k ap viv nan yon moman bay, plis fwit. Men, si tout bagay pa koule nan yon fason konplètman endesan, pi fò nan memwa a fini nan kachèt ak processeur a, epi li travay byen vit. Men, mande pou yon anpil nan jesyon memwa manyèl ak malloc ak gratis rele nan bon lòd, nan bon plas la. Rust ka jere sa a byen poukont li, epi nan anpil ka bay menm pi bon pèfòmans, depi konsomasyon memwa se jis jis kalkil aktyèl la - kòm opoze a ap tann pou pwochen sik GC a libere memwa. Kòm yon rezilta, nou te jwenn yon fason trè enteresan amelyore pèfòmans. Ak byen pwisan - mwen vle di, mwen te fè bagay sa yo lè yo trete done pou fintech, e sa pèmèt mwen jwenn yon vitès apeprè senk fwa. Sa a se yon gwo ogmantasyon, espesyalman nan yon mond kote processeurs yo pa vin pi vit epi nou toujou ap tann pou amelyorasyon.

Karyè Enjenyè Pèfòmans

Andre: Mwen ta renmen tou mande alantou sou karyè an jeneral. Ou te monte nan enpòtans ak travay JIT ou nan HotSpot ak Lè sa a, demenaje ale rete nan Azul, ki se tou yon konpayi JVM. Men, nou te deja travay plis sou pyès ki nan konpitè pase lojisyèl. Apre sa, yo toudenkou chanje nan Big Data ak Machine Learning, ak Lè sa a, nan deteksyon fwod. Ki jan sa te rive? Sa yo se domèn devlopman trè diferan.

Cliff: Mwen te pwograme pou yon tan long epi yo te jere yo pran yon anpil nan klas diferan. Epi lè moun di: "oh, se ou menm ki te fè JIT pou Java!", li toujou komik. Men, anvan sa, mwen te travay sou yon script PostScript - lang ke Apple te itilize yon fwa pou enprimant lazè li yo. E anvan sa mwen te fè yon aplikasyon lang Forth la. Mwen panse ke tèm komen pou mwen se devlopman zouti. Tout lavi m 'te fè zouti ak ki lòt moun ekri pwogram fre yo. Men, mwen te tou patisipe nan devlopman nan sistèm operasyon, chofè, debogaj nivo nwayo, lang pou devlopman OS, ki te kòmanse soti trivial, men apre yon tan te vin pi plis ak plis konplèks. Men, sijè prensipal la se toujou devlopman nan zouti. Yon gwo pati nan lavi mwen te pase ant Azul ak Solèy, epi li te sou Java. Men, lè mwen te antre nan Big Data ak Machine Learning, mwen te mete chapo anpenpan mwen tounen epi mwen te di, "Oh, kounye a nou gen yon pwoblèm ki pa trivial, epi gen anpil bagay enteresan k ap pase ak moun ki fè bagay." Sa a se yon gwo chemen devlopman yo pran.

Wi, mwen vrèman renmen distribye informatique. Premye travay mwen se te kòm yon elèv nan C, sou yon pwojè piblisite. Sa a te distribye informatique sou chips Zilog Z80 ki kolekte done pou OCR analòg, ki te pwodwi pa yon analizeur analòg reyèl. Se te yon sijè fre ak konplètman fou. Men, te gen pwoblèm, kèk pati pa te rekonèt kòrèkteman, kidonk ou te oblije pran yon foto epi montre li bay yon moun ki te deja li ak je yo epi rapòte sa li te di, ak Se poutèt sa te gen travay ak done, ak travay sa yo. te gen pwòp lang yo. Te gen yon backend ki trete tout bagay sa yo - Z80s kouri nan paralèl ak tèminal vt100 kouri - youn pou chak moun, e te gen yon modèl pwogramasyon paralèl sou Z80 la. Gen kèk moso memwa komen tout Z80 yo pataje nan yon konfigirasyon zetwal; Backplane a te pataje tou, ak mwatye nan RAM la te pataje nan rezo a, ak yon lòt mwatye te prive oswa ale nan yon lòt bagay. Yon siyifikativman konplèks paralèl distribiye sistèm ak pataje... semi-pataje memwa. Ki lè sa a te... Mwen pa menm ka sonje, yon kote nan mitan ane 80 yo. Byen lontan de sa. 
Wi, ann sipoze ke 30 ane se byen lontan de sa. Pwoblèm ki gen rapò ak distribiye informatique te egziste pou byen lontan; moun yo te nan lagè ak Beolf- grap. Gwoup sa yo sanble... Pou egzanp: gen Ethernet ak x86 vit ou konekte ak Ethernet sa a, epi kounye a ou vle jwenn fo memwa pataje, paske pesonn pa t 'kapab fè distribiye kodaj enfòmatik Lè sa a, li te twò difisil ak Se poutèt sa gen te fo memwa pataje ak paj memwa pwoteksyon sou x86, epi si ou te ekri nan paj sa a, Lè sa a, nou te di lòt processeurs ke si yo gen aksè a menm memwa pataje a, li ta dwe chaje nan men ou, epi konsa yon bagay tankou yon pwotokòl pou sipòte. koerans kachèt parèt ak lojisyèl pou sa a. Enteresan konsèp. Vrè pwoblèm nan, nan kou, se te yon lòt bagay. Tout bagay sa yo te travay, men ou byen vit te resevwa pwoblèm pèfòmans, paske pa gen moun ki te konprann modèl pèfòmans yo nan yon nivo ase bon - ki modèl aksè memwa te la, ki jan yo asire w ke nœuds yo pa t 'enfiniman ping youn ak lòt, ak sou sa.

Ki sa mwen te vini ak nan H2O se ke li se devlopè yo tèt yo ki responsab pou detèmine kote paralelis kache ak kote li pa. Mwen te vini ak yon modèl kodaj ki te fè ekri kòd segondè-pèfòmans fasil ak senp. Men, ekri kòd ralanti-kouri difisil, li pral gade move. Ou bezwen seryezman eseye ekri kòd dousman, w ap oblije sèvi ak metòd ki pa estanda. Kòd frenaj la vizib nan premye gade. Kòm yon rezilta, anjeneral ou ekri kòd ki kouri vit, men ou dwe konnen ki sa yo dwe fè nan ka a nan memwa pataje. Tout bagay sa yo mare nan gwo ranje ak konpòtman an gen menm jan ak ranje ki pa temèt gwo nan paralèl Java. Mwen vle di, imajine ke de fil ekri nan yon etalaj paralèl, youn nan yo genyen, ak lòt la, kòmsadwa, pèdi, epi ou pa konnen kiyès ki youn. Si yo pa temèt, Lè sa a, lòd la ka tou sa ou vle - ak sa a travay reyèlman byen. Moun yo reyèlman pran swen sou lòd operasyon yo, yo mete temèt nan bon kote, epi yo atann pwoblèm pèfòmans ki gen rapò ak memwa nan kote ki dwat. Sinon, yo ta tou senpleman ekri kòd nan fòm lan nan bouk ki soti nan 1 rive nan N, kote N se kèk billions, nan espwa ke tout ka konplèks yo pral otomatikman vin paralèl - epi li pa travay la. Men, nan H2O sa a se pa ni Java ni Scala; ou ka konsidere li "Java mwens mwens" si ou vle. Sa a se yon estil pwogramasyon trè klè epi li sanble ak ekri kòd senp C oswa Java ak bouk ak etalaj. Men, an menm tan an, memwa ka trete nan teraoctet. Mwen toujou sèvi ak H2O. Mwen sèvi ak li de tan zan tan nan diferan pwojè - epi li toujou bagay ki pi rapid, plizyè douzèn fwa pi vit pase konpetitè li yo. Si w ap fè gwo done ak done kolon, li trè difisil pou bat H2O.

Defi teknik

Andre: Ki sa ki te pi gwo defi ou nan tout karyè ou?

Cliff: Èske nou diskite sou pati teknik oswa ki pa teknik nan pwoblèm nan? Mwen ta di pi gwo defi yo pa teknik. 
Kòm pou defi teknik. Mwen tou senpleman bat yo. Mwen pa menm konnen ki sa ki pi gwo a te, men te gen kèk trè enteresan ki te pran yon ti tan, lit mantal. Lè m 'te ale nan Solèy, mwen te asire w ke mwen ta fè yon konpile rapid, ak yon pakèt moun aje te di nan repons ke mwen pa ta janm reyisi. Men, mwen te swiv chemen sa a, te ekri yon du pou allocator enskri a, e li te byen vit. Li te osi vit ke modèn C1, men alokatè a te pi dousman lè sa a, ak nan retwouve li te yon gwo pwoblèm estrikti done. Mwen te bezwen li pou ekri yon alokasyon rejis grafik epi mwen pa t 'konprann dilèm ki genyen ant ekspresyon kòd ak vitès, ki te egziste nan epòk sa a e ki te trè enpòtan. Li te tounen soti ke estrikti nan done anjeneral depase gwosè a kachèt sou x86s nan tan sa a, ak Se poutèt sa, si mwen okòmansman sipoze ke allocator enskri a ta travay soti 5-10 pousan nan tan an total jitter, Lè sa a, an reyalite li te tounen soti yo dwe. 50 pousan.

Kòm tan te pase, konpilatè a te vin pi pwòp ak pi efikas, sispann jenere kòd terib nan plis ka, ak pèfòmans de pli zan pli te kòmanse sanble ak sa yon konpilateur C pwodui. Sòf si, nan kou, ou ekri kèk vye bagay ke menm C pa akselere. . Si ou ekri kòd tankou C, ou pral jwenn pèfòmans tankou C nan plis ka. Ak pi lwen ou te ale, pi souvan ou te jwenn kòd ki asymptotically kowenside ak nivo C, alokateur enskri a te kòmanse sanble ak yon bagay konplè ... kèlkeswa si kòd ou a kouri vit oswa dousman. Mwen te kontinye travay sou alokatè a pou fè li fè pi bon seleksyon. Li te vin pi dousman ak pi dousman, men li te bay pi bon ak pi bon pèfòmans nan ka kote pèsonn pa t 'kapab fè fas. Mwen te kapab plonje nan yon alokasyon rejis, antere yon mwa nan travay la, epi toudenkou kòd la antye ta kòmanse egzekite 5% pi vit. Sa a te rive tan apre tan ak alokasyon enskri a te vin tounen yon bagay nan yon travay atizay - tout moun te renmen li oswa rayi li, ak moun ki soti nan akademi an te poze kesyon sou sijè a "poukisa tout bagay fèt konsa", poukisa yo pa. eskanè liy, ak ki diferans ki genyen. Repons lan se toujou menm bagay la tou: yon alokatè ki baze sou penti graf ak anpil atansyon travay ak kòd tanpon an egal a yon zam nan viktwa, konbinezon ki pi bon ke pèsonn pa ka defèt. Lè sa a se yon bagay olye ki pa evidan. Tout lòt bagay ke du a fè gen jistis byen etidye bagay sa yo, byenke yo te tou te pote nan nivo a nan atizay. Mwen te toujou fè bagay ki te sipoze tounen du a nan yon travay atistik. Men, pa youn nan sa yo te anyen ekstraòdinè - eksepte pou alokasyon an enskri. Trick a se fè atansyon koupe anba chaj epi, si sa rive (mwen ka eksplike an plis detay si enterese), sa vle di ke ou ka aliye plis agresif, san risk pou yo tonbe sou yon pli nan orè pèfòmans lan. Nan epòk sa yo, te gen yon pakèt moun nan konpilatè plen echèl, pandye ak baubles ak sifle, ki te gen alokasyon anrejistre, men pesonn pa t 'kapab fè li.

Pwoblèm lan se ke si ou ajoute metòd ki sijè a inlining, ogmante ak ogmante zòn nan inlining, seri valè yo itilize imedyatman depase kantite rejis, epi ou dwe koupe yo. Nivo kritik la anjeneral vini lè allokatè a bay moute, ak yon sèl bon kandida pou yon devèsman vo yon lòt, ou pral vann kèk bagay jeneralman sovaj. Valè inlining isit la se ke ou pèdi yon pati nan tèt la, anlè pou rele ak ekonomize, ou ka wè valè yo andedan epi yo ka plis optimize yo. Pri a nan inlining se ke yon gwo kantite valè vivan yo fòme, epi si alokateur enskri ou boule plis pase sa nesesè, ou imedyatman pèdi. Se poutèt sa, pifò alokatè gen yon pwoblèm: lè inlining kwaze yon sèten liy, tout bagay nan mond lan kòmanse koupe ak pwodiktivite ka koule nan twalèt la. Moun ki aplike du a ajoute kèk euristik: pou egzanp, yo sispann inlining, kòmanse ak kèk gwosè ase gwo, depi alokasyon pral ruine tout bagay. Sa a se ki jan yon kink nan graf pèfòmans lan fòme - ou inline, inline, pèfòmans lan ap grandi tou dousman - ak Lè sa a, boom! – li tonbe atè tankou yon Jack rapid paske ou liy twòp. Men ki jan tout bagay te travay anvan avènement de Java. Java mande pou anpil plis inlining, se konsa mwen te oblije fè alokateur mwen an pi agresif pou li nivo soti olye ke aksidan, epi si ou aliye twòp, li kòmanse koule, men Lè sa a, "pa gen plis koule" moman an toujou vini. Sa a se yon obsèvasyon enteresan epi li jis te vin jwenn mwen soti nan okenn kote, pa evidan, men li peye byen. Mwen te pran inlining agresif epi li te mennen m 'nan kote kote Java ak C pèfòmans travay kòt a kòt. Yo vrèman fèmen - mwen ka ekri kòd Java ki se siyifikativman pi vit pase kòd C ak bagay sa yo, men an mwayèn, nan foto a gwo nan bagay sa yo, yo ap apeprè konparab. Mwen panse ke yon pati nan merit sa a se alokatè rejis la, ki pèmèt mwen enline kòm estipid ke posib. Mwen jis enline tout sa mwen wè. Kesyon an isit la se si alokatè a travay byen, si rezilta a se kòd entèlijan k ap travay. Sa a te yon gwo defi: yo konprann tout sa a epi fè li mache.

Yon ti kras sou alokasyon enskri ak milti-nwayo

Vladimir: Pwoblèm tankou alokasyon enskri sanble tankou yon kalite etènèl, sijè kontinuèl. Mwen mande si te janm gen yon lide ki te sanble pwomèt ak Lè sa a, echwe nan pratik?

Cliff: Sètènman! Alokasyon enskri se yon zòn kote ou eseye jwenn kèk euristik pou rezoud yon pwoblèm NP-complete. Epi ou pa janm ka reyalize yon solisyon pafè, dwa? Sa a se tou senpleman enposib. Gade, Ahead of Time konpilasyon - li tou travay mal. Konvèsasyon an isit la se sou kèk ka mwayèn. Konsènan pèfòmans tipik, kidonk, ou ka ale ak mezire yon bagay ke ou panse se yon bon pèfòmans tipik - apre tout, w ap travay amelyore li! Alokasyon anrejistre se yon sijè tout sou pèfòmans. Yon fwa ou gen premye pwototip la, li travay ak pentire sa ki nesesè, travay la pèfòmans kòmanse. Ou bezwen aprann byen mezire. Poukisa li enpòtan? Si ou gen done klè, ou ka gade nan diferan zòn epi wè: wi, li te ede isit la, men se kote tout bagay te kraze! Gen kèk bon lide ki vini, ou ajoute nouvo euristik epi toudenkou tout bagay kòmanse travay yon ti kras pi byen an mwayèn. Oswa li pa kòmanse. Mwen te gen yon pakèt ka kote nou t ap goumen pou pèfòmans senk pousan ki diferansye devlopman nou ak alokasyon anvan an. Ak chak fwa li sanble sa a: yon kote ou genyen, yon kote ou pèdi. Si ou gen bon zouti analiz pèfòmans, ou ka jwenn lide pèdi epi konprann poukisa yo echwe. Petèt li vo kite tout bagay jan li ye, oswa petèt pran yon apwòch ki pi grav nan ajisteman, oswa ale deyò epi repare yon lòt bagay. Se yon pakèt bagay! Mwen te fè Hack sa a fre, men mwen tou bezwen yon sèl sa a, ak yon sèl sa a, ak yon sèl sa a - ak konbinezon total yo bay kèk amelyorasyon. Ak solitaires ka echwe. Sa a se nati travay pèfòmans sou pwoblèm NP-complete.

Vladimir: Yon moun vin santi ke bagay tankou penti nan alokatè yo se yon pwoblèm ki te deja rezoud. Oke, li deside pou ou, jije pa sa w ap di, kidonk èske li menm vo li lè sa a...

Cliff: Li pa rezoud kòm sa yo. Se ou menm ki dwe tounen "rezoud". Gen pwoblèm difisil epi yo bezwen rezoud. Yon fwa sa a se fè, li lè yo travay sou pwodiktivite. Ou bezwen apwoche travay sa a kòmsadwa - fè referans, kolekte mezi, eksplike sitiyasyon lè, lè ou te retounen nan yon vèsyon anvan, ansyen Hack ou a te kòmanse travay ankò (oswa vis vèrsa, sispann). Epi pa abandone jiskaske ou reyalize yon bagay. Kòm mwen te deja di, si gen lide fre ki pa t 'travay, men nan jaden an nan alokasyon nan rejis nan lide li se apeprè intèrminabl. Ou ka, pa egzanp, li piblikasyon syantifik. Malgre ke kounye a zòn sa a te kòmanse deplase pi dousman epi li te vin pi klè pase nan jèn li yo. Sepandan, gen anpil moun k ap travay nan domèn sa a ak tout lide yo vo eseye, yo tout ap tann nan zèl yo. Epi ou pa ka di ki jan yo bon sof si ou eseye yo. Ki jan yo byen entegre ak tout lòt bagay nan alokatè ou a, paske yon alokatè fè anpil bagay, ak kèk lide pa pral travay nan alokatè espesifik ou a, men nan yon lòt alokatè yo pral fasil. Fason prensipal pou genyen pou alokasyon an se rale bagay la dousman deyò chemen prensipal la epi fòse li fann sou limit yo nan chemen yo dousman. Se konsa, si ou vle kouri yon GC, pran chemen an dousman, deoptimize, voye yon eksepsyon, tout bagay sa yo - ou konnen bagay sa yo se relativman ra. Epi yo vrèman ra, mwen tcheke. Ou fè travay siplemantè epi li retire anpil restriksyon sou chemen dousman sa yo, men li pa vrèman enpòtan paske yo dousman epi yo raman vwayaje. Pou egzanp, yon konsèy nil - li pa janm rive, dwa? Ou bezwen gen plizyè chemen pou bagay diferan, men yo pa ta dwe entèfere ak youn prensipal la. 

Vladimir: Ki sa ou panse sou milti-nwayo, lè gen dè milye de nwayo nan yon fwa? Èske sa se yon bagay itil?

Cliff: Siksè GPU a montre ke li se byen itil!

Vladimir: Yo byen espesyalize. E processeurs jeneral?

Cliff: Oke, se te modèl biznis Azul la. Repons lan te tounen nan yon epòk lè moun te vrèman renmen pèfòmans previzib. Li te difisil pou ekri kòd paralèl lè sa a. Modèl kodaj H2O a trè évolutive, men se pa yon modèl objektif jeneral. Petèt yon ti kras pi jeneral pase lè w ap itilize yon GPU. Èske nou pale de konpleksite nan devlope yon bagay konsa oswa konpleksite nan sèvi ak li? Pa egzanp, Azul te anseye m yon leson enteresan, yon leson ki pa evidan: ti kachèt yo nòmal. 

Pi gwo defi nan lavi a

Vladimir: Ki sa ki sou defi ki pa teknik?

Cliff: Pi gwo defi a pa t ' dwe... janti ak bèl ak moun. Epi kòm rezilta, mwen toujou ap jwenn tèt mwen nan sitiyasyon trè konfli. Sa yo kote mwen te konnen bagay yo t ap mal mache, men yo pa t konnen ki jan pou avanse pou pi devan ak pwoblèm sa yo epi yo pa t ka jere yo. Anpil pwoblèm alontèm, ki dire pou dè dekad, te parèt nan fason sa a. Lefèt ke Java gen C1 ak C2 du se yon konsekans dirèk sa a. Lefèt ke pa te gen okenn konpilasyon milti-nivo nan Java pou dis ane nan yon ranje se tou yon konsekans dirèk. Li evidan ke nou te bezwen yon sistèm konsa, men li pa evidan poukisa li pa t egziste. Mwen te gen pwoblèm ak yon enjenyè... oswa yon gwoup enjenyè. Yon fwa, lè mwen te kòmanse travay nan Sun, mwen te... Oke, pa sèlman lè sa a, mwen jeneralman toujou gen pwòp opinyon mwen sou tout bagay. Apre sa, mwen te panse se vre ke ou ta ka jis pran sa a verite nan ou epi di li tèt sou. Espesyalman depi mwen te chokan rezon pi fò nan tan an. Men, si ou pa renmen apwòch sa a ... espesyalman si ou se evidamman mal epi fè istwa san sans ... An jeneral, kèk moun te kapab tolere fòm sa a nan kominikasyon. Malgre ke kèk te kapab, tankou mwen. Mwen te bati tout lavi mwen sou prensip meritokrat. Si w montre m yon bagay ki mal, m ap vire imedyatman epi m ap di: ou te di istwa san sans. An menm tan, nan kou, mwen eskize ak tout sa, mwen pral note merit yo, si genyen, epi pran lòt aksyon kòrèk. Nan lòt men an, mwen se chokan rezon sou yon pousantaj chokan gwo nan tan total la. Epi li pa travay trè byen nan relasyon ak moun. Mwen pa ap eseye fè bèl, men mwen ap poze kesyon an briskeman. "Sa p'ap janm mache, paske yonn, de ak twa." Epi yo te tankou, "Oh!" Te gen lòt konsekans ki te pwobableman pi bon yo inyore: pou egzanp, sa yo ki te mennen nan yon divòs ak madanm mwen ak dis ane nan depresyon apre sa.

Defi se yon lit ak moun, ak pèsepsyon yo sou sa ou kapab oswa pa ka fè, sa ki enpòtan ak sa ki pa. Te gen anpil defi sou style kodaj. Mwen toujou ekri anpil kòd, e nan epòk sa yo mwen menm te oblije ralanti paske m t ap fè twòp travay paralèl e m t ap fè yo mal, olye m te konsantre sou youn. Gade dèyè, mwen te ekri mwatye kòd la pou lòd Java JIT la, kòmandman C2 la. Pwochen kodeur ki pi rapid la te ekri mwatye ralanti, pwochen mwatye kòm ralanti, e li te yon bès eksponansyèl. Setyèm moun nan ranje sa a te trè, trè dousman - sa toujou rive! Mwen manyen anpil kòd. Mwen te gade ki moun ki te ekri sa, san okenn eksepsyon, mwen te gade kòd yo, mwen te revize chak nan yo, epi mwen te toujou kontinye ekri plis tèt mwen pase nenpòt nan yo. Apwòch sa a pa travay trè byen ak moun. Gen moun ki pa renmen sa. Men, lè yo pa ka jere li, tout kalite plent kòmanse. Pa egzanp, yon fwa yo te di m sispann kode paske m t ap ekri twòp kòd e sa te mete ekip la an danje, e tout bagay te sonnen tankou yon blag pou mwen: mesye, si rès ekip la disparèt epi mwen kontinye ekri kòd, ou. pral sèlman pèdi mwatye ekip yo. Nan lòt men an, si mwen kontinye ekri kòd epi ou pèdi mwatye ekip la, sa son tankou jesyon trè move. Mwen pa janm vrèman panse sou li, pa janm pale sou li, men li te toujou yon kote nan tèt mwen. Lide a t ap vire nan do tèt mwen: "Èske nou tout ap jwe m?" Se konsa, pi gwo pwoblèm nan se mwen menm ak relasyon mwen ak moun. Koulye a, mwen konprann tèt mwen pi byen, mwen te yon ekip dirijan pou pwogramè pou yon tan long, epi kounye a mwen dirèkteman di moun: ou konnen, mwen se ki moun mwen ye, epi ou pral gen fè fas ak mwen - èske li oke si mwen kanpe isit la? Men, lè yo te kòmanse fè fas ak li, tout bagay te travay. An reyalite, mwen pa ni move ni bon, mwen pa gen okenn move entansyon oswa aspirasyon egoyis, se jis sans mwen, epi mwen bezwen viv ak li yon jan kanmenm.

Andre: Jis dènyèman tout moun te kòmanse pale sou konsyans pwòp tèt ou pou entrovèrti, ak konpetans mou an jeneral. Kisa ou ka di sou sa?

Cliff: Wi, se te insight ak leson mwen te aprann nan divòs mwen ak madanm mwen. Sa mwen te aprann nan divòs la te konprann tèt mwen. Se konsa mwen te kòmanse konprann lòt moun. Konprann kijan entèraksyon sa a fonksyone. Sa a te mennen nan dekouvèt youn apre lòt. Te gen yon konsyans sou ki moun mwen ye ak sa mwen reprezante. Ki sa m ap fè: swa mwen okipe travay la, oswa mwen evite konfli, oswa yon lòt bagay - ak nivo sa a nan konsyans pwòp tèt ou reyèlman ede kenbe tèt mwen nan kontwòl. Apre sa, tout bagay ale pi fasil. Youn nan bagay mwen dekouvri pa sèlman nan tèt mwen, men tou nan lòt pwogramasyon se enkapasite a vèbalize panse lè ou anba estrès emosyonèl. Pou egzanp, w ap chita la kodaj, nan yon eta de koule, ak Lè sa a, yo vin kouri vin jwenn ou epi yo kòmanse kriyan nan isterik ke yon bagay kase e kounye a, mezi ekstrèm yo pral pran kont ou. Epi ou pa ka di yon mo paske ou nan yon eta de estrès emosyonèl. Konesans akeri a pèmèt ou prepare pou moman sa a, siviv li epi ale nan yon plan retrè, apre sa ou ka fè yon bagay. Se konsa, wi, lè ou kòmanse reyalize ki jan li tout travay, li se yon gwo evènman ki chanje lavi. 
Mwen menm mwen pa t 'kapab jwenn bon mo yo, men mwen sonje sekans aksyon yo. Pwen an se ke reyaksyon sa a se kòm anpil fizik kòm li se vèbal, epi ou bezwen espas. Espas konsa, nan sans Zen. Sa a se egzakteman sa ki bezwen yo dwe eksplike, ak Lè sa a imedyatman etap sou kote - piman fizikman etap lwen. Lè mwen rete an silans vèbalman, mwen ka trete sitiyasyon an emosyonèlman. Kòm adrenalin nan rive nan sèvo ou, chanje ou nan batay oswa vòl mòd, ou pa ka di anyen ankò, non - kounye a ou se yon moun sòt, yon enjenyè fwete, enkapab pou yon repons desan oswa menm sispann atak la, epi atakè a gratis. atake ankò e ankò. Ou dwe premye vin tèt ou ankò, reprann kontwòl, soti nan mòd "batay oswa vòl".

E pou sa nou bezwen espas vèbal. Jis espas gratis. Si ou di anyen nan tout, Lè sa a, ou ka di egzakteman sa, ak Lè sa a, ale ak reyèlman jwenn "espas" pou tèt ou: ale pou yon ti mache nan pak la, fèmen tèt ou nan douch la - li pa enpòtan. Bagay pwensipal lan se dekonekte tanporèman nan sitiyasyon sa a. Le pli vit ke ou fèmen pou omwen kèk segonn, kontwòl retounen, ou kòmanse panse sobreman. "Oke, mwen pa yon kalite sòt, mwen pa fè bagay sòt, mwen se yon moun trè itil." Yon fwa ou te kapab konvenk tèt ou, li se tan pou w ale nan pwochen etap la: konprann sa ki te pase. Yo te atake w, atak la soti kote w pa t atann li, se te yon anbiskad malonèt, vye. Sa a se move. Pwochen etap la se konprann poukisa atakè a bezwen sa a. Vrèman, poukisa? Petèt paske li menm li move? Poukisa li fache? Pou egzanp, paske li vise tèt li epi li pa ka aksepte responsablite? Sa a se yon fason a ak anpil atansyon jere sitiyasyon an antye. Men, sa mande plas pou manevwe, espas vèbal. Premye etap la se kraze kontak vèbal. Evite diskisyon ak mo. Anile li, ale pi vit ke posib. Si se yon konvèsasyon telefòn, jis rakwoche - sa a se yon konpetans mwen te aprann nan kominike ak ansyen madanm mwen. Si konvèsasyon an pa mache byen, jis di "orevwa" epi rakroche. Soti nan lòt bò telefòn nan: "bla bla bla", ou reponn: "yeah, bye!" epi rakroche. Ou jis fini konvèsasyon an. Senk minit apre, lè kapasite pou w panse sensab retounen nan ou, ou te refwadi yon ti kras, li vin posib yo reflechi sou tout bagay, sa ki te pase ak sa ki pral rive apre. Epi kòmanse fòmile yon repons reflechi, olye ke jis reyaji soti nan emosyon. Pou mwen, zouti nan konsyans pwòp tèt ou te jisteman lefèt ke nan ka ta gen estrès emosyonèl mwen pa ka pale. Lè w soti nan eta sa a, panse ak planifye ki jan yo reponn ak konpanse pou pwoblèm - sa yo se etap ki dwat nan ka a lè ou pa ka pale. Fason ki pi fasil la se kouri soti nan sitiyasyon an kote estrès emosyonèl manifeste tèt li epi tou senpleman sispann patisipe nan estrès sa a. Apre sa ou vin kapab panse, lè ou ka panse, ou vin kapab pale, elatriye.

By wout la, nan tribinal la, avoka opoze a ap eseye fè sa pou ou - kounye a li klè poukisa. Paske li gen kapasite pou siprime ou nan yon eta konsa ke ou pa ka menm pwononse non ou, pou egzanp. Nan yon sans trè reyèl, ou pa pral kapab pale. Si sa rive ou, epi si ou konnen ke ou pral jwenn tèt ou nan yon kote kote batay vèbal yo anraje, nan yon kote tankou tribinal, Lè sa a, ou ka vini ak avoka ou. Avoka a pral kanpe pou ou epi sispann atak vèbal la, epi li pral fè li nan yon fason konplètman legal, ak espas Zen pèdi a pral retounen nan ou. Pou egzanp, mwen te oblije rele fanmi mwen yon koup de fwa, jij la te byen zanmitay sou sa a, men avoka opoze a kriye ak rele nan pye m ', mwen pa t' kapab menm jwenn yon mo nan edgewise. Nan ka sa yo, sèvi ak yon medyatè travay pi bon pou mwen. Medyatè a sispann tout presyon sa a k ap vide sou ou nan yon kouran kontinyèl, ou jwenn espas ki nesesè Zen, epi ak li kapasite nan pale retounen. Sa a se tout yon domèn konesans kote gen anpil pou etidye, anpil pou dekouvri nan tèt ou, ak tout bagay sa yo vin tounen desizyon estratejik wo nivo ki diferan pou diferan moun. Gen kèk moun ki pa gen pwoblèm ki dekri pi wo a; anjeneral, moun ki se moun ki vann pwofesyonèl pa genyen yo. Tout moun sa yo ki fè lavi yo ak mo - chantè pi popilè, powèt, lidè relijye ak politisyen, yo toujou gen yon bagay yo di. Yo pa gen pwoblèm sa yo, men mwen genyen.

Andre: Li te... inatandi. Bon, nou te deja pale anpil e li lè pou fini entèvyou sa a. Nou pral definitivman rankontre nan konferans la epi yo pral kapab kontinye dyalòg sa a. Na wè nan Hydra!

Ou ka kontinye konvèsasyon ou ak Cliff nan konferans Hydra 2019 la, ki pral fèt 11-12 jiyè 2019 nan Saint Petersburg. Li pral vini ak yon rapò "Eksperyans nan memwa tranzaksyon Blue Hardware". Tikè yo ka achte sou sit entènèt ofisyèl la.

Sous: www.habr.com

Add nouvo kòmantè