జావాలో JIT సంకలనం యొక్క తండ్రి క్లిఫ్ క్లిక్‌తో గొప్ప ఇంటర్వ్యూ

జావాలో JIT సంకలనం యొక్క తండ్రి క్లిఫ్ క్లిక్‌తో గొప్ప ఇంటర్వ్యూక్లిఫ్ క్లిక్ - CTO CTO (ప్రాసెస్ మెరుగుదల కోసం IoT సెన్సార్లు), అనేక విజయవంతమైన నిష్క్రమణలతో అనేక స్టార్టప్‌ల (రాకెట్ రియల్‌టైమ్ స్కూల్, న్యూరెన్సిక్ మరియు H2O.aiతో సహా) వ్యవస్థాపకుడు మరియు సహ వ్యవస్థాపకుడు. క్లిఫ్ తన మొదటి కంపైలర్‌ను 15 సంవత్సరాల వయస్సులో వ్రాసాడు (TRS Z-80 కోసం పాస్కల్)! అతను జావాలోని C2 (నోడ్స్ IR)లో చేసిన పనికి బాగా ప్రసిద్ది చెందాడు. ఈ కంపైలర్ JIT అధిక-నాణ్యత కోడ్‌ను ఉత్పత్తి చేయగలదని ప్రపంచానికి చూపించింది, ఇది ప్రధాన ఆధునిక సాఫ్ట్‌వేర్ ప్లాట్‌ఫారమ్‌లలో ఒకటిగా జావా ఆవిర్భావానికి కారకాల్లో ఒకటి. అప్పుడు క్లిఫ్ అజుల్ సిస్టమ్స్‌కు 864 మిల్లీసెకన్లలో 500-గిగాబైట్ హీప్‌లో GC పాజ్‌లను సపోర్ట్ చేసే స్వచ్ఛమైన జావా సాఫ్ట్‌వేర్‌తో 10-కోర్ మెయిన్‌ఫ్రేమ్‌ను రూపొందించడంలో సహాయపడింది. సాధారణంగా, క్లిఫ్ JVM యొక్క అన్ని అంశాలపై పని చేయగలిగాడు.

 
ఈ హబ్రాపోస్ట్ క్లిఫ్‌తో గొప్ప ఇంటర్వ్యూ. మేము ఈ క్రింది అంశాలపై మాట్లాడుతాము:

  • తక్కువ-స్థాయి ఆప్టిమైజేషన్‌లకు మార్పు
  • పెద్ద రీఫ్యాక్టరింగ్ ఎలా చేయాలి
  • ఖర్చు మోడల్
  • తక్కువ-స్థాయి ఆప్టిమైజేషన్ శిక్షణ
  • పనితీరు మెరుగుదల యొక్క ఆచరణాత్మక ఉదాహరణలు
  • మీ స్వంత ప్రోగ్రామింగ్ భాషను ఎందుకు సృష్టించుకోవాలి
  • పనితీరు ఇంజనీర్ కెరీర్
  • సాంకేతిక సవాళ్లు
  • రిజిస్టర్ కేటాయింపు మరియు బహుళ కోర్ల గురించి కొంచెం
  • జీవితంలో అతిపెద్ద సవాలు

ఇంటర్వ్యూ వీరిచే నిర్వహించబడుతుంది:

  • ఆండ్రీ సతరిన్ Amazon వెబ్ సర్వీసెస్ నుండి. తన కెరీర్‌లో, అతను పూర్తిగా భిన్నమైన ప్రాజెక్ట్‌లలో పని చేయగలిగాడు: అతను Yandexలో NewSQL పంపిణీ చేసిన డేటాబేస్, Kaspersky ల్యాబ్‌లోని క్లౌడ్ డిటెక్షన్ సిస్టమ్, Mail.ruలో మల్టీప్లేయర్ గేమ్ మరియు డ్యూయిష్ బ్యాంక్‌లో విదేశీ మారకపు ధరలను లెక్కించే సేవను పరీక్షించాడు. పెద్ద-స్థాయి బ్యాకెండ్ మరియు పంపిణీ చేయబడిన సిస్టమ్‌లను పరీక్షించడంలో ఆసక్తి ఉంది.
  • వ్లాదిమిర్ సిట్నికోవ్ నెట్‌క్రాకర్ నుండి. నెట్‌క్రాకర్ OS యొక్క పనితీరు మరియు స్కేలబిలిటీపై పది సంవత్సరాల పని, నెట్‌వర్క్ మరియు నెట్‌వర్క్ పరికరాల నిర్వహణ ప్రక్రియలను ఆటోమేట్ చేయడానికి టెలికాం ఆపరేటర్లు ఉపయోగించే సాఫ్ట్‌వేర్. జావా మరియు ఒరాకిల్ డేటాబేస్ పనితీరు సమస్యలపై ఆసక్తి ఉంది. అధికారిక PostgreSQL JDBC డ్రైవర్‌లో డజనుకు పైగా పనితీరు మెరుగుదలల రచయిత.

తక్కువ-స్థాయి ఆప్టిమైజేషన్‌లకు మార్పు

ఆండ్రూ: మీరు సాధారణంగా JIT సంకలనం, జావా మరియు పనితీరు పని ప్రపంచంలో పెద్ద పేరు, సరియైనదా? 

క్లయిఫ్: ఇది కూడా అలాంటిదే!

ఆండ్రూ: పనితీరు పని గురించి కొన్ని సాధారణ ప్రశ్నలతో ప్రారంభిద్దాం. CPU స్థాయిలో పని చేయడం వంటి ఉన్నత-స్థాయి మరియు తక్కువ-స్థాయి ఆప్టిమైజేషన్‌ల మధ్య ఎంపిక గురించి మీరు ఏమనుకుంటున్నారు?

క్లయిఫ్: అవును, ఇక్కడ ప్రతిదీ చాలా సులభం. వేగవంతమైన కోడ్ ఎప్పుడూ అమలు చేయనిది. అందువల్ల, మీరు ఎల్లప్పుడూ ఉన్నత స్థాయి నుండి ప్రారంభించాలి, అల్గోరిథంలపై పని చేయాలి. కొన్ని తగినంత పెద్ద స్థిరాంకాలు జోక్యం చేసుకుంటే తప్ప, మెరుగైన O సంజ్ఞామానం అధ్వాన్నమైన O సంజ్ఞామానాన్ని బీట్ చేస్తుంది. తక్కువ స్థాయి విషయాలు చివరిగా సాగుతాయి. సాధారణంగా, మీరు మీ మిగిలిన స్టాక్‌ను తగినంతగా ఆప్టిమైజ్ చేసి, ఇంకా కొన్ని ఆసక్తికరమైన అంశాలు మిగిలి ఉంటే, అది తక్కువ స్థాయి. కానీ ఉన్నత స్థాయి నుండి ఎలా ప్రారంభించాలి? తగినంత ఉన్నత స్థాయి పని జరిగిందని మీకు ఎలా తెలుసు? సరే... పర్లేదు. రెడీమేడ్ వంటకాలు లేవు. మీరు సమస్యను అర్థం చేసుకోవాలి, మీరు ఏమి చేయబోతున్నారో నిర్ణయించుకోవాలి (భవిష్యత్తులో అనవసరమైన చర్యలు తీసుకోకుండా ఉండటానికి) ఆపై మీరు ప్రొఫైలర్‌ను వెలికితీయవచ్చు, ఇది ఉపయోగకరమైనది చెప్పగలదు. ఏదో ఒక సమయంలో, మీరు అనవసరమైన విషయాలను వదిలించుకున్నారని మరియు తక్కువ-స్థాయి ఫైన్ ట్యూనింగ్ చేయడానికి ఇది సమయం అని మీరే గ్రహించారు. ఇది ఖచ్చితంగా ఒక ప్రత్యేకమైన కళ. చాలా మంది వ్యక్తులు అనవసరమైన పనులు చేస్తున్నారు, కానీ ఉత్పాదకత గురించి ఆందోళన చెందడానికి వారికి సమయం లేనంత వేగంగా కదులుతున్నారు. కానీ ఈ ప్రశ్న సూటిగా తలెత్తే వరకు. సాధారణంగా 99% సమయం ఎవరూ పట్టించుకోని క్లిష్టమైన మార్గంలో ఒక ముఖ్యమైన విషయం వచ్చే వరకు నేను ఏమి చేస్తున్నానో ఎవరూ పట్టించుకోరు. మరియు ఇక్కడ ప్రతి ఒక్కరూ మిమ్మల్ని "మొదటి నుండి ఎందుకు సరిగ్గా పని చేయలేదు" అని మిమ్మల్ని ఇబ్బంది పెట్టడం ప్రారంభిస్తారు. సాధారణంగా, పనితీరును మెరుగుపరచడానికి ఎల్లప్పుడూ ఏదో ఉంటుంది. కానీ 99% సమయం మీకు లీడ్‌లు లేవు! మీరు ఏదో పని చేయడానికి ప్రయత్నిస్తున్నారు మరియు ప్రక్రియలో ముఖ్యమైనది ఏమిటో మీరు గుర్తించవచ్చు. ఈ భాగం పరిపూర్ణంగా ఉండాలని మీరు ముందుగానే ఎప్పటికీ తెలుసుకోలేరు, కాబట్టి, వాస్తవానికి, మీరు ప్రతిదానిలో పరిపూర్ణంగా ఉండాలి. కానీ ఇది అసాధ్యం మరియు మీరు దీన్ని చేయరు. పరిష్కరించడానికి ఎల్లప్పుడూ చాలా విషయాలు ఉన్నాయి - మరియు ఇది పూర్తిగా సాధారణం.

పెద్ద రీఫ్యాక్టరింగ్ ఎలా చేయాలి

ఆండ్రూ: మీరు పనితీరుపై ఎలా పని చేస్తారు? ఇది క్రాస్ కటింగ్ సమస్య. ఉదాహరణకు, ఇప్పటికే ఉన్న అనేక కార్యాచరణల ఖండన నుండి ఉత్పన్నమయ్యే సమస్యలపై మీరు ఎప్పుడైనా పని చేయాల్సి వచ్చిందా?

క్లయిఫ్: నేను దానిని నివారించడానికి ప్రయత్నిస్తాను. పనితీరు సమస్యగా ఉంటుందని నాకు తెలిస్తే, నేను కోడింగ్ ప్రారంభించే ముందు దాని గురించి ఆలోచిస్తాను, ముఖ్యంగా డేటా స్ట్రక్చర్‌లతో. కానీ తరచుగా మీరు ఇవన్నీ చాలా తర్వాత కనుగొంటారు. ఆపై మీరు తీవ్ర చర్యలకు వెళ్లాలి మరియు నేను "తిరిగి వ్రాయండి మరియు జయించండి" అని పిలుస్తాను: మీరు తగినంత పెద్ద భాగాన్ని పట్టుకోవాలి. పనితీరు సమస్యలు లేదా మరేదైనా కారణంగా కోడ్‌లో కొన్ని ఇప్పటికీ తిరిగి వ్రాయవలసి ఉంటుంది. కోడ్‌ని తిరిగి వ్రాయడానికి కారణం ఏమైనప్పటికీ, చిన్న ముక్క కంటే పెద్ద భాగాన్ని తిరిగి వ్రాయడం దాదాపు ఎల్లప్పుడూ ఉత్తమం. ఈ సమయంలో, ప్రతి ఒక్కరూ భయంతో వణుకుతున్నారు: "ఓ మై గాడ్, మీరు చాలా కోడ్‌ను తాకలేరు!" కానీ వాస్తవానికి, ఈ విధానం దాదాపు ఎల్లప్పుడూ మెరుగ్గా పనిచేస్తుంది. మీరు వెంటనే ఒక పెద్ద సమస్యను తీసుకోవాలి, దాని చుట్టూ ఒక పెద్ద వృత్తాన్ని గీయండి మరియు ఇలా చెప్పండి: నేను సర్కిల్‌లోని ప్రతిదాన్ని తిరిగి వ్రాస్తాను. సరిహద్దు దానిలోని కంటెంట్ కంటే చాలా చిన్నది, దానిని భర్తీ చేయాలి. మరియు సరిహద్దుల యొక్క అటువంటి వర్ణన మీరు లోపల పనిని సంపూర్ణంగా చేయడానికి అనుమతించినట్లయితే, మీ చేతులు ఉచితం, మీకు కావలసినది చేయండి. మీరు సమస్యను అర్థం చేసుకున్న తర్వాత, తిరిగి వ్రాసే ప్రక్రియ చాలా సులభం, కాబట్టి పెద్దగా కాటు వేయండి!
అదే సమయంలో, మీరు పెద్దగా రీరైట్ చేసినప్పుడు మరియు పనితీరు సమస్యగా మారుతుందని గ్రహించినప్పుడు, మీరు వెంటనే దాని గురించి ఆందోళన చెందడం ప్రారంభించవచ్చు. ఇది సాధారణంగా "డేటాను కాపీ చేయవద్దు, డేటాను వీలైనంత సరళంగా నిర్వహించండి, చిన్నదిగా చేయండి" వంటి సాధారణ విషయాలుగా మారుతుంది. పెద్ద రీరైట్‌లలో, పనితీరును మెరుగుపరచడానికి ప్రామాణిక మార్గాలు ఉన్నాయి. మరియు వారు దాదాపు ఎల్లప్పుడూ డేటా చుట్టూ తిరుగుతారు.

ఖర్చు మోడల్

ఆండ్రూ: పాడ్‌క్యాస్ట్‌లలో ఒకదానిలో మీరు ఉత్పాదకత విషయంలో ధర నమూనాల గురించి మాట్లాడారు. మీరు దీని అర్థం ఏమిటో వివరించగలరా?

క్లయిఫ్: తప్పకుండా. ప్రాసెసర్ పనితీరు చాలా ముఖ్యమైన యుగంలో నేను పుట్టాను. మరియు ఈ యుగం మళ్లీ తిరిగి వస్తుంది - విధి వ్యంగ్యం లేకుండా లేదు. నేను ఎనిమిది-బిట్ యంత్రాల రోజుల్లో జీవించడం ప్రారంభించాను; నా మొదటి కంప్యూటర్ 256 బైట్‌లతో పని చేసింది. సరిగ్గా బైట్లు. అంతా చాలా చిన్నది. సూచనలను లెక్కించవలసి ఉంది మరియు మేము ప్రోగ్రామింగ్ లాంగ్వేజ్ స్టాక్‌ను పైకి తరలించడం ప్రారంభించినప్పుడు, భాషలు మరింత ఎక్కువగా మారాయి. అక్కడ అసెంబ్లర్, ఆ తర్వాత బేసిక్, ఆ తర్వాత C, మరియు C రిజిస్టర్ కేటాయింపు మరియు సూచనల ఎంపిక వంటి చాలా వివరాలను చూసుకున్నారు. కానీ అక్కడ ప్రతిదీ చాలా స్పష్టంగా ఉంది మరియు నేను వేరియబుల్ యొక్క ఉదాహరణకి పాయింటర్ చేస్తే, అప్పుడు నేను లోడ్ పొందుతాను మరియు ఈ సూచనల ఖర్చు తెలుస్తుంది. హార్డ్‌వేర్ నిర్దిష్ట సంఖ్యలో యంత్ర చక్రాలను ఉత్పత్తి చేస్తుంది, కాబట్టి మీరు అమలు చేయబోయే అన్ని సూచనలను జోడించడం ద్వారా విభిన్న విషయాల అమలు వేగాన్ని లెక్కించవచ్చు. ప్రతి పోలిక/పరీక్ష/బ్రాంచ్/కాల్/లోడ్/స్టోర్ జోడించబడవచ్చు మరియు ఇలా చెప్పవచ్చు: ఇది మీ కోసం అమలు సమయం. పనితీరును మెరుగుపరచడంలో పని చేస్తున్నప్పుడు, చిన్న వేడి చక్రాలకు ఏ సంఖ్యలు అనుగుణంగా ఉంటాయో మీరు ఖచ్చితంగా శ్రద్ధ వహిస్తారు. 
కానీ మీరు జావా, పైథాన్ మరియు ఇలాంటి వాటికి మారిన వెంటనే, మీరు చాలా త్వరగా తక్కువ-స్థాయి హార్డ్‌వేర్ నుండి దూరంగా ఉంటారు. జావాలో గెట్టర్‌కి కాల్ చేయడానికి అయ్యే ఖర్చు ఎంత? హాట్‌స్పాట్‌లోని JIT సరైనది అయితే ఇన్లైన్ చేయబడింది, ఇది లోడ్ అవుతుంది, కానీ ఇది చేయకపోతే, అది ఫంక్షన్ కాల్ అవుతుంది. కాల్ హాట్ లూప్‌లో ఉన్నందున, అది ఆ లూప్‌లోని అన్ని ఇతర ఆప్టిమైజేషన్‌లను భర్తీ చేస్తుంది. అందువలన, నిజమైన ఖర్చు చాలా ఎక్కువగా ఉంటుంది. మరియు మీరు వెంటనే కోడ్ యొక్క భాగాన్ని చూసే సామర్థ్యాన్ని కోల్పోతారు మరియు ప్రాసెసర్ క్లాక్ స్పీడ్, మెమరీ మరియు కాష్ ఉపయోగించిన పరంగా మేము దానిని అమలు చేయాలని అర్థం చేసుకుంటాము. మీరు నిజంగా పనితీరులోకి వస్తే మాత్రమే ఇవన్నీ ఆసక్తికరంగా మారుతాయి.
ఒక దశాబ్దం పాటు ప్రాసెసర్ వేగం పెరగని పరిస్థితిలో ఇప్పుడు మనం ఉన్నాం. పాత రోజులు తిరిగి వచ్చాయి! మీరు ఇకపై మంచి సింగిల్-థ్రెడ్ పనితీరును లెక్కించలేరు. కానీ మీరు అకస్మాత్తుగా సమాంతర కంప్యూటింగ్‌లోకి ప్రవేశిస్తే, అది చాలా కష్టం, అందరూ మిమ్మల్ని జేమ్స్ బాండ్ లాగా చూస్తారు. ఇక్కడ పదిరెట్లు త్వరణాలు సాధారణంగా ఎవరైనా ఏదైనా గందరగోళానికి గురిచేసిన ప్రదేశాలలో జరుగుతాయి. కరెన్సీకి చాలా శ్రమ అవసరం. ఆ XNUMXx వేగాన్ని పొందడానికి, మీరు ధర మోడల్‌ను అర్థం చేసుకోవాలి. దాని ధర ఏమిటి మరియు ఎంత? మరియు దీన్ని చేయడానికి, అంతర్లీన హార్డ్‌వేర్‌పై నాలుక ఎలా సరిపోతుందో మీరు అర్థం చేసుకోవాలి.
మార్టిన్ థాంప్సన్ తన బ్లాగ్ కోసం ఒక గొప్ప పదాన్ని ఎంచుకున్నాడు యాంత్రిక సానుభూతి! హార్డ్‌వేర్ ఏమి చేయబోతుందో, అది ఎంత ఖచ్చితంగా చేస్తుంది మరియు అది మొదటి స్థానంలో ఎందుకు చేస్తుందో మీరు అర్థం చేసుకోవాలి. దీన్ని ఉపయోగించి, సూచనలను లెక్కించడం ప్రారంభించడం మరియు అమలు సమయం ఎక్కడికి వెళుతుందో గుర్తించడం చాలా సులభం. మీకు తగిన శిక్షణ లేకపోతే, మీరు చీకటి గదిలో నల్ల పిల్లి కోసం చూస్తున్నారు. వారు ఏమి చేస్తున్నారో అర్థం కాని వ్యక్తులు పనితీరును ఆప్టిమైజ్ చేయడం నేను ఎల్లప్పుడూ చూస్తున్నాను. వారు చాలా బాధపడుతున్నారు మరియు పెద్దగా పురోగతి లేదు. మరియు నేను అదే కోడ్ ముక్కను తీసుకున్నప్పుడు, రెండు చిన్న హ్యాక్‌లను స్లిప్ చేసి, ఐదు లేదా పది రెట్లు స్పీడప్ పొందినప్పుడు, అవి ఇలా ఉంటాయి: సరే, అది సరైంది కాదు, మీరు మంచివారని మాకు ముందే తెలుసు. అమేజింగ్. నేను దేని గురించి మాట్లాడుతున్నాను... కాస్ట్ మోడల్ అంటే మీరు ఎలాంటి కోడ్‌ని వ్రాస్తారు మరియు పెద్ద చిత్రంలో సగటున అది ఎంత వేగంగా నడుస్తుంది.

ఆండ్రూ: మరియు మీరు మీ తలలో అలాంటి వాల్యూమ్‌ను ఎలా ఉంచుకోవచ్చు? ఇది మరింత అనుభవంతో సాధించబడిందా, లేదా? అటువంటి అనుభవం ఎక్కడ నుండి వస్తుంది?

క్లయిఫ్: సరే, నేను నా అనుభవాన్ని సులభమైన మార్గంలో పొందలేదు. మీరు ప్రతి ఒక్క సూచనను అర్థం చేసుకోగలిగే రోజుల్లో నేను అసెంబ్లీలో ప్రోగ్రామ్ చేసాను. ఇది తెలివితక్కువదని అనిపిస్తుంది, కానీ అప్పటి నుండి Z80 ఇన్స్ట్రక్షన్ సెట్ ఎల్లప్పుడూ నా తలలో, నా జ్ఞాపకశక్తిలో ఉండిపోయింది. మాట్లాడిన ఒక్క నిమిషంలో వ్యక్తుల పేర్లు గుర్తుకు రావు, కానీ 40 ఏళ్ల క్రితం రాసిన కోడ్ గుర్తుకు వచ్చింది. ఇది హాస్యాస్పదంగా ఉంది, ఇది సిండ్రోమ్ లాగా ఉంది "ఇడియట్ శాస్త్రవేత్త".

తక్కువ-స్థాయి ఆప్టిమైజేషన్ శిక్షణ

ఆండ్రూ: ప్రవేశించడానికి సులభమైన మార్గం ఉందా?

క్లయిఫ్: అవును మరియు కాదు. మనమందరం ఉపయోగించే హార్డ్‌వేర్ కాలక్రమేణా పెద్దగా మారలేదు. ఆర్మ్ స్మార్ట్‌ఫోన్‌లు మినహా అందరూ x86ని ఉపయోగిస్తున్నారు. మీరు కొన్ని రకాల హార్డ్‌కోర్ ఎంబెడ్డింగ్ చేయకపోతే, మీరు అదే పని చేస్తున్నారు. సరే, తదుపరి. సూచనలు కూడా శతాబ్దాలుగా మారలేదు. మీరు వెళ్లి అసెంబ్లీలో ఏదైనా రాయాలి. చాలా లేదు, కానీ అర్థం చేసుకోవడం ప్రారంభించడానికి సరిపోతుంది. మీరు నవ్వుతున్నారు, కానీ నేను పూర్తిగా సీరియస్‌గా మాట్లాడుతున్నాను. మీరు భాష మరియు హార్డ్‌వేర్ మధ్య అనురూప్యాన్ని అర్థం చేసుకోవాలి. ఆ తర్వాత మీరు వెళ్లి కొద్దిగా వ్రాసి కొద్దిగా బొమ్మ భాష కోసం కొద్దిగా బొమ్మ కంపైలర్ తయారు చేయాలి. బొమ్మ లాంటిది అంటే అది సహేతుకమైన సమయంలో తయారు చేయాలి. ఇది చాలా సరళంగా ఉంటుంది, కానీ ఇది తప్పనిసరిగా సూచనలను రూపొందించాలి. సూచనలను రూపొందించే చర్య ప్రతి ఒక్కరూ వ్రాసే ఉన్నత-స్థాయి కోడ్ మరియు హార్డ్‌వేర్‌పై పనిచేసే మెషీన్ కోడ్ మధ్య వంతెన కోసం ధర నమూనాను అర్థం చేసుకోవడంలో మీకు సహాయం చేస్తుంది. కంపైలర్ వ్రాసిన సమయంలో ఈ కరస్పాండెన్స్ మెదడులోకి కాలిపోతుంది. సరళమైన కంపైలర్ కూడా. ఆ తర్వాత, మీరు జావాను చూడటం ప్రారంభించవచ్చు మరియు దాని అర్థ అగాధం చాలా లోతుగా ఉంది మరియు దానిపై వంతెనలను నిర్మించడం చాలా కష్టం. జావాలో, మా వంతెన మంచిదా లేదా చెడ్డదా అని అర్థం చేసుకోవడం చాలా కష్టం, అది పడిపోవడానికి కారణం మరియు ఏది కాదు. కానీ మీరు కోడ్‌ని చూసి అర్థం చేసుకునే ఒక రకమైన ప్రారంభ స్థానం అవసరం: "అవును, ఈ గెటర్ ప్రతిసారీ ఇన్‌లైన్‌లో ఉండాలి." ఆపై కొన్నిసార్లు ఇది జరుగుతుంది, పద్ధతి చాలా పెద్దది అయినప్పుడు పరిస్థితి తప్ప, మరియు JIT ప్రతిదీ ఇన్లైన్ చేయడం ప్రారంభిస్తుంది. అటువంటి ప్రదేశాల పనితీరును తక్షణమే అంచనా వేయవచ్చు. సాధారణంగా గెట్టర్‌లు బాగా పని చేస్తాయి, కానీ మీరు పెద్ద హాట్ లూప్‌లను చూసి, వారు ఏమి చేస్తున్నారో తెలియక అక్కడ కొన్ని ఫంక్షన్ కాల్‌లు తిరుగుతున్నాయని గ్రహించారు. గెట్టర్‌లను విస్తృతంగా ఉపయోగించడం వల్ల ఇది సమస్య, వారు ఇన్‌లైన్ చేయకపోవడానికి కారణం వారు గెటర్‌లా కాదా అనేది స్పష్టంగా తెలియకపోవడం. మీకు సూపర్ స్మాల్ కోడ్ బేస్ ఉంటే, మీరు దానిని గుర్తుంచుకోండి మరియు తర్వాత ఇలా చెప్పవచ్చు: ఇది గెట్టర్ మరియు ఇది సెట్టర్. పెద్ద కోడ్ బేస్‌లో, ప్రతి ఫంక్షన్ దాని స్వంత చరిత్రను కలిగి ఉంటుంది, ఇది సాధారణంగా ఎవరికీ తెలియదు. కొన్ని లూప్‌లో మేము 24% సమయాన్ని కోల్పోయామని మరియు ఈ లూప్ ఏమి చేస్తుందో అర్థం చేసుకోవడానికి, లోపల ఉన్న ప్రతి ఫంక్షన్‌ను చూడాలని ప్రొఫైలర్ చెప్పారు. ఫంక్షన్‌ను అధ్యయనం చేయకుండా దీన్ని అర్థం చేసుకోవడం అసాధ్యం, మరియు ఇది అర్థం చేసుకునే ప్రక్రియను తీవ్రంగా నెమ్మదిస్తుంది. అందుకే నేను గెట్టర్‌లు మరియు సెట్టర్‌లను ఉపయోగించను, నేను కొత్త స్థాయికి చేరుకున్నాను!
ధర నమూనాను ఎక్కడ పొందాలి? సరే, మీరు ఏదైనా చదవగలరు, అయితే... కానీ నటించడమే ఉత్తమమైన మార్గం అని నేను భావిస్తున్నాను. చిన్న కంపైలర్‌ను తయారు చేయడం అనేది ధర మోడల్‌ను అర్థం చేసుకోవడానికి మరియు మీ స్వంత తలపైకి సరిపోయే ఉత్తమ మార్గం. మైక్రోవేవ్‌ను ప్రోగ్రామింగ్ చేయడానికి తగిన చిన్న కంపైలర్ ఒక అనుభవశూన్యుడు కోసం ఒక పని. బాగా, నా ఉద్దేశ్యం, మీకు ఇప్పటికే ప్రోగ్రామింగ్ నైపుణ్యాలు ఉంటే, అది సరిపోతుంది. మీ వద్ద ఉన్న స్ట్రింగ్‌ను ఒకరకమైన బీజగణిత వ్యక్తీకరణగా అన్వయించడం, అక్కడి నుండి గణిత కార్యకలాపాలకు సంబంధించిన సూచనలను సరైన క్రమంలో సంగ్రహించడం, రిజిస్టర్‌ల నుండి సరైన విలువలను తీసుకోవడం - ఇవన్నీ ఒకేసారి చేయబడతాయి. మరియు మీరు దీన్ని చేస్తున్నప్పుడు, అది మీ మెదడులో ముద్రించబడుతుంది. కంపైలర్ ఏమి చేస్తుందో అందరికీ తెలుసునని నేను అనుకుంటున్నాను. మరియు ఇది ధర నమూనాపై అవగాహనను ఇస్తుంది.

పనితీరు మెరుగుదల యొక్క ఆచరణాత్మక ఉదాహరణలు

ఆండ్రూ: ఉత్పాదకతపై పని చేస్తున్నప్పుడు మీరు ఇంకా ఏమి శ్రద్ధ వహించాలి?

క్లయిఫ్: డేటా నిర్మాణాలు. మార్గం ద్వారా, అవును, నేను చాలా కాలంగా ఈ తరగతులను బోధించలేదు... రాకెట్ స్కూల్. ఇది సరదాగా ఉంది, కానీ దీనికి చాలా ప్రయత్నం అవసరం, మరియు నాకు కూడా జీవితం ఉంది! అలాగే. కాబట్టి, పెద్ద మరియు ఆసక్తికరమైన తరగతులలో, “మీ పనితీరు ఎక్కడికి వెళుతుంది,” నేను విద్యార్థులకు ఒక ఉదాహరణ ఇచ్చాను: రెండున్నర గిగాబైట్ల ఫిన్‌టెక్ డేటా CSV ఫైల్ నుండి చదవబడింది మరియు ఆపై వారు విక్రయించిన ఉత్పత్తుల సంఖ్యను లెక్కించవలసి ఉంటుంది. . రెగ్యులర్ టిక్ మార్కెట్ డేటా. UDP ప్యాకెట్లు 70ల నుండి టెక్స్ట్ ఫార్మాట్‌కి మార్చబడ్డాయి. చికాగో మర్కంటైల్ ఎక్స్ఛేంజ్ - వెన్న, మొక్కజొన్న, సోయాబీన్స్ వంటి అన్ని రకాల వస్తువులు. ఈ ఉత్పత్తులు, లావాదేవీల సంఖ్య, నిధులు మరియు వస్తువుల కదలిక యొక్క సగటు పరిమాణం మొదలైన వాటిని లెక్కించడం అవసరం. ఇది చాలా సులభమైన వ్యాపార గణితమే: ఉత్పత్తి కోడ్‌ను కనుగొనండి (అది హాష్ పట్టికలో 1-2 అక్షరాలు), మొత్తాన్ని పొందండి, దానిని ట్రేడ్ సెట్‌లలో ఒకదానికి జోడించండి, వాల్యూమ్‌ను జోడించండి, విలువను జోడించండి మరియు కొన్ని ఇతర విషయాలను జోడించండి. చాలా సులభమైన గణితం. బొమ్మ అమలు చాలా సూటిగా ఉంది: ప్రతిదీ ఒక ఫైల్‌లో ఉంది, నేను ఫైల్‌ను చదివి దాని ద్వారా కదులుతాను, వ్యక్తిగత రికార్డులను జావా స్ట్రింగ్‌లుగా విభజించి, వాటిలో అవసరమైన వాటిని వెతుకుతున్నాను మరియు పైన వివరించిన గణితశాస్త్రం ప్రకారం వాటిని జోడించాను. మరియు ఇది కొంత తక్కువ వేగంతో పనిచేస్తుంది.

ఈ విధానంతో, ఏమి జరుగుతుందో స్పష్టంగా ఉంది మరియు సమాంతర కంప్యూటింగ్ సహాయం చేయదు, సరియైనదా? సరైన డేటా నిర్మాణాలను ఎంచుకోవడం ద్వారా పనితీరులో ఐదు రెట్లు పెరుగుదల సాధించవచ్చని ఇది మారుతుంది. మరియు ఇది అనుభవజ్ఞులైన ప్రోగ్రామర్లను కూడా ఆశ్చర్యపరుస్తుంది! నా ప్రత్యేక సందర్భంలో, మీరు హాట్ లూప్‌లో మెమరీ కేటాయింపులు చేయకూడదనేది ఉపాయం. సరే, ఇది పూర్తి నిజం కాదు, కానీ సాధారణంగా - X తగినంత పెద్దదిగా ఉన్నప్పుడు మీరు "X లో ఒకసారి" హైలైట్ చేయకూడదు. X అనేది రెండున్నర గిగాబైట్‌లు అయినప్పుడు, మీరు “అక్షరానికి ఒకసారి” లేదా “ఒక పంక్తికి ఒకసారి” లేదా “ఒక ఫీల్డ్‌కు ఒకసారి” వంటి వాటిని దేనినీ కేటాయించకూడదు. ఇక్కడే సమయం వెచ్చిస్తారు. ఇది కూడా ఎలా పని చేస్తుంది? నేను కాల్ చేస్తున్నట్లు ఊహించుకోండి String.split() లేదా BufferedReader.readLine(). Readline నెట్‌వర్క్ ద్వారా వచ్చిన బైట్‌ల సెట్ నుండి ఒక స్ట్రింగ్‌ను తయారు చేస్తుంది, ఒక్కో లైన్‌కు ఒకసారి, వందల మిలియన్ల లైన్‌లకు. నేను ఈ పంక్తిని తీసుకొని, దానిని అన్వయించి, విసిరివేస్తాను. నేను దానిని ఎందుకు విసిరివేస్తున్నాను - సరే, నేను ఇప్పటికే ప్రాసెస్ చేసాను, అంతే. కాబట్టి, ఈ 2.7G నుండి చదివిన ప్రతి బైట్‌కు, రెండు అక్షరాలు లైన్‌లో వ్రాయబడతాయి, అంటే ఇప్పటికే 5.4G, మరియు నాకు అవి ఇంకేమీ అవసరం లేదు, కాబట్టి అవి విసిరివేయబడతాయి. మీరు మెమరీ బ్యాండ్‌విడ్త్‌ను పరిశీలిస్తే, మేము ప్రాసెసర్‌లోని మెమరీ మరియు మెమరీ బస్ గుండా వెళ్ళే 2.7Gని లోడ్ చేస్తాము, ఆపై మెమరీలో ఉన్న లైన్‌కి రెండు రెట్లు ఎక్కువ పంపబడుతుంది మరియు ప్రతి కొత్త లైన్ సృష్టించబడినప్పుడు ఇవన్నీ విరిగిపోతాయి. కానీ నేను దానిని చదవాలి, హార్డ్‌వేర్ దానిని చదువుతుంది, తరువాత ప్రతిదీ విరిగిపోయినప్పటికీ. మరియు నేను ఒక లైన్‌ను సృష్టించినందున మరియు క్యాష్‌లు నిండినందున నేను దానిని వ్రాయవలసి ఉంటుంది - కాష్ 2.7Gని కలిగి ఉండదు. కాబట్టి, నేను చదివే ప్రతి బైట్‌కి, నేను మరో రెండు బైట్‌లను చదివి, మరో రెండు బైట్‌లను వ్రాస్తాను మరియు చివరికి అవి 4:1 నిష్పత్తిని కలిగి ఉంటాయి - ఈ నిష్పత్తిలో మనం మెమరీ బ్యాండ్‌విడ్త్‌ను వృధా చేస్తున్నాము. ఆపై నేను చేస్తే అది మారుతుంది String.split() – నేను ఇలా చేయడం ఇదే చివరిసారి కాదు, లోపల మరో 6-7 ఫీల్డ్‌లు ఉండవచ్చు. కాబట్టి CSVని చదివి, ఆపై స్ట్రింగ్‌లను అన్వయించే క్లాసిక్ కోడ్ ఫలితంగా మీరు నిజంగా పొందాలనుకుంటున్న దానికి సంబంధించి 14:1 మెమరీ బ్యాండ్‌విడ్త్ వేస్ట్ అవుతుంది. మీరు ఈ ఎంపికలను విసిరివేస్తే, మీరు ఐదు రెట్లు వేగాన్ని పొందవచ్చు.

మరియు అది కష్టం కాదు. మీరు కోడ్‌ను లంబ కోణం నుండి చూస్తే, మీరు సమస్యను గ్రహించిన తర్వాత ప్రతిదీ చాలా సులభం అవుతుంది. మీరు మెమరీని కేటాయించడాన్ని పూర్తిగా ఆపివేయకూడదు: ఒకే సమస్య ఏమిటంటే, మీరు ఏదైనా కేటాయించడం మరియు అది వెంటనే చనిపోతుంది మరియు మార్గంలో అది ఒక ముఖ్యమైన వనరును కాల్చేస్తుంది, ఈ సందర్భంలో మెమరీ బ్యాండ్‌విడ్త్. మరియు ఇవన్నీ ఉత్పాదకతలో తగ్గుదలకు దారితీస్తాయి. x86లో మీరు సాధారణంగా ప్రాసెసర్ సైకిల్‌లను యాక్టివ్‌గా బర్న్ చేయాలి, కానీ ఇక్కడ మీరు చాలా ముందుగానే మెమరీని బర్న్ చేసారు. డిశ్చార్జ్ మొత్తాన్ని తగ్గించడమే దీనికి పరిష్కారం. 
సమస్య యొక్క ఇతర భాగం ఏమిటంటే, మీరు మెమరీ స్ట్రిప్ అయిపోయినప్పుడు ప్రొఫైలర్‌ను అమలు చేస్తే, అది జరిగినప్పుడు, మీరు సాధారణంగా కాష్ తిరిగి రావడానికి వేచి ఉంటారు, ఎందుకంటే మీరు ఇప్పుడే ఉత్పత్తి చేసిన చెత్తతో నిండి ఉంది, ఆ లైన్లన్నీ. అందువల్ల, ప్రతి లోడ్ లేదా స్టోర్ ఆపరేషన్ నెమ్మదిగా మారుతుంది, ఎందుకంటే అవి కాష్ మిస్‌లకు దారితీస్తాయి - మొత్తం కాష్ నెమ్మదిగా మారింది, చెత్తను వదిలివేయడానికి వేచి ఉంది. అందువల్ల, ప్రొఫైలర్ మొత్తం లూప్ అంతటా అద్ది వెచ్చని యాదృచ్ఛిక శబ్దాన్ని చూపుతుంది - కోడ్‌లో ప్రత్యేక హాట్ సూచన లేదా స్థానం ఉండదు. శబ్దం మాత్రమే. మరియు మీరు GC చక్రాలను చూస్తే, అవన్నీ యంగ్ జనరేషన్ మరియు సూపర్ ఫాస్ట్ - మైక్రోసెకన్లు లేదా మిల్లీసెకన్లు గరిష్టంగా ఉంటాయి. అన్ని తరువాత, ఈ జ్ఞాపకశక్తి తక్షణమే చనిపోతుంది. మీరు బిలియన్ల గిగాబైట్లను కేటాయిస్తారు, మరియు అతను వాటిని కత్తిరించాడు మరియు వాటిని కత్తిరించాడు మరియు వాటిని మళ్లీ కట్ చేస్తాడు. ఇదంతా చాలా త్వరగా జరుగుతుంది. చౌకైన GC సైకిళ్లు, మొత్తం చక్రంలో వెచ్చని శబ్దం ఉన్నాయని తేలింది, అయితే మేము 5x వేగాన్ని పొందాలనుకుంటున్నాము. ఈ సమయంలో, మీ తలలో ఏదో మూసుకుని: "ఇది ఎందుకు?!" క్లాసిక్ డీబగ్గర్‌లో మెమరీ స్ట్రిప్ ఓవర్‌ఫ్లో ప్రదర్శించబడదు; మీరు హార్డ్‌వేర్ పనితీరు కౌంటర్ డీబగ్గర్‌ని అమలు చేయాలి మరియు దానిని మీరే మరియు నేరుగా చూడండి. కానీ ఈ మూడు లక్షణాల నుండి ఇది నేరుగా అనుమానించబడదు. మూడవ లక్షణం ఏమిటంటే, మీరు హైలైట్ చేసిన వాటిని చూసినప్పుడు, ప్రొఫైలర్‌ను అడగండి మరియు అతను ఇలా సమాధానమిస్తాడు: "మీరు బిలియన్ వరుసలు చేసారు, కానీ GC ఉచితంగా పనిచేసింది." ఇది జరిగిన వెంటనే, మీరు చాలా వస్తువులను సృష్టించారని మరియు మొత్తం మెమరీ లేన్‌ను కాల్చివేసినట్లు మీరు గ్రహిస్తారు. దీన్ని గుర్తించడానికి ఒక మార్గం ఉంది, కానీ అది స్పష్టంగా లేదు. 

సమస్య డేటా నిర్మాణంలో ఉంది: జరిగే ప్రతిదానికీ అంతర్లీనంగా ఉన్న బేర్ స్ట్రక్చర్, ఇది చాలా పెద్దది, డిస్క్‌లో 2.7G ఉంది, కాబట్టి ఈ విషయాన్ని కాపీ చేయడం చాలా అవాంఛనీయమైనది - మీరు దీన్ని వెంటనే నెట్‌వర్క్ బైట్ బఫర్ నుండి లోడ్ చేయాలనుకుంటున్నారు. రిజిస్టర్‌లలోకి, తద్వారా లైన్‌కు ఐదుసార్లు ముందుకు వెనుకకు చదవడం-వ్రాయడం కాదు. దురదృష్టవశాత్తూ, డిఫాల్ట్‌గా JDKలో భాగంగా జావా మీకు అలాంటి లైబ్రరీని అందించదు. కానీ ఇది చిన్నవిషయం, సరియైనదా? ముఖ్యంగా, ఇవి మీ స్వంత బఫర్డ్ స్ట్రింగ్ లోడర్‌ను అమలు చేయడానికి ఉపయోగించే కోడ్ యొక్క 5-10 లైన్లు, ఇది స్ట్రింగ్ క్లాస్ యొక్క ప్రవర్తనను పునరావృతం చేస్తుంది, అయితే అంతర్లీన బైట్ బఫర్ చుట్టూ ర్యాపర్‌గా ఉంటుంది. ఫలితంగా, మీరు దాదాపు స్ట్రింగ్స్‌తో పని చేస్తున్నట్టు తేలింది, కానీ నిజానికి బఫర్‌కి సంబంధించిన పాయింటర్‌లు అక్కడికి కదులుతున్నాయి మరియు ముడి బైట్‌లు ఎక్కడికీ కాపీ చేయబడవు మరియు అదే బఫర్‌లు మళ్లీ మళ్లీ ఉపయోగించబడతాయి మరియు ఆపరేటింగ్ సిస్టమ్ ఈ బైట్ బఫర్‌ల యొక్క దాచిన డబుల్-బఫరింగ్ వంటి దాని కోసం రూపొందించబడిన అంశాలను మీ స్వంతంగా తీసుకోవడానికి సంతోషంగా ఉంది మరియు మీరు ఇకపై అనవసరమైన డేటా యొక్క అంతులేని స్ట్రీమ్ ద్వారా గ్రైండింగ్ చేయలేరు. మార్గం ద్వారా, GCతో పని చేస్తున్నప్పుడు, చివరి GC చక్రం తర్వాత ప్రతి మెమరీ కేటాయింపు ప్రాసెసర్‌కు కనిపించదని హామీ ఇవ్వబడిందని మీరు అర్థం చేసుకున్నారా? అందువల్ల, ఇవన్నీ కాష్‌లో ఉండకపోవచ్చు, ఆపై 100% హామీ మిస్ అవుతుంది. పాయింటర్‌తో పని చేస్తున్నప్పుడు, x86లో, మెమరీ నుండి రిజిస్టర్‌ను తీసివేయడానికి 1-2 గడియార చక్రాలు పడుతుంది మరియు ఇది జరిగిన వెంటనే, మీరు చెల్లించాలి, చెల్లించాలి, చెల్లించాలి, ఎందుకంటే మెమరీ అంతా ఆన్‌లో ఉంది తొమ్మిది కాష్‌లు - మరియు ఇది మెమరీ కేటాయింపు ఖర్చు. నిజమైన విలువ.

మరో మాటలో చెప్పాలంటే, డేటా నిర్మాణాలను మార్చడం కష్టతరమైన విషయం. మరియు మీరు తర్వాత పనితీరును నాశనం చేసే తప్పు డేటా నిర్మాణాన్ని ఎంచుకున్నారని మీరు గ్రహించిన తర్వాత, సాధారణంగా చాలా పని చేయాల్సి ఉంటుంది, కానీ మీరు చేయకపోతే, విషయాలు మరింత దిగజారిపోతాయి. అన్నింటిలో మొదటిది, మీరు డేటా నిర్మాణాల గురించి ఆలోచించాలి, ఇది ముఖ్యం. ఇక్కడ ప్రధాన ధర కొవ్వు డేటా స్ట్రక్చర్‌లపై పడుతుంది, వీటిని "నేను డేటా స్ట్రక్చర్ Xని డేటా స్ట్రక్చర్‌కి కాపీ చేసాను, ఎందుకంటే నేను Y ఆకారాన్ని బాగా ఇష్టపడుతున్నాను" అనే శైలిలో ఉపయోగించడం ప్రారంభించింది. కానీ కాపీ ఆపరేషన్ (ఇది చౌకగా అనిపిస్తుంది) వాస్తవానికి మెమరీ బ్యాండ్‌విడ్త్‌ను వృధా చేస్తుంది మరియు వృధా అయిన అమలు సమయం అంతా ఇక్కడే పూడ్చబడుతుంది. నేను JSON యొక్క పెద్ద స్ట్రింగ్‌ని కలిగి ఉంటే మరియు నేను దానిని POJOల నిర్మాణాత్మక DOM ట్రీగా మార్చాలనుకుంటే లేదా ఏదైనా, ఆ స్ట్రింగ్‌ని అన్వయించడం మరియు POJOని నిర్మించడం, ఆపై POJOని మళ్లీ యాక్సెస్ చేయడం వలన అనవసరమైన ఖర్చు అవుతుంది - ఇది చౌక కాదు. మీరు స్ట్రింగ్ చుట్టూ పరిగెత్తే దానికంటే చాలా తరచుగా POJOల చుట్టూ పరిగెత్తితే తప్ప. ఆఫ్‌హ్యాండ్, బదులుగా మీరు స్ట్రింగ్‌ను డీక్రిప్ట్ చేయడానికి ప్రయత్నించవచ్చు మరియు దానిని ఏ POJOగా మార్చకుండా, అక్కడ నుండి మీకు అవసరమైన వాటిని మాత్రమే సంగ్రహించవచ్చు. ఇవన్నీ గరిష్ట పనితీరు అవసరమయ్యే మార్గంలో జరిగితే, మీ కోసం POJOలు లేవు, మీరు నేరుగా లైన్‌లోకి త్రవ్వాలి.

మీ స్వంత ప్రోగ్రామింగ్ భాషను ఎందుకు సృష్టించుకోవాలి

ఆండ్రూ: మీరు ఖర్చు నమూనాను అర్థం చేసుకోవడానికి, మీరు మీ స్వంత చిన్న భాషను వ్రాయాలని చెప్పారు...

క్లయిఫ్: భాష కాదు, కంపైలర్. భాష మరియు కంపైలర్ రెండు వేర్వేరు విషయాలు. అతి ముఖ్యమైన వ్యత్యాసం మీ తలలో ఉంది. 

ఆండ్రూ: చెప్పాలంటే, నాకు తెలిసినంత వరకు, మీరు మీ స్వంత భాషలను సృష్టించుకోవడంలో ప్రయోగాలు చేస్తున్నారు. దేనికోసం?

క్లయిఫ్: ఎందుకంటే నేను చెయ్యగలను! నేను సెమీ రిటైర్ అయ్యాను, కాబట్టి ఇది నా హాబీ. నేను నా జీవితమంతా ఇతరుల భాషలను అమలు చేస్తున్నాను. నేను నా కోడింగ్ స్టైల్‌పై కూడా చాలా పనిచేశాను. మరియు నేను ఇతర భాషలలో సమస్యలను చూస్తున్నాను కాబట్టి. తెలిసిన పనులను చేయడానికి మంచి మార్గాలు ఉన్నాయని నేను చూస్తున్నాను. మరియు నేను వాటిని ఉపయోగిస్తాను. నాలో, జావాలో, పైథాన్‌లో, మరే ఇతర భాషలోనైనా సమస్యలను చూసి నేను విసిగిపోయాను. నేను ఇప్పుడు రియాక్ట్ నేటివ్, జావాస్క్రిప్ట్ మరియు ఎల్మ్‌లలో రిటైర్మెంట్ గురించి కాకుండా యాక్టివ్ వర్క్ గురించి ఒక అభిరుచిగా వ్రాస్తాను. నేను పైథాన్‌లో కూడా వ్రాస్తాను మరియు చాలా మటుకు, జావా బ్యాకెండ్‌ల కోసం మెషిన్ లెర్నింగ్‌పై పని చేస్తూనే ఉంటాను. అనేక ప్రసిద్ధ భాషలు ఉన్నాయి మరియు అవన్నీ ఆసక్తికరమైన లక్షణాలను కలిగి ఉన్నాయి. ప్రతి ఒక్కరూ వారి స్వంత మార్గంలో మంచివారు మరియు మీరు ఈ లక్షణాలన్నింటినీ ఒకచోట చేర్చడానికి ప్రయత్నించవచ్చు. కాబట్టి, నాకు ఆసక్తి కలిగించే విషయాలు, భాష యొక్క ప్రవర్తన, సహేతుకమైన అర్థశాస్త్రంతో ముందుకు రావడానికి ప్రయత్నిస్తున్నాను. మరియు ఇప్పటివరకు నేను విజయం సాధించాను! ప్రస్తుతానికి నేను మెమరీ సెమాంటిక్స్‌తో పోరాడుతున్నాను, ఎందుకంటే నేను C మరియు జావాలో లాగా దీన్ని కలిగి ఉండాలనుకుంటున్నాను మరియు లోడ్‌లు మరియు స్టోర్‌ల కోసం బలమైన మెమరీ మోడల్ మరియు మెమరీ సెమాంటిక్స్ పొందాలనుకుంటున్నాను. అదే సమయంలో, హాస్కెల్‌లో మాదిరిగా ఆటోమేటిక్ టైప్ ఇన్ఫరెన్స్‌ను కలిగి ఉండండి. ఇక్కడ, నేను సి మరియు జావా రెండింటిలోనూ మెమరీ వర్క్‌తో హాస్కెల్ లాంటి టైప్ ఇన్ఫరెన్స్ కలపడానికి ప్రయత్నిస్తున్నాను. ఉదాహరణకు గత 2-3 నెలలుగా నేను చేస్తున్నది ఇదే.

ఆండ్రూ: మీరు ఇతర భాషల నుండి మెరుగైన అంశాలను తీసుకునే భాషను నిర్మిస్తే, ఎవరైనా దీనికి విరుద్ధంగా చేస్తారని మీరు అనుకుంటున్నారా: మీ ఆలోచనలను తీసుకొని వాటిని ఉపయోగించాలా?

క్లయిఫ్: కొత్త భాషలు సరిగ్గా ఇలా కనిపిస్తాయి! జావా సిని ఎందుకు పోలి ఉంటుంది? ఎందుకంటే సి అందరికీ అర్థమయ్యేలా మంచి సింటాక్స్‌ని కలిగి ఉంది మరియు జావా ఈ సింటాక్స్ ద్వారా ప్రేరణ పొందింది, టైప్ సేఫ్టీ, అర్రే బౌండ్స్ చెకింగ్, జిసిని జోడించి, వారు సి నుండి కొన్ని విషయాలను మెరుగుపరిచారు. వారు తమ స్వంత వాటిని జోడించారు. కానీ వారు చాలా ప్రేరేపించబడ్డారు, సరియైనదా? ప్రతి ఒక్కరూ మీ ముందు వచ్చిన దిగ్గజాల భుజాలపై నిలబడతారు - తద్వారా పురోగతి సాధించబడుతుంది.

ఆండ్రూ: నేను అర్థం చేసుకున్నట్లుగా, మీ భాష మెమరీ సురక్షితంగా ఉంటుంది. రస్ట్ నుండి రుణం చెకర్ వంటి వాటిని అమలు చేయడం గురించి మీరు ఆలోచించారా? మీరు అతనిని చూశారా, మీరు అతని గురించి ఏమనుకుంటున్నారు?

క్లయిఫ్: సరే, నేను ఈ అన్ని మాలోక్‌లతో మరియు ఉచితంగా మరియు జీవితకాలాన్ని మాన్యువల్‌గా నిర్వహిస్తూ చాలా కాలంగా సి వ్రాస్తున్నాను. మీకు తెలుసా, 90-95% మాన్యువల్‌గా నియంత్రిత జీవితకాలం అదే నిర్మాణాన్ని కలిగి ఉంటుంది. మరియు దీన్ని మాన్యువల్‌గా చేయడం చాలా చాలా బాధాకరమైనది. కంపైలర్ అక్కడ ఏమి జరుగుతుందో మరియు మీ చర్యలతో మీరు ఏమి సాధించారో మీకు చెప్పాలని నేను కోరుకుంటున్నాను. కొన్ని విషయాల కోసం, బారో చెకర్ దీన్ని బాక్స్ వెలుపల చేస్తుంది. మరియు ఇది స్వయంచాలకంగా సమాచారాన్ని ప్రదర్శించాలి, ప్రతిదీ అర్థం చేసుకోవాలి మరియు ఈ అవగాహనను అందించడంలో నాకు భారం కూడా ఉండదు. ఇది తప్పనిసరిగా కనీసం స్థానిక ఎస్కేప్ విశ్లేషణ చేయాలి మరియు అది విఫలమైతే మాత్రమే, జీవితకాలాన్ని వివరించే టైప్ ఉల్లేఖనాలను జోడించాలి - మరియు అటువంటి స్కీమ్ బారో చెకర్ కంటే చాలా క్లిష్టంగా ఉంటుంది లేదా ఇప్పటికే ఉన్న ఏదైనా మెమరీ చెకర్ కంటే చాలా క్లిష్టంగా ఉంటుంది. “అంతా బాగానే ఉంది” మరియు “నాకు ఏమీ అర్థం కావడం లేదు” మధ్య ఎంపిక - లేదు, ఏదో ఒకటి ఉండాలి. 
కాబట్టి, C లో చాలా కోడ్‌లను వ్రాసిన వ్యక్తిగా, ఆటోమేటిక్ లైఫ్‌టైమ్ కంట్రోల్‌కి సపోర్ట్ కలిగి ఉండటం చాలా ముఖ్యమైన విషయం అని నేను భావిస్తున్నాను. జావా మెమరీని ఎంతగా ఉపయోగిస్తుందో నేను కూడా విసిగిపోయాను మరియు ప్రధాన ఫిర్యాదు GC. మీరు జావాలో మెమరీని కేటాయించినప్పుడు, గత GC సైకిల్‌లో స్థానికంగా ఉన్న మెమరీని మీరు తిరిగి పొందలేరు. మరింత ఖచ్చితమైన మెమరీ నిర్వహణ ఉన్న భాషలలో ఇది ఉండదు. మీరు mallocకి కాల్ చేస్తే, మీరు వెంటనే సాధారణంగా ఉపయోగించిన మెమరీని పొందుతారు. సాధారణంగా మీరు జ్ఞాపకశక్తితో కొన్ని తాత్కాలిక పనులు చేసి, వెంటనే దాన్ని తిరిగి ఇవ్వండి. మరియు అది వెంటనే malloc పూల్‌కి తిరిగి వస్తుంది మరియు తదుపరి malloc చక్రం దాన్ని మళ్లీ బయటకు తీస్తుంది. అందువల్ల, వాస్తవ మెమరీ వినియోగం ఒక నిర్దిష్ట సమయంలో సజీవ వస్తువుల సెట్‌కు తగ్గించబడుతుంది మరియు లీక్‌లు. మరియు ప్రతిదీ పూర్తిగా అసభ్యకరమైన రీతిలో లీక్ చేయకపోతే, మెమరీలో ఎక్కువ భాగం క్యాష్‌లు మరియు ప్రాసెసర్‌లో ముగుస్తుంది మరియు ఇది త్వరగా పని చేస్తుంది. కానీ mallocతో చాలా మాన్యువల్ మెమరీ నిర్వహణ అవసరం మరియు సరైన క్రమంలో, సరైన స్థలంలో ఉచితంగా పిలువబడుతుంది. రస్ట్ దీన్ని తనంతట తానుగా నిర్వహించగలదు మరియు అనేక సందర్భాల్లో మెరుగైన పనితీరును అందిస్తుంది, ఎందుకంటే మెమరీ వినియోగం ప్రస్తుత గణనకు కుదించబడింది - మెమరీని ఖాళీ చేయడానికి తదుపరి GC చక్రం కోసం వేచి ఉండటానికి విరుద్ధంగా. ఫలితంగా, పనితీరును మెరుగుపరచడానికి మేము చాలా ఆసక్తికరమైన మార్గాన్ని పొందాము. మరియు చాలా శక్తివంతమైనది - నా ఉద్దేశ్యం, ఫిన్‌టెక్ కోసం డేటాను ప్రాసెస్ చేస్తున్నప్పుడు నేను అలాంటి పనులు చేశాను మరియు ఇది నాకు ఐదు రెట్లు వేగాన్ని పొందడానికి అనుమతించింది. ఇది చాలా పెద్ద బూస్ట్, ముఖ్యంగా ప్రాసెసర్‌లు వేగవంతం కానటువంటి ప్రపంచంలో మరియు మేము ఇంకా మెరుగుదలల కోసం ఎదురు చూస్తున్నాము.

పనితీరు ఇంజనీర్ కెరీర్

ఆండ్రూ: నేను సాధారణంగా కెరీర్‌ల గురించి కూడా అడగాలనుకుంటున్నాను. మీరు హాట్‌స్పాట్‌లో మీ JIT పనితో ప్రముఖంగా ఎదిగారు మరియు JVM కంపెనీ అయిన అజుల్‌కి మారారు. కానీ మేము ఇప్పటికే సాఫ్ట్‌వేర్ కంటే హార్డ్‌వేర్‌పై ఎక్కువగా పని చేస్తున్నాము. ఆపై వారు అకస్మాత్తుగా బిగ్ డేటా మరియు మెషిన్ లెర్నింగ్‌కు మారారు, ఆపై మోసం గుర్తింపుకు మారారు. ఇది ఎలా జరిగింది? ఇవి చాలా భిన్నమైన అభివృద్ధి రంగాలు.

క్లయిఫ్: నేను చాలా కాలంగా ప్రోగ్రామింగ్ చేస్తున్నాను మరియు చాలా విభిన్న తరగతులు తీసుకోగలిగాను. మరియు వ్యక్తులు ఇలా చెప్పినప్పుడు: “ఓహ్, జావా కోసం JIT చేసింది మీరే!”, ఇది ఎల్లప్పుడూ ఫన్నీగా ఉంటుంది. కానీ అంతకు ముందు, నేను పోస్ట్‌స్క్రిప్ట్ యొక్క క్లోన్‌పై పని చేస్తున్నాను - ఆపిల్ ఒకప్పుడు దాని లేజర్ ప్రింటర్ల కోసం ఉపయోగించిన భాష. మరియు దానికి ముందు నేను ఫోర్త్ లాంగ్వేజ్ యొక్క అమలు చేసాను. నాకు సాధారణ థీమ్ టూల్ డెవలప్‌మెంట్ అని నేను అనుకుంటున్నాను. నా జీవితమంతా నేను ఇతర వ్యక్తులు వారి అద్భుతమైన ప్రోగ్రామ్‌లను వ్రాసే సాధనాలను తయారు చేస్తున్నాను. కానీ నేను ఆపరేటింగ్ సిస్టమ్‌లు, డ్రైవర్లు, కెర్నల్-స్థాయి డీబగ్గర్లు, OS అభివృద్ధి కోసం భాషల అభివృద్ధిలో కూడా పాలుపంచుకున్నాను, ఇది పనికిరానిదిగా ప్రారంభమైంది, కానీ కాలక్రమేణా మరింత క్లిష్టంగా మారింది. కానీ ప్రధాన అంశం ఇప్పటికీ సాధనాల అభివృద్ధి. నా జీవితంలో చాలా భాగం అజుల్ మరియు సన్ మధ్య గడిచింది మరియు అది జావా గురించి. కానీ నేను బిగ్ డేటా మరియు మెషిన్ లెర్నింగ్‌లోకి ప్రవేశించినప్పుడు, నేను నా ఫ్యాన్సీ టోపీని తిరిగి ధరించి, "ఓహ్, ఇప్పుడు మాకు చిన్నవిషయం కాని సమస్య ఉంది మరియు చాలా ఆసక్తికరమైన విషయాలు జరుగుతున్నాయి మరియు వ్యక్తులు పనులు చేస్తున్నారు" అని అన్నాను. ఇది ఒక గొప్ప అభివృద్ధి మార్గం.

అవును, నేను పంపిణీ చేయబడిన కంప్యూటింగ్‌ని నిజంగా ఇష్టపడుతున్నాను. నా మొదటి ఉద్యోగం C లో విద్యార్థిగా, అడ్వర్టైజింగ్ ప్రాజెక్ట్‌లో ఉంది. ఇది నిజమైన అనలాగ్ ఎనలైజర్ ద్వారా ఉత్పత్తి చేయబడిన అనలాగ్ OCR కోసం డేటాను సేకరించిన Zilog Z80 చిప్‌లపై కంప్యూటింగ్ పంపిణీ చేయబడింది. ఇది కూల్ మరియు పూర్తిగా క్రేజీ టాపిక్. కానీ సమస్యలు ఉన్నాయి, కొంత భాగం సరిగ్గా గుర్తించబడలేదు, కాబట్టి మీరు ఒక చిత్రాన్ని తీసి, ఇప్పటికే వారి కళ్లతో చదివి, అది చెప్పినదానిని నివేదించగల వ్యక్తికి చూపించవలసి వచ్చింది మరియు అందువల్ల డేటాతో ఉద్యోగాలు మరియు ఈ ఉద్యోగాలు ఉన్నాయి. వారి స్వంత భాష ఉంది. వీటన్నింటిని ప్రాసెస్ చేసే బ్యాకెండ్ ఉంది - Z80s రన్నింగ్ vt100 టెర్మినల్స్‌తో సమాంతరంగా నడుస్తుంది - ఒక్కొక్కరికి ఒకటి మరియు Z80లో సమాంతర ప్రోగ్రామింగ్ మోడల్ ఉంది. స్టార్ కాన్ఫిగరేషన్‌లో అన్ని Z80లచే భాగస్వామ్యం చేయబడిన కొన్ని సాధారణ మెమరీ భాగం; బ్యాక్‌ప్లేన్ కూడా భాగస్వామ్యం చేయబడింది మరియు RAMలో సగం నెట్‌వర్క్‌లో భాగస్వామ్యం చేయబడింది మరియు మరొక సగం ప్రైవేట్‌గా ఉంది లేదా వేరొకదానికి వెళ్లింది. షేర్డ్... సెమీ షేర్డ్ మెమరీతో అర్థవంతంగా సంక్లిష్టమైన సమాంతర పంపిణీ వ్యవస్థ. ఇది ఎప్పుడో... 80ల మధ్యలో ఎక్కడో నాకు గుర్తులేదు. చాలా కాలం క్రితం. 
అవును, 30 సంవత్సరాలు చాలా కాలం క్రితం అని అనుకుందాం. పంపిణీ చేయబడిన కంప్యూటింగ్‌కు సంబంధించిన సమస్యలు చాలా కాలంగా ఉన్నాయి; ప్రజలు చాలా కాలంగా యుద్ధంలో ఉన్నారు బేవుల్ఫ్- సమూహాలు. అటువంటి క్లస్టర్‌లు ఇలా కనిపిస్తాయి... ఉదాహరణకు: ఈథర్‌నెట్ ఉంది మరియు మీ ఫాస్ట్ x86 ఈ ఈథర్‌నెట్‌కి కనెక్ట్ చేయబడింది మరియు ఇప్పుడు మీరు నకిలీ షేర్డ్ మెమరీని పొందాలనుకుంటున్నారు, ఎందుకంటే అప్పుడు ఎవరూ డిస్ట్రిబ్యూటెడ్ కంప్యూటింగ్ కోడింగ్ చేయలేరు, ఇది చాలా కష్టంగా ఉంది మరియు అందువలన అక్కడ ఉంది x86లో ప్రొటెక్షన్ మెమరీ పేజీలతో నకిలీ భాగస్వామ్య మెమరీ, మరియు మీరు ఈ పేజీకి వ్రాసినట్లయితే, మేము ఇతర ప్రాసెసర్‌లకు అదే షేర్ చేసిన మెమరీని యాక్సెస్ చేస్తే, అది మీ నుండి లోడ్ చేయబడాలి మరియు మద్దతు కోసం ప్రోటోకాల్ లాంటిది అని చెప్పాము. కాష్ కోహెరెన్స్ కనిపించింది మరియు దీని కోసం సాఫ్ట్‌వేర్. ఆసక్తికరమైన కాన్సెప్ట్. వాస్తవానికి, అసలు సమస్య వేరేది. ఇవన్నీ పనిచేశాయి, కానీ మీకు త్వరగా పనితీరు సమస్యలు వచ్చాయి, ఎందుకంటే పనితీరు నమూనాలను ఎవరూ మంచి స్థాయిలో అర్థం చేసుకోలేదు - ఏ మెమరీ యాక్సెస్ నమూనాలు ఉన్నాయి, నోడ్‌లు ఒకదానికొకటి అనంతంగా పింగ్ చేయలేదని ఎలా నిర్ధారించుకోవాలి మరియు మొదలైనవి.

H2Oలో నేను ముందుకు వచ్చినది ఏమిటంటే, సమాంతరత ఎక్కడ దాగి ఉందో మరియు ఎక్కడ కాదో నిర్ణయించే బాధ్యత డెవలపర్‌లదే. నేను అధిక-పనితీరు గల కోడ్‌ను సులభంగా మరియు సరళంగా వ్రాయడానికి కోడింగ్ మోడల్‌తో ముందుకు వచ్చాను. కానీ నెమ్మదిగా నడుస్తున్న కోడ్ రాయడం కష్టం, అది చెడుగా కనిపిస్తుంది. మీరు నెమ్మదిగా కోడ్ రాయడానికి తీవ్రంగా ప్రయత్నించాలి, మీరు ప్రామాణికం కాని పద్ధతులను ఉపయోగించాలి. బ్రేకింగ్ కోడ్ మొదటి చూపులో కనిపిస్తుంది. ఫలితంగా, మీరు సాధారణంగా వేగంగా పనిచేసే కోడ్‌ని వ్రాస్తారు, అయితే షేర్డ్ మెమరీ విషయంలో ఏమి చేయాలో మీరు గుర్తించాలి. ఇవన్నీ పెద్ద శ్రేణులతో ముడిపడి ఉన్నాయి మరియు అక్కడ ప్రవర్తన సమాంతర జావాలో అస్థిరత లేని పెద్ద శ్రేణుల వలె ఉంటుంది. నా ఉద్దేశ్యం, రెండు థ్రెడ్‌లు సమాంతర శ్రేణికి వ్రాస్తాయని ఊహించుకోండి, వాటిలో ఒకటి గెలుస్తుంది మరియు మరొకటి తదనుగుణంగా ఓడిపోతుంది మరియు ఏది మీకు తెలియదు. అవి అస్థిరంగా లేకుంటే, ఆర్డర్ మీకు కావలసినది కావచ్చు - మరియు ఇది బాగా పనిచేస్తుంది. ప్రజలు నిజంగా కార్యకలాపాల క్రమం గురించి శ్రద్ధ వహిస్తారు, వారు సరైన ప్రదేశాల్లో అస్థిరతను ఉంచుతారు మరియు సరైన ప్రదేశాల్లో మెమరీకి సంబంధించిన పనితీరు సమస్యలను వారు ఆశించారు. లేకపోతే, వారు కేవలం 1 నుండి N వరకు లూప్‌ల రూపంలో కోడ్‌ను వ్రాస్తారు, ఇక్కడ N కొన్ని ట్రిలియన్‌లు, అన్ని సంక్లిష్ట కేసులు స్వయంచాలకంగా సమాంతరంగా మారతాయి - మరియు అది అక్కడ పని చేయదు. కానీ H2Oలో ఇది జావా లేదా స్కాలా కాదు; మీకు కావాలంటే "జావా మైనస్ మైనస్"గా పరిగణించవచ్చు. ఇది చాలా స్పష్టమైన ప్రోగ్రామింగ్ స్టైల్ మరియు లూప్‌లు మరియు శ్రేణులతో సాధారణ C లేదా జావా కోడ్‌ను వ్రాయడం లాంటిది. కానీ అదే సమయంలో, మెమరీని టెరాబైట్లలో ప్రాసెస్ చేయవచ్చు. నేను ఇప్పటికీ H2O వాడుతున్నాను. నేను వివిధ ప్రాజెక్ట్‌లలో కాలానుగుణంగా దీన్ని ఉపయోగిస్తాను - మరియు ఇది ఇప్పటికీ వేగవంతమైన విషయం, దాని పోటీదారుల కంటే డజన్ల కొద్దీ రెట్లు వేగంగా ఉంటుంది. మీరు స్తంభాల డేటాతో బిగ్ డేటా చేస్తుంటే, H2Oని ఓడించడం చాలా కష్టం.

సాంకేతిక సవాళ్లు

ఆండ్రూ: మీ మొత్తం కెరీర్‌లో మీ అతిపెద్ద సవాలు ఏమిటి?

క్లయిఫ్: మేము సమస్య యొక్క సాంకేతిక లేదా నాన్-టెక్నికల్ భాగాన్ని చర్చిస్తున్నామా? అతిపెద్ద సవాళ్లు సాంకేతికమైనవి కాదని నేను చెబుతాను. 
సాంకేతిక సవాళ్ల విషయానికొస్తే. నేను కేవలం వారిని ఓడించాను. పెద్దది ఏమిటో కూడా నాకు తెలియదు, కానీ చాలా ఆసక్తికరమైనవి ఉన్నాయి, దానికి కొంత సమయం పట్టింది, మానసిక పోరాటం. నేను సన్‌కి వెళ్లినప్పుడు, నేను వేగంగా కంపైలర్‌ను తయారు చేస్తానని ఖచ్చితంగా అనుకున్నాను, మరియు నేను ఎప్పటికీ విజయవంతం కాలేనని కొంత మంది సీనియర్లు సమాధానం చెప్పారు. కానీ నేను ఈ మార్గాన్ని అనుసరించాను, రిజిస్టర్ కేటాయింపుదారుకి కంపైలర్‌ను వ్రాసాను మరియు అది చాలా వేగంగా ఉంది. ఇది ఆధునిక C1 వలె వేగవంతమైనది, కానీ కేటాయింపుదారు అప్పటికి చాలా నెమ్మదిగా ఉంది మరియు తిరిగి చూస్తే అది పెద్ద డేటా నిర్మాణ సమస్య. గ్రాఫికల్ రిజిస్టర్ కేటాయింపుదారుని వ్రాయడానికి నాకు ఇది అవసరం మరియు కోడ్ వ్యక్తీకరణ మరియు వేగం మధ్య గందరగోళాన్ని నేను అర్థం చేసుకోలేదు, ఇది ఆ యుగంలో ఉంది మరియు చాలా ముఖ్యమైనది. డేటా నిర్మాణం సాధారణంగా ఆ సమయంలోని x86sలో కాష్ పరిమాణాన్ని మించిపోతుందని తేలింది, అందువల్ల, రిజిస్టర్ కేటాయింపుదారు మొత్తం జిట్టర్ సమయంలో 5-10 శాతం పని చేస్తుందని నేను మొదట్లో ఊహించినట్లయితే, వాస్తవానికి అది తేలింది 50 శాతం.

సమయం గడిచేకొద్దీ, కంపైలర్ క్లీనర్ మరియు మరింత ప్రభావవంతంగా మారింది, మరిన్ని సందర్భాల్లో భయంకరమైన కోడ్‌ను రూపొందించడం ఆగిపోయింది మరియు పనితీరు ఎక్కువగా C కంపైలర్ ఉత్పత్తి చేసేలా కనిపించడం ప్రారంభించింది. అయితే, మీరు C కూడా వేగవంతం చేయని చెత్తను వ్రాస్తారు. . మీరు C వంటి కోడ్‌ని వ్రాస్తే, మీరు మరిన్ని సందర్భాలలో C వంటి పనితీరును పొందుతారు. మరియు మీరు మరింత ముందుకు వెళ్ళిన కొద్దీ, మీరు తరచుగా C స్థాయికి సమానమైన కోడ్‌ని పొందారు, రిజిస్టర్ కేటాయింపుదారు మీ కోడ్ వేగంగా లేదా నెమ్మదిగా నడుస్తుందా అనే దానితో సంబంధం లేకుండా ఏదో పూర్తి చేసినట్లు కనిపించడం ప్రారంభించింది. నేను మంచి ఎంపికలను చేయడానికి కేటాయింపుదారుపై పని చేయడం కొనసాగించాను. అతను నెమ్మదిగా మరియు నెమ్మదిగా మారాడు, కానీ ఎవరూ భరించలేని సందర్భాల్లో అతను మెరుగైన మరియు మెరుగైన ప్రదర్శన ఇచ్చాడు. నేను రిజిస్టర్ అలోకేటర్‌లోకి ప్రవేశించగలను, అక్కడ ఒక నెల పనిని పాతిపెట్టగలను మరియు అకస్మాత్తుగా మొత్తం కోడ్ 5% వేగంగా అమలు చేయడం ప్రారంభిస్తుంది. ఇది కాలానుగుణంగా జరిగింది మరియు రిజిస్టర్ కేటాయింపుదారు కళాఖండంగా మారింది - ప్రతి ఒక్కరూ దీన్ని ఇష్టపడ్డారు లేదా అసహ్యించుకున్నారు, మరియు అకాడమీకి చెందిన వ్యక్తులు “అంతా ఎందుకు ఇలా చేసారు” అనే అంశంపై ప్రశ్నలు అడిగారు, ఎందుకు కాదు లైన్ స్కాన్, మరియు తేడా ఏమిటి. సమాధానం ఇప్పటికీ అలాగే ఉంది: గ్రాఫ్ కలరింగ్ మరియు బఫర్ కోడ్‌తో చాలా జాగ్రత్తగా పని చేయడంపై ఆధారపడిన కేటాయింపు అనేది విజయ ఆయుధానికి సమానం, ఎవరూ ఓడించలేని ఉత్తమ కలయిక. మరియు ఇది కాకుండా స్పష్టమైన విషయం. కంపైలర్ చేసే మిగతావన్నీ చాలా బాగా అధ్యయనం చేయబడినవి, అయినప్పటికీ అవి కూడా కళ స్థాయికి తీసుకురాబడ్డాయి. కంపైలర్‌ను కళాఖండంగా మార్చడానికి నేను ఎల్లప్పుడూ పనులు చేసాను. కానీ వీటిలో ఏదీ అసాధారణమైనది కాదు - రిజిస్టర్ కేటాయింపుదారు తప్ప. జాగ్రత్తగా ఉండటమే ఉపాయం నరికి లోడ్‌లో ఉంది మరియు ఇది జరిగితే (ఆసక్తి ఉంటే నేను మరింత వివరంగా వివరించగలను), పనితీరు షెడ్యూల్‌లో ఎటువంటి ప్రమాదం లేకుండా మీరు మరింత దూకుడుగా ఇన్‌లైన్ చేయగలరని దీని అర్థం. ఆ రోజుల్లో, రిజిస్టర్ అలోకేటర్‌లను కలిగి ఉన్న పూర్తి స్థాయి కంపైలర్‌లు, బాబుల్స్ మరియు ఈలలతో వేలాడదీయబడ్డాయి, కానీ మరెవరూ దీన్ని చేయలేరు.

సమస్య ఏమిటంటే, మీరు ఇన్‌లైనింగ్, ఇన్‌లైనింగ్ ప్రాంతాన్ని పెంచడం మరియు పెంచడం వంటి పద్ధతులను జోడిస్తే, ఉపయోగించిన విలువల సమితి తక్షణమే రిజిస్టర్‌ల సంఖ్యను అధిగమిస్తుంది మరియు మీరు వాటిని కత్తిరించాలి. కేటాయించిన వ్యక్తి వదులుకున్నప్పుడు క్లిష్టమైన స్థాయి సాధారణంగా వస్తుంది మరియు స్పిల్ కోసం ఒక మంచి అభ్యర్థి మరొకరికి విలువైనది, మీరు సాధారణంగా కొన్ని క్రూరమైన వస్తువులను విక్రయిస్తారు. ఇక్కడ ఇన్‌లైనింగ్ యొక్క విలువ ఏమిటంటే, మీరు ఓవర్‌హెడ్‌లో కొంత భాగాన్ని కోల్పోతారు, కాల్ చేయడం మరియు సేవ్ చేయడం కోసం ఓవర్‌హెడ్, మీరు లోపల ఉన్న విలువలను చూడవచ్చు మరియు వాటిని మరింత ఆప్టిమైజ్ చేయవచ్చు. ఇన్‌లైనింగ్ ఖర్చు పెద్ద సంఖ్యలో ప్రత్యక్ష విలువలు ఏర్పడతాయి మరియు మీ రిజిస్టర్ కేటాయింపుదారు అవసరమైన దానికంటే ఎక్కువ కాలిపోతే, మీరు వెంటనే కోల్పోతారు. అందువల్ల, చాలా మంది కేటాయింపుదారులకు సమస్య ఉంది: ఇన్లైనింగ్ ఒక నిర్దిష్ట రేఖను దాటినప్పుడు, ప్రపంచంలోని ప్రతిదీ తగ్గించబడటం ప్రారంభమవుతుంది మరియు ఉత్పాదకతను టాయిలెట్లో ఫ్లష్ చేయవచ్చు. కంపైలర్‌ను అమలు చేసే వారు కొన్ని హ్యూరిస్టిక్‌లను జోడిస్తారు: ఉదాహరణకు, ఇన్‌లైనింగ్‌ని ఆపడానికి, తగినంత పెద్ద పరిమాణంతో ప్రారంభించండి, ఎందుకంటే కేటాయింపులు ప్రతిదీ నాశనం చేస్తాయి. పనితీరు గ్రాఫ్‌లో కింక్ ఈ విధంగా ఏర్పడుతుంది - మీరు ఇన్‌లైన్, ఇన్‌లైన్, పనితీరు నెమ్మదిగా పెరుగుతుంది - ఆపై బూమ్! - మీరు చాలా వరుసలో ఉన్నందున ఇది స్విఫ్ట్ జాక్ లాగా పడిపోయింది. జావా రాకముందు అంతా ఇలాగే పనిచేసింది. జావాకు చాలా ఎక్కువ ఇన్‌లైనింగ్ అవసరం, కాబట్టి నేను నా కేటాయింపుదారుని మరింత దూకుడుగా మార్చవలసి వచ్చింది, తద్వారా అది క్రాష్‌లు కాకుండా లెవెల్ అవుట్ అవుతుంది మరియు మీరు ఎక్కువగా ఇన్‌లైన్ చేస్తే, అది చిందటం మొదలవుతుంది, కానీ "ఇంకా స్పిల్లింగ్ లేదు" క్షణం ఇంకా వస్తుంది. ఇది ఒక ఆసక్తికరమైన పరిశీలన మరియు ఇది నాకు ఎక్కడా నుండి వచ్చింది, స్పష్టంగా లేదు, కానీ అది బాగా చెల్లించింది. నేను అగ్రెసివ్ ఇన్‌లైనింగ్‌ని తీసుకున్నాను మరియు అది నన్ను జావా మరియు సి పనితీరు పక్కపక్కనే పనిచేసే ప్రదేశాలకు తీసుకెళ్లింది. వారు నిజంగా దగ్గరగా ఉన్నారు - నేను C కోడ్ మరియు అలాంటి వాటి కంటే చాలా వేగంగా ఉండే జావా కోడ్‌ని వ్రాయగలను, కానీ సగటున, విషయాల యొక్క పెద్ద చిత్రంలో, అవి దాదాపు పోల్చదగినవి. ఈ మెరిట్‌లో భాగమే రిజిస్టర్ అలోకేటర్ అని నేను భావిస్తున్నాను, ఇది నన్ను వీలైనంత మూర్ఖంగా ఇన్‌లైన్ చేయడానికి అనుమతిస్తుంది. నేను చూసే ప్రతిదాన్ని ఇన్‌లైన్ చేస్తాను. ఇక్కడ ప్రశ్న ఏమిటంటే, కేటాయింపుదారు బాగా పనిచేస్తుందా, ఫలితం తెలివిగా పని చేసే కోడ్. ఇది ఒక పెద్ద సవాలు: వీటన్నింటిని అర్థం చేసుకోవడం మరియు పని చేయడం.

రిజిస్టర్ కేటాయింపు మరియు బహుళ కోర్ల గురించి కొంచెం

Владимир: రిజిస్టర్ కేటాయింపు వంటి సమస్యలు ఒకరకమైన శాశ్వతమైన, అంతులేని అంశంలా కనిపిస్తున్నాయి. ఆశాజనకంగా అనిపించి ఆచరణలో విఫలమైన ఆలోచన ఎప్పుడైనా ఉందా అని నేను ఆశ్చర్యపోతున్నాను?

క్లయిఫ్: తప్పకుండా! రిజిస్టర్ కేటాయింపు అనేది మీరు NP-పూర్తి సమస్యను పరిష్కరించడానికి కొన్ని హ్యూరిస్టిక్‌లను కనుగొనడానికి ప్రయత్నించే ప్రాంతం. మరియు మీరు ఎప్పటికీ పరిపూర్ణ పరిష్కారాన్ని సాధించలేరు, సరియైనదా? ఇది కేవలం అసాధ్యం. చూడండి, టైమ్ కంపైలేషన్ ముందు - ఇది కూడా పేలవంగా పని చేస్తుంది. ఇక్కడ సంభాషణ కొన్ని సగటు కేసుల గురించి. సాధారణ పనితీరు గురించి, కాబట్టి మీరు మంచి విలక్షణ పనితీరుగా భావించే దాన్ని మీరు వెళ్లి కొలవవచ్చు - అన్నింటికంటే, మీరు దాన్ని మెరుగుపరచడానికి కృషి చేస్తున్నారు! రిజిస్టర్ కేటాయింపు అనేది పనితీరు గురించిన అంశం. మీరు మొదటి నమూనాను కలిగి ఉంటే, అది పని చేస్తుంది మరియు అవసరమైన వాటిని పెయింట్ చేస్తుంది, పనితీరు పని ప్రారంభమవుతుంది. మీరు బాగా కొలవడం నేర్చుకోవాలి. ఇది ఎందుకు ముఖ్యమైనది? మీకు స్పష్టమైన డేటా ఉంటే, మీరు వివిధ ప్రాంతాలను చూడవచ్చు మరియు చూడవచ్చు: అవును, ఇది ఇక్కడ సహాయపడింది, కానీ ఇక్కడే ప్రతిదీ విరిగిపోయింది! కొన్ని మంచి ఆలోచనలు వస్తాయి, మీరు కొత్త హ్యూరిస్టిక్‌లను జోడించారు మరియు అకస్మాత్తుగా ప్రతిదీ సగటున కొంచెం మెరుగ్గా పని చేయడం ప్రారంభిస్తుంది. లేదా అది ప్రారంభం కాదు. మేము ఐదు శాతం పనితీరు కోసం పోరాడుతున్న సందర్భాలు నాకు చాలా ఉన్నాయి, ఇది మా అభివృద్ధిని మునుపటి కేటాయింపుదారు నుండి వేరు చేసింది. మరియు ప్రతిసారీ ఇలా కనిపిస్తుంది: ఎక్కడో మీరు గెలుస్తారు, ఎక్కడో ఓడిపోతారు. మీకు మంచి పనితీరు విశ్లేషణ సాధనాలు ఉంటే, మీరు కోల్పోయిన ఆలోచనలను కనుగొనవచ్చు మరియు అవి ఎందుకు విఫలమయ్యాయో అర్థం చేసుకోవచ్చు. బహుశా ప్రతిదీ అలాగే ఉంచడం విలువైనదే కావచ్చు లేదా ఫైన్-ట్యూనింగ్ చేయడానికి మరింత తీవ్రమైన విధానాన్ని తీసుకోవడం లేదా బయటకు వెళ్లి వేరేదాన్ని పరిష్కరించడం. ఇది మొత్తం బంచ్ విషయాలు! నేను ఈ కూల్ హ్యాక్ చేసాను, కానీ నాకు ఇది ఒకటి, మరియు ఇది ఒకటి మరియు ఇది కూడా అవసరం - మరియు వారి మొత్తం కలయిక కొన్ని మెరుగుదలలను అందిస్తుంది. మరియు ఒంటరివారు విఫలం కావచ్చు. ఇది NP-పూర్తి సమస్యలపై పనితీరు పని స్వభావం.

Владимир: అలాకేటర్లలో పెయింటింగ్ వంటివి ఇప్పటికే పరిష్కరించబడిన సమస్య అనే భావన వస్తుంది. సరే, ఇది మీ కోసం నిర్ణయించబడింది, మీరు చెప్పేదానిని బట్టి అంచనా వేయండి, కనుక ఇది విలువైనదేనా...

క్లయిఫ్: ఇది అలా పరిష్కరించబడలేదు. మీరు దానిని "పరిష్కారం" గా మార్చాలి. క్లిష్టమైన సమస్యలు ఉన్నాయి మరియు వాటిని పరిష్కరించాల్సిన అవసరం ఉంది. ఇది పూర్తయిన తర్వాత, ఉత్పాదకతపై పని చేయడానికి ఇది సమయం. మీరు తదనుగుణంగా ఈ పనిని సంప్రదించాలి - బెంచ్‌మార్క్‌లు చేయండి, కొలమానాలను సేకరించండి, మీరు మునుపటి సంస్కరణకు తిరిగి వచ్చినప్పుడు, మీ పాత హ్యాక్ మళ్లీ పని చేయడం ప్రారంభించినప్పుడు (లేదా వైస్ వెర్సా, ఆగిపోయినప్పుడు) పరిస్థితులను వివరించండి. మరియు మీరు ఏదైనా సాధించే వరకు వదులుకోవద్దు. నేను ఇప్పటికే చెప్పినట్లుగా, పని చేయని మంచి ఆలోచనలు ఉంటే, కానీ ఆలోచనల రిజిస్టర్ల కేటాయింపు రంగంలో ఇది దాదాపు అంతులేనిది. ఉదాహరణకు, మీరు శాస్త్రీయ ప్రచురణలను చదవవచ్చు. ఇప్పుడు ఈ ప్రాంతం చాలా నెమ్మదిగా కదలడం ప్రారంభించినప్పటికీ, దాని యవ్వనంలో కంటే మరింత స్పష్టంగా మారింది. అయితే, ఈ రంగంలో లెక్కలేనన్ని మంది వ్యక్తులు పనిచేస్తున్నారు మరియు వారి ఆలోచనలన్నీ ప్రయత్నించడానికి విలువైనవి, వారందరూ రెక్కల్లో వేచి ఉన్నారు. మరియు మీరు వాటిని ప్రయత్నిస్తే తప్ప అవి ఎంత మంచివో మీరు చెప్పలేరు. మీ కేటాయింపుదారులోని అన్నింటితో అవి ఎంత బాగా కలిసిపోతాయి, ఎందుకంటే కేటాయింపుదారు చాలా పనులు చేస్తాడు మరియు కొన్ని ఆలోచనలు మీ నిర్దిష్ట కేటాయింపుదారులో పని చేయవు, కానీ మరొక కేటాయింపుదారులో అవి సులభంగా ఉంటాయి. కేటాయింపుదారుని గెలవడానికి ప్రధాన మార్గం ఏమిటంటే, ప్రధాన మార్గం వెలుపల నెమ్మదిగా ఉన్న అంశాలను లాగడం మరియు నెమ్మదిగా ఉన్న మార్గాల సరిహద్దుల వెంట విడిపోయేలా చేయడం. కాబట్టి మీరు GCని అమలు చేయాలనుకుంటే, స్లో పాత్‌ను అనుసరించండి, డీఆప్టిమైజ్ చేయండి, మినహాయింపును త్రోయండి, ఇవన్నీ చాలా అరుదు అని మీకు తెలుసు. మరియు అవి చాలా అరుదు, నేను తనిఖీ చేసాను. మీరు అదనపు పని చేస్తారు మరియు ఇది ఈ నెమ్మదిగా ఉండే మార్గాలపై చాలా పరిమితులను తొలగిస్తుంది, కానీ అవి నెమ్మదిగా మరియు అరుదుగా ప్రయాణించే కారణంగా ఇది నిజంగా పట్టింపు లేదు. ఉదాహరణకు, శూన్య పాయింటర్ - ఇది ఎప్పుడూ జరగదు, సరియైనదా? మీరు వేర్వేరు విషయాల కోసం అనేక మార్గాలను కలిగి ఉండాలి, కానీ అవి ప్రధానమైన వాటితో జోక్యం చేసుకోకూడదు. 

Владимир: ఒకేసారి వేలకొద్దీ కోర్‌లు ఉన్నప్పుడు బహుళ-కోర్‌ల గురించి మీరు ఏమనుకుంటున్నారు? ఇది ఉపయోగకరమైన విషయమా?

క్లయిఫ్: GPU యొక్క విజయం అది చాలా ఉపయోగకరంగా ఉందని చూపిస్తుంది!

Владимир: అవి చాలా ప్రత్యేకమైనవి. సాధారణ ప్రయోజన ప్రాసెసర్ల గురించి ఏమిటి?

క్లయిఫ్: సరే, అది అజుల్ వ్యాపార నమూనా. ఊహాజనిత పనితీరును ప్రజలు నిజంగా ఇష్టపడే యుగంలో సమాధానం తిరిగి వచ్చింది. అప్పట్లో సమాంతర కోడ్ రాయడం కష్టం. H2O కోడింగ్ మోడల్ చాలా స్కేలబుల్, కానీ ఇది సాధారణ ప్రయోజన మోడల్ కాదు. బహుశా GPUని ఉపయోగిస్తున్నప్పుడు కంటే కొంచెం సాధారణమైనది. మేము అటువంటి వస్తువును అభివృద్ధి చేయడంలో సంక్లిష్టత గురించి లేదా దానిని ఉపయోగించడం యొక్క సంక్లిష్టత గురించి మాట్లాడుతున్నామా? ఉదాహరణకు, అజుల్ నాకు ఒక ఆసక్తికరమైన పాఠాన్ని బోధించాడు, అది స్పష్టంగా కనిపించనిది: చిన్న కాష్‌లు సాధారణమైనవి. 

జీవితంలో అతిపెద్ద సవాలు

Владимир: నాన్-టెక్నికల్ సవాళ్ల గురించి ఏమిటి?

క్లయిఫ్: ప్రజలతో దయగా మరియు మంచిగా ఉండటమే అతిపెద్ద సవాలు. మరియు ఫలితంగా, నేను నిరంతరం చాలా సంఘర్షణ పరిస్థితులలో నన్ను కనుగొన్నాను. విషయాలు తప్పుగా జరుగుతున్నాయని నాకు తెలుసు, కానీ ఆ సమస్యలతో ఎలా ముందుకు వెళ్లాలో తెలియక వాటిని నిర్వహించలేకపోయారు. దశాబ్దాల తరబడి కొనసాగే అనేక దీర్ఘకాలిక సమస్యలు ఈ విధంగా తలెత్తాయి. జావాలో C1 మరియు C2 కంపైలర్‌లు ఉండటం దీనికి ప్రత్యక్ష పరిణామం. జావాలో వరుసగా పదేళ్లపాటు బహుళస్థాయి సంకలనం లేకపోవడం కూడా ప్రత్యక్ష పరిణామమే. మనకు అలాంటి వ్యవస్థ అవసరమని స్పష్టంగా ఉంది, కానీ అది ఎందుకు ఉనికిలో లేదని స్పష్టంగా లేదు. నేను ఒక ఇంజనీర్‌తో లేదా ఇంజనీర్ల సమూహంతో సమస్యలను ఎదుర్కొన్నాను. ఒకప్పుడు, నేను సన్‌లో పనిచేయడం ప్రారంభించినప్పుడు, నేను... సరే, అప్పుడు మాత్రమే కాదు, సాధారణంగా నాకు ప్రతిదానిపై నా స్వంత అభిప్రాయం ఉంటుంది. మరియు మీరు మీలోని ఈ సత్యాన్ని తీసుకొని దానిని తలచుకుంటే అది నిజమేనని నేను అనుకున్నాను. ముఖ్యంగా నేను చాలాసార్లు ఆశ్చర్యకరంగా సరైనవాడిని. మరియు మీరు ఈ విధానాన్ని ఇష్టపడకపోతే ... ప్రత్యేకించి మీరు స్పష్టంగా తప్పుగా మరియు అర్ధంలేనివి చేస్తే ... సాధారణంగా, కొంతమంది వ్యక్తులు ఈ రకమైన కమ్యూనికేషన్‌ను తట్టుకోగలరు. కొంతమంది చేయగలిగినప్పటికీ, నా లాంటిది. నేను నా జీవితమంతా మెరిటోక్రటిక్ సూత్రాలపై నిర్మించాను. మీరు ఏదైనా తప్పు చూపిస్తే, నేను వెంటనే తిరగబడి చెబుతాను: మీరు నాన్సెన్స్ అన్నారు. అదే సమయంలో, వాస్తవానికి, నేను క్షమాపణలు కోరుతున్నాను మరియు అన్నింటికీ, నేను మెరిట్లను గమనించి, ఏవైనా ఉంటే, మరియు ఇతర సరైన చర్యలు తీసుకుంటాను. మరోవైపు, మొత్తం సమయంలో దిగ్భ్రాంతి కలిగించే విధంగా ఎక్కువ శాతం గురించి నేను ఆశ్చర్యంగా ఉన్నాను. మరియు వ్యక్తులతో సంబంధాలలో ఇది బాగా పని చేయదు. నేను మంచిగా ఉండటానికి ప్రయత్నించడం లేదు, కానీ నేను ప్రశ్నను సూటిగా అడుగుతున్నాను. "ఇది ఎప్పటికీ పనిచేయదు, ఎందుకంటే ఒకటి, రెండు మరియు మూడు." మరియు వారు "ఓహ్!" విస్మరించడం ఉత్తమమైన ఇతర పరిణామాలు ఉన్నాయి: ఉదాహరణకు, నా భార్య నుండి విడాకులు తీసుకోవడానికి మరియు ఆ తర్వాత పది సంవత్సరాల నిరాశకు దారితీసినవి.

ఛాలెంజ్ అనేది వ్యక్తులతో పోరాటం, మీరు ఏమి చేయగలరు లేదా ఏమి చేయలేరు, ఏది ముఖ్యమైనది మరియు ఏది కాదు. కోడింగ్ శైలి గురించి చాలా సవాళ్లు ఉన్నాయి. నేను ఇప్పటికీ చాలా కోడ్ వ్రాస్తాను మరియు ఆ రోజుల్లో నేను ఒకదానిపై దృష్టి పెట్టకుండా చాలా సమాంతర పనులు చేయడం మరియు వాటిని పేలవంగా చేయడం వల్ల నేను వేగాన్ని తగ్గించాల్సి వచ్చింది. వెనక్కి తిరిగి చూసుకుంటే, నేను జావా JIT కమాండ్, C2 కమాండ్ కోసం సగం కోడ్ రాశాను. తర్వాతి వేగవంతమైన కోడర్ సగం స్లో అని, తర్వాతి సగం స్లో అని రాసింది మరియు అది ఘాతాంక క్షీణత. ఈ వరుసలో ఏడవ వ్యక్తి చాలా చాలా నెమ్మదిగా ఉన్నాడు - ఇది ఎల్లప్పుడూ జరుగుతుంది! నేను చాలా కోడ్‌ని టచ్ చేసాను. ఎవరు ఏమి వ్రాసారో నేను చూసాను, మినహాయింపు లేకుండా, నేను వారి కోడ్‌ని తదేకంగా చూసాను, వాటిలో ప్రతి ఒక్కటి సమీక్షించాను మరియు ఇప్పటికీ వారిలో ఎవరికన్నా ఎక్కువగా వ్రాయడం కొనసాగించాను. ఈ విధానం ప్రజలతో బాగా పని చేయదు. కొంతమందికి ఇది నచ్చదు. మరియు వారు దానిని నిర్వహించలేనప్పుడు, అన్ని రకాల ఫిర్యాదులు ప్రారంభమవుతాయి. ఉదాహరణకు, నేను చాలా ఎక్కువ కోడ్ వ్రాస్తున్నందున మరియు అది జట్టును ప్రమాదంలో పడేస్తున్నందున కోడింగ్‌ను ఆపివేయమని ఒకసారి నాకు చెప్పబడింది మరియు ఇదంతా నాకు జోక్‌గా అనిపించింది: డ్యూడ్, మిగిలిన బృందం అదృశ్యమై నేను కోడ్ రాస్తూ ఉంటే, మీరు సగం జట్లను మాత్రమే కోల్పోతాము. మరోవైపు, నేను కోడ్ వ్రాస్తూనే ఉంటే మరియు మీరు సగం జట్టును కోల్పోతే, అది చాలా చెడ్డ నిర్వహణగా అనిపిస్తుంది. నేను దాని గురించి ఎప్పుడూ ఆలోచించలేదు, దాని గురించి ఎప్పుడూ మాట్లాడలేదు, కానీ అది నా తలలో ఎక్కడో ఉంది. "మీరంతా నన్ను తమాషా చేస్తున్నారా?" అనే ఆలోచన నా మనస్సులో మెరుస్తున్నది. కాబట్టి, అతిపెద్ద సమస్య నాకు మరియు వ్యక్తులతో నా సంబంధాలే. ఇప్పుడు నేను నన్ను బాగా అర్థం చేసుకున్నాను, నేను చాలా కాలం పాటు ప్రోగ్రామర్‌లకు టీమ్ లీడ్‌గా ఉన్నాను మరియు ఇప్పుడు నేను ప్రజలకు నేరుగా చెప్తున్నాను: మీకు తెలుసా, నేను నేనే, మరియు మీరు నాతో వ్యవహరించవలసి ఉంటుంది - నేను నిలబడితే ఫర్వాలేదు ఇక్కడ? మరియు వారు దానితో వ్యవహరించడం ప్రారంభించినప్పుడు, ప్రతిదీ పని చేసింది. నిజానికి, నేను చెడ్డవాడిని లేదా మంచివాడిని కాదు, నాకు చెడు ఉద్దేశాలు లేదా స్వార్థపూరిత ఆకాంక్షలు లేవు, ఇది నా సారాంశం మాత్రమే, మరియు నేను దానితో ఎలాగైనా జీవించాలి.

ఆండ్రూ: ఇటీవలే అందరూ అంతర్ముఖులకు స్వీయ-అవగాహన మరియు సాధారణంగా సాఫ్ట్ స్కిల్స్ గురించి మాట్లాడటం ప్రారంభించారు. దీని గురించి మీరు ఏమి చెప్పగలరు?

క్లయిఫ్: అవును, అది నా భార్య నుండి విడాకుల నుండి నేను నేర్చుకున్న అంతర్దృష్టి మరియు పాఠం. విడాకుల నుండి నేను నేర్చుకున్నది నన్ను నేను అర్థం చేసుకోవడం. ఈ విధంగా నేను ఇతరులను అర్థం చేసుకోవడం ప్రారంభించాను. ఈ పరస్పర చర్య ఎలా పనిచేస్తుందో అర్థం చేసుకోండి. ఇది ఒకదాని తర్వాత ఒకటి ఆవిష్కరణలకు దారితీసింది. నేను ఎవరో మరియు నేను దేనికి ప్రాతినిధ్యం వహిస్తున్నాను అనే అవగాహన ఉంది. నేను ఏమి చేస్తున్నాను: గాని నేను పనిలో నిమగ్నమై ఉన్నాను, లేదా నేను సంఘర్షణకు దూరంగా ఉన్నాను లేదా మరేదైనా - మరియు ఈ స్థాయి స్వీయ-అవగాహన నన్ను నేను అదుపులో ఉంచుకోవడానికి నిజంగా సహాయపడుతుంది. దీని తరువాత, ప్రతిదీ చాలా సులభం అవుతుంది. నాలో మాత్రమే కాదు, ఇతర ప్రోగ్రామర్లలో కూడా నేను కనుగొన్న ఒక విషయం ఏమిటంటే, మీరు మానసిక ఒత్తిడిలో ఉన్నప్పుడు ఆలోచనలను మౌఖికంగా చెప్పలేకపోవడం. ఉదాహరణకు, మీరు ప్రవహించే స్థితిలో కోడింగ్ చేస్తూ కూర్చున్నారు, ఆపై వారు మీ వద్దకు పరుగెత్తుకుంటూ వచ్చి, ఏదో విరిగిపోయిందని మరియు ఇప్పుడు మీపై తీవ్ర చర్యలు తీసుకుంటామని హిస్టీరిక్స్‌లో కేకలు వేయడం ప్రారంభిస్తారు. మరియు మీరు మానసిక ఒత్తిడిలో ఉన్నందున మీరు ఒక్క మాట కూడా చెప్పలేరు. సంపాదించిన జ్ఞానం ఈ క్షణం కోసం సిద్ధం చేయడానికి, దానిని తట్టుకుని, తిరోగమన ప్రణాళికకు వెళ్లడానికి మిమ్మల్ని అనుమతిస్తుంది, ఆ తర్వాత మీరు ఏదైనా చేయవచ్చు. కాబట్టి అవును, ఇవన్నీ ఎలా పనిచేస్తాయో మీరు గ్రహించడం ప్రారంభించినప్పుడు, ఇది జీవితాన్ని మార్చే భారీ సంఘటన. 
నేను సరైన పదాలను కనుగొనలేకపోయాను, కానీ నేను చర్యల క్రమాన్ని గుర్తుంచుకున్నాను. విషయం ఏమిటంటే, ఈ ప్రతిచర్య శబ్దం వలె భౌతికంగా ఉంటుంది మరియు మీకు స్థలం అవసరం. అటువంటి స్థలం, జెన్ అర్థంలో. ఇది ఖచ్చితంగా వివరించాల్సిన అవసరం ఉంది, ఆపై వెంటనే పక్కకు తప్పుకోండి - పూర్తిగా భౌతికంగా దూరంగా ఉండండి. నేను మాటలతో మౌనంగా ఉన్నప్పుడు, నేను పరిస్థితిని మానసికంగా ప్రాసెస్ చేయగలను. అడ్రినలిన్ మీ మెదడుకు చేరుకోవడంతో, మిమ్మల్ని ఫైట్ లేదా ఫ్లైట్ మోడ్‌లోకి మార్చినప్పుడు, మీరు ఇకపై ఏమీ చెప్పలేరు, కాదు - ఇప్పుడు మీరు ఒక ఇడియట్, కొరడాతో కొట్టే ఇంజనీర్, సరైన ప్రతిస్పందన లేదా దాడిని ఆపలేరు మరియు దాడి చేసే వ్యక్తి స్వేచ్ఛగా ఉన్నాడు. మళ్లీ మళ్లీ దాడి చేయడానికి. మీరు మొదట మళ్లీ మీరే అవ్వాలి, నియంత్రణను తిరిగి పొందాలి, "ఫైట్ లేదా ఫ్లైట్" మోడ్ నుండి బయటపడాలి.

మరియు దీని కోసం మనకు వెర్బల్ స్పేస్ అవసరం. ఖాళీ స్థలం మాత్రమే. మీరు ఏదైనా చెబితే, మీరు ఖచ్చితంగా చెప్పవచ్చు, ఆపై వెళ్లి మీ కోసం నిజంగా “స్పేస్” కనుగొనండి: పార్కులో నడవడానికి వెళ్లండి, షవర్‌లో మిమ్మల్ని మీరు లాక్ చేసుకోండి - ఇది పట్టింపు లేదు. ఆ పరిస్థితి నుండి తాత్కాలికంగా డిస్‌కనెక్ట్ చేయడం ప్రధాన విషయం. మీరు కనీసం కొన్ని సెకన్ల పాటు స్విచ్ ఆఫ్ చేసిన వెంటనే, రాబడిని నియంత్రించండి, మీరు తెలివిగా ఆలోచించడం ప్రారంభిస్తారు. "సరే, నేను ఒక రకమైన మూర్ఖుడిని కాదు, నేను తెలివితక్కువ పనులు చేయను, నేను చాలా ఉపయోగకరమైన వ్యక్తిని." మీరు మిమ్మల్ని మీరు ఒప్పించగలిగిన తర్వాత, తదుపరి దశకు వెళ్లడానికి ఇది సమయం: ఏమి జరిగిందో అర్థం చేసుకోవడం. మీపై దాడి జరిగింది, మీరు ఊహించని చోట నుండి దాడి జరిగింది, ఇది నిజాయితీ లేని, నీచమైన ఆకస్మిక దాడి. ఇది చెడ్డది. దాడి చేసే వ్యక్తికి ఇది ఎందుకు అవసరమో అర్థం చేసుకోవడం తదుపరి దశ. నిజంగా, ఎందుకు? బహుశా అతను కోపంగా ఉన్నందున? అతనికి ఎందుకు పిచ్చి? ఉదాహరణకు, అతను తనను తాను చిత్తు చేసాడు మరియు బాధ్యతను అంగీకరించలేడా? మొత్తం పరిస్థితిని జాగ్రత్తగా నిర్వహించడానికి ఇది మార్గం. కానీ దీనికి యుక్తి, శబ్ద స్థలం అవసరం. మౌఖిక పరిచయాన్ని విచ్ఛిన్నం చేయడం మొదటి దశ. పదాలతో చర్చను నివారించండి. దాన్ని రద్దు చేయండి, వీలైనంత త్వరగా వెళ్లిపోండి. ఇది టెలిఫోన్ సంభాషణ అయితే, ఆపివేయండి - ఇది నా మాజీ భార్యతో కమ్యూనికేట్ చేయడం ద్వారా నేను నేర్చుకున్న నైపుణ్యం. సంభాషణ ఎక్కడికీ సరిగ్గా జరగకపోతే, "వీడ్కోలు" అని చెప్పి, ముగించండి. ఫోన్ యొక్క మరొక వైపు నుండి: "బ్లా బ్లా బ్లా", మీరు సమాధానం ఇస్తారు: "అవును, బై!" మరియు వేలాడదీయండి. మీరు సంభాషణను ముగించండి. ఐదు నిమిషాల తరువాత, తెలివిగా ఆలోచించే సామర్థ్యం మీకు తిరిగి వచ్చినప్పుడు, మీరు కొద్దిగా చల్లబడ్డారు, ప్రతిదీ గురించి ఆలోచించడం సాధ్యమవుతుంది, ఏమి జరిగింది మరియు తరువాత ఏమి జరుగుతుంది. మరియు కేవలం భావోద్వేగం నుండి ప్రతిస్పందించకుండా, ఆలోచనాత్మక ప్రతిస్పందనను రూపొందించడం ప్రారంభించండి. నాకు, స్వీయ-అవగాహనలో పురోగతి ఖచ్చితంగా భావోద్వేగ ఒత్తిడి విషయంలో నేను మాట్లాడలేను. ఈ స్థితి నుండి బయటపడటం, ఎలా ప్రతిస్పందించాలో మరియు సమస్యలను ఎలా భర్తీ చేయాలో ఆలోచించడం మరియు ప్లాన్ చేయడం - మీరు మాట్లాడలేని సందర్భంలో ఇవి సరైన దశలు. భావోద్వేగ ఒత్తిడి వ్యక్తమయ్యే పరిస్థితి నుండి పారిపోవడం మరియు ఈ ఒత్తిడిలో పాల్గొనడం మానేయడం సులభమయిన మార్గం. ఆ తర్వాత మీరు ఆలోచించగలుగుతారు, మీరు ఆలోచించగలిగినప్పుడు, మీరు మాట్లాడగలరు మరియు మొదలైనవి.

మార్గం ద్వారా, కోర్టులో, ప్రత్యర్థి న్యాయవాది మీకు దీన్ని చేయడానికి ప్రయత్నిస్తాడు - ఇప్పుడు ఎందుకు స్పష్టంగా ఉంది. ఎందుకంటే మీరు మీ పేరును కూడా ఉచ్చరించలేని స్థితికి మిమ్మల్ని అణచివేయగల సామర్థ్యం అతనికి ఉంది. చాలా నిజమైన అర్థంలో, మీరు మాట్లాడలేరు. మీకు ఇలా జరిగితే, మీరు మాటల యుద్ధాలు జరిగే ప్రదేశంలో, కోర్టు వంటి ప్రదేశంలో కనిపిస్తారని మీకు తెలిస్తే, మీరు మీ లాయర్‌తో రావచ్చు. న్యాయవాది మీ పక్షాన నిలబడతారు మరియు మాటల దాడిని ఆపివేస్తారు మరియు దానిని పూర్తిగా చట్టపరమైన మార్గంలో చేస్తారు మరియు కోల్పోయిన జెన్ స్థలం మీకు తిరిగి వస్తుంది. ఉదాహరణకు, నేను నా కుటుంబాన్ని రెండుసార్లు పిలవవలసి వచ్చింది, న్యాయమూర్తి దీని గురించి చాలా స్నేహపూర్వకంగా ఉన్నారు, కానీ ప్రత్యర్థి న్యాయవాది అరిచి నన్ను అరిచాడు, నేను అంచు వైపుగా ఒక్క మాట కూడా పొందలేకపోయాను. ఈ సందర్భాలలో, మధ్యవర్తిని ఉపయోగించడం నాకు ఉత్తమంగా పని చేస్తుంది. మధ్యవర్తి నిరంతర ప్రవాహంలో మీపై కురిపించే ఈ ఒత్తిడిని నిలిపివేస్తుంది, మీరు అవసరమైన జెన్ స్థలాన్ని కనుగొంటారు మరియు దానితో మాట్లాడే సామర్థ్యం తిరిగి వస్తుంది. ఇది మొత్తం విజ్ఞాన రంగం, దీనిలో అధ్యయనం చేయడానికి చాలా ఉన్నాయి, మీలో మీరు కనుగొనడానికి చాలా ఉన్నాయి మరియు ఇవన్నీ వేర్వేరు వ్యక్తులకు భిన్నమైన ఉన్నత-స్థాయి వ్యూహాత్మక నిర్ణయాలుగా మారుతాయి. కొంతమందికి పైన వివరించిన సమస్యలు ఉండవు; సాధారణంగా, ప్రొఫెషనల్ సేల్స్ వ్యక్తులకు అవి ఉండవు. పదాలతో తమ జీవనం సాగించే ఈ ప్రజలందరూ - ప్రసిద్ధ గాయకులు, కవులు, మత పెద్దలు మరియు రాజకీయ నాయకులు, వారు ఎప్పుడూ ఏదో ఒకటి చెప్పాలి. వారికి అలాంటి సమస్యలు లేవు, కానీ నాకు ఉన్నాయి.

ఆండ్రూ: ఇది... ఊహించనిది. చాలా బాగుంది, మేము ఇప్పటికే చాలా మాట్లాడాము మరియు ఈ ఇంటర్వ్యూని ముగించే సమయం వచ్చింది. మేము ఖచ్చితంగా సమావేశంలో కలుస్తాము మరియు ఈ సంభాషణను కొనసాగించగలుగుతాము. హైడ్రాలో కలుద్దాం!

సెయింట్ పీటర్స్‌బర్గ్‌లో జూలై 2019-11, 12లో జరిగే హైడ్రా 2019 సమావేశంలో మీరు క్లిఫ్‌తో మీ సంభాషణను కొనసాగించవచ్చు. అతను నివేదికతో వస్తాడు "ది అజుల్ హార్డ్‌వేర్ ట్రాన్సాక్షనల్ మెమరీ అనుభవం". టిక్కెట్లు కొనుగోలు చేయవచ్చు అధికారిక వెబ్‌సైట్‌లో.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి