ఘటనా వలయం: ఏక సూత్ర నిర్వహణ మాయాజాలం
ఘటనా వలయం మరియు పిలుపుల పేర్పు ఎలా పనిచేస్తాయో PodThis లో తెలుసుకోండి. ఒకే ప్రక్రియ దారంతో వేలాది అభ్యర్థనలను నిర్వహించే సాంకేతిక రహస్యం మీకోసం.
ఒకే క్షణంలో వేలాది మంది వినియోగదారులు ఒకే సేవా యంత్రాన్ని ఆశ్రయించినప్పుడు వ్యవస్థ కుప్పకూలిపోకుండా ఒకే ఒక్క ప్రక్రియ దారంతో ఎలా పనిచేస్తుందో ఈ భాగంలో PodThis వేదికగా రవి మరియు లక్ష్మి వివరిస్తున్నారు. పిలుపుల పేర్పు, ఘటనా వలయం యొక్క వివిధ దశలు, సూక్ష్మ మరియు సాధారణ వరుసల మధ్య ఉండే ప్రాధాన్యత తేడాలు, మరియు ఘటనా ప్రసారకం యొక్క అంతర్గత నిర్మాణాన్ని మేము క్షుణ్ణంగా పరిశీలించాము. అసమకాలిక సంకేత నియమావళిని లోతుగా అర్థం చేసుకోవడానికి మరియు మీ సేవా యంత్రం స్తంభించిపోకుండా అత్యంత వేగంగా నడపడానికి ఈ సాంకేతిక పరిజ్ఞానం ప్రతి ఒక్కరికీ ఎంతో అవసరం. సాంప్రదాయ సేవా యంత్రాలు వేలాది దారాలతో చేసే పనిని ఈ సరికొత్త వ్యవస్థ కేవలం ఒకే ఒక్క దారంతో ఎలా అద్భుతంగా సాధించగలుగుతోంది?
Chapters
PodThis మరియు నాతో కలిసి నేర్చుకోండి కార్యక్రమానికి స్వాగతం. ఒక పెద్ద కార్యాలయంలో పదివేల మంది మనుషులు ఒకేసారి వచ్చారనుకోండి. సాధారణంగా వారందరికీ సేవలు అందించడానికి పదివేల మంది గుమస్తాలు ఉండాలి. కానీ అక్కడ ఉన్నది ఒకే ఒక్క గుమస్తా. ఆశ్చర్యకరంగా ఎవరూ వేచి ఉండాల్సిన అవసరం లేకుండా ఆ ఒక్కడే అందరి పనులనూ క్షణాల్లో పూర్తి చేస్తున్నాడు.
ఒక్కడే అంత మందిని ఎలా సంభాళిస్తాడు? ఇది వినడానికి నమ్మశక్యంగా లేదు. నా పేరు రవి. కంప్యూటర్ సర్వర్లలో జరిగే ఈ అద్భుతమైన నిర్వహణా పద్ధతి గురించే ఈ రోజు మనం మాట్లాడుకుందాం. నేను లక్ష్మిని. ఒకే దారం వేలాది పనులను ఏమాత్రం తడబడకుండా ఎలా మోస్తుందో తెలుసుకోవాలని నాకు కూడా చాలా ఆసక్తిగా ఉంది. నిజమే.
అక్కడ చిన్న పొరపాటు జరిగినా మొత్తం వ్యవస్థ అంతా ఆగిపోతుంది. ఆ రహస్యాన్ని మనం ఐదు పాఠాలుగా విభజించి నేర్చుకుందాం. మొదట ఒకే పనివరుసతో వేలాది మంది వినియోగదారులను ఎలా నిర్వహించాలో చూద్దాం. ఆ తర్వాత వి ఎనిమిది ఇంజిన్ లోని పిలుపుల వరుస గురించి మరియు పనుల చక్రం గురించి తెలుసుకుందాం.
అలాగే చిన్న పనుల విభజన మరియు పనుల సంకేతాల ప్రాముఖ్యతను కూడా వివరంగా చర్చిద్దాం.
ఒకే థ్రెడ్తో వేలాది యూజర్లను హ్యాండిల్ చేయడం ఎలా?
ఒకే థ్రెడ్తో వేలాది యూజర్లను హ్యాండిల్ చేయడం ఎలా?
ఒకే క్షణంలో వేలాది మంది వినియోగదారులు మీ సేవా యంత్రాన్ని ఒకేసారి ఆశ్రయిస్తే ఏం జరుగుతుందో ఊహించండి. ఉదాహరణకు ఒకేసారి వెయ్యి మంది ఒక సామాజిక మాధ్యమంలో తమ వార్తా విభాగాన్ని తెరిచారనుకోండి. ప్రతి అభ్యర్థన దత్తాంశ నిధి నుండి సమాచారాన్ని చదవాలి. కొంత సమయం వేచి ఉండాలి. ఆపై తిరిగి సమాధానాన్ని పంపాలి.
సాధారణంగా అయితే ప్రతి ఒక్కరికీ ఒక ప్రత్యేకమైన పని దారాన్ని కేటాయించాల్సి ఉంటుంది కదా. పాత కాలపు సేవా యంత్రాలు చేసేది ఇదే. కానీ కేవలం ఒకే ఒక్క దారంతో ఈ వేలాది అభ్యర్థనలను నిర్వహించవచ్చంటే నేను అస్సలు నమ్మలేను. ఒకే ఒక్క దారం అంత భారాన్ని మోస్తూ కుప్పకూలిపోకుండా ఎలా ఉంటుంది? అది సాధ్యమే కాదు. మీ అనుమానం సహజమైందే.
కానీ పాత పద్ధతిలోని సేవా యంత్రాలు ఎలా పనిచేస్తాయో ఒకసారి లోతుగా చూద్దాం. అవి ప్రతి వినియోగదారుడికి ఒక ప్రత్యేక దారాన్ని కేటాయిస్తాయి. ఆ దారం దత్తాంశ నిధి నుండి సమాచారం వచ్చే వరకు ఏ పనీ చేయకుండా అలానే నిశ్చలంగా కూర్చుంటుంది. దీనివల్ల కంప్యూటర్ లోని నిల్వ సామర్థ్యం చాలా వరకు వృధా అవుతుంది.
సాంప్రదాయ సేవా యంత్రాలు వందలాది— కాదు, వేలాది దారాలను సృష్టిస్తాయి. కానీ వాటిలో ఎక్కువ భాగం కేవలం ఎదురుచూస్తూ సమయాన్ని వృధా చేస్తాయి. పైగా, ఈ దారాలన్నీ ఒకదానితో ఒకటి పోటీ పడుతూ కంప్యూటర్ పై మరింత భారాన్ని పెంచుతాయి. హ్మ్. దీన్ని ఎలా చెబితే బాగుంటుందో ఆలోచిస్తున్నాను...
ఒకే దారం ఉన్నప్పుడు ఒక వినియోగదారుడి పని ఆలస్యమైతే, మిగిలిన వారందరూ వెనుక నిలబడాలి కదా? నాకేమో ఇది వింతగా అనిపిస్తోంది. ఆ ఒక్క దారమే దత్తాంశ నిధి కోసం ఎదురుచూస్తూ కూర్చుంటే మొత్తం వ్యవస్థ స్తంభించిపోదా? మిగతా తొమ్మిది వందల తొంభై తొమ్మిది మంది వినియోగదారులు ఆగిపోవాల్సిందేనా? అక్కడే అసలైన మలుపు ఉంది.
ఈ కొత్త వ్యవస్థలో ఆ ప్రధాన దారం దత్తాంశ నిధి నుండి సమాచారం కోసం ఏమాత్రం వృధాగా ఎదురుచూడదు. అది కేవలం అభ్యర్థనను పంపుతుంది. వెంటనే తదుపరి వినియోగదారుడి వైపు వెళ్ళిపోతుంది. అది ఒక్క క్షణం కూడా ఖాళీగా కూర్చోదు.
ఒక్క నిమిషం ఆగండి— ఆ అభ్యర్థన వెళ్ళినప్పుడు ఎవరో ఒకరు ఆ సమాచారాన్ని పట్టుకుని ఉండాలి కదా? ఒకే దారం ఉన్నప్పుడు, ఆ పని పూర్తయ్యే వరకు వేచి ఉండే బాధ్యత ఎవరిది? ఎవరో ఒకరు ఎదురుచూడకుండా పని ఎలా పూర్తవుతుంది? ఇది వినడానికి బాగున్నా, ఆచరణలో ఎలా సాధ్యమో నాకు అస్సలు అర్థం కావడం లేదు. దీన్ని ఒక వంటశాల ఉదాహరణతో అర్థం చేసుకుందాం.
ఒక పెద్ద వంటశాలలో ఒకే ఒక ప్రధాన వంటవాడు ఉన్నాడనుకోండి. అతను పొయ్యి మీద నీరు పెట్టాడు. ఆ నీరు మరిగే వరకు అతను అక్కడే ఏ పనీ చేయకుండా నిలబడి ఉంటాడా? లేదు కదా. ఆ నీరు మరిగే లోపు అతను వెళ్ళి కూరగాయలు కోయడం లేదా మరో వంటకం సిద్ధం చేయడం లాంటి తదుపరి పనిని మొదలుపెడతాడు. ఇక్కడ కూడా అంతే.
దత్తాంశ నిధి పనిని వెనుక ఉన్న సహాయక వ్యవస్థలకు అప్పగించి, ఈ ప్రధాన దారం తదుపరి వినియోగదారుడి అభ్యర్థనను స్వీకరిస్తుంది. అబ్బా, ఈ ఉదాహరణ చాలా బాగుంది. అంటే ఆ వంటవాడు ఒక్క క్షణం కూడా ఖాళీగా ఉండకుండా అందరికీ వంటకాలు అందిస్తున్నాడన్నమాట. ఒక పని పూర్తయ్యే వరకు ఎదురుచూడకుండానే మరో పనిని మొదలుపెట్టడం అనేది చాలా అద్భుతమైన ఆలోచన.
దీనివల్ల సమయం, శ్రమ రెండూ కలిసివస్తాయి. కానీ నిజంగా ఒకే ఒక్క మనిషి ఇంత మందిని ఎలా తట్టుకోగలడు? ఈ విధానం వల్ల వేలాది మంది వినియోగదారులు ఏకకాలంలో సేవలందుకుంటున్నా, ఆ ప్రధాన దారం అస్సలు అలసిపోదు. సాంప్రదాయ పద్ధతిలో లాగా వేలాది దారాలను సృష్టించి జ్ఞాపకశక్తిని వృధా చేసే పనే లేదు. అందుకే ఈ సరికొత్త సాంకేతికత ఇంత వేగంగా విస్తరించింది.
అయితే, ఇదంతా వినడానికి బాగానే ఉన్నా ఇందులో ఒక పెద్ద చిక్కు కూడా ఉంది. నిజమే, lifestyle లో ఏదీ అంత సులభంగా దొరకదు కదా మన PodThis వినేవారికి కూడా ఇదే అనుమానం వచ్చే ఉంటుంది. మరి ఈ వంటవాడు ఒకేసారి ఇన్ని పనులు చేస్తున్నప్పుడు, ఏ పని ఎక్కడ ఉందో ఎలా గుర్తుపెట్టుకుంటాడు?
V8 కాల్ స్టాక్ మరియు సింక్రోనస్ కోడ్ ఎగ్జిక్యూషన్
V8 కాల్ స్టాక్ మరియు సింక్రోనస్ కోడ్ ఎగ్జిక్యూషన్
చాలా మంది ఒకే ఒక దారంతో పనిచేసే ఈ వ్యవస్థ చాలా నిదానంగా ఉంటుందని అనుకుంటారు. కానీ అది ఒక పెద్ద అపోహ మాత్రమే. PodThis లో మనం గత భాగంలో చెప్పుకున్నట్లు, ఒకే దారం వేలాది అభ్యర్థనలను ఎలా నిర్వహిస్తుందో అర్థం చేసుకోవాలి. అందుకోసం ముందు ఆ దారం లోపల అసలు ఏం జరుగుతుందో లోతుగా చూడాలి. ఆ రహస్యమే వి-ఎనిమిది యంత్రంలోని పిలుపుల పేర్పు.
ఆగు రవి, పిలుపుల పేర్పు అంటే ఏమిటి? వి-ఎనిమిది యంత్రం అంటే ఏదో కారు ఇంజిన్ లాగా వినిపిస్తోంది. నాకు ఇది ఎలా పనిచేస్తుందో ఊహించుకోవడం కొంచెం కష్టంగా ఉంది. అసలు ఒకే దారం అంటే ఒకేసారి ఒకే పని కదా? మరి అది అంత వేగంగా ఎలా పనిచేస్తుంది? వి-ఎనిమిది అనేది మన ఆదేశాలను కంప్యూటర్ అర్థం చేసుకునే యంత్ర భాషలోకి మార్చే ఒక సాధనం.
ఈ పిలుపుల పేర్పును నువ్వు ఒక ప్లేట్ల దొంతరలా ఊహించుకో. నువ్వు ఒక పనిని చేయమని చెప్పినప్పుడు, ఆ పని ఒక చట్రంలా ఆ దొంతరపై చేరుతుంది. ఆ పని పూర్తయ్యాక దాన్ని పై నుండి తొలగిస్తారు. అంటే ఒక క్షణంలో ఒకే ఒక పని మాత్రమే జరుగుతుంది. దీనినే మనం ఏక-దారపు విధానం అంటాం. అంటే మనం వంట గదిలో ప్లేట్లు ఒకదానిపై ఒకటి పెట్టినట్టు అన్నమాట.
కానీ, ఒకవేళ నేను ఒక పనిని పూర్తి చేయకుండానే ఇంకో పని చేయమని అడిగితే ఏమవుతుంది? అంటే ఒక విధి లోపల ఇంకో విధిని పిలిస్తే పరిస్థితి ఏంటి? ఆగు, అప్పుడు ఆ దొంతర ఎత్తు పెరుగుతూనే ఉంటుందా? ఒక విధి లోపల ఇంకోటి పిలిస్తే, మొదటి పని పూర్తి కాకముందే రెండో దాన్ని దాని మీద చేరుస్తుంది. ఉదాహరణకు, ఒక సంఖ్యను వర్గం చేసి ముద్రించాలనుకో.
ముందు 'ముద్రించు' అనే పని పేర్పు మీదకు వస్తుంది. అది 'వర్గం చేయు' అనే పనిని పిలుస్తుంది. అది మళ్ళీ 'గుణించు' అనే పనిని పిలుస్తుంది. ఇలా పనులు ఒకదానిపై ఒకటి చేరుతూ పోతాయి. గుణించడం పూర్తయ్యాక ఆ చట్రం తొలగిపోతుంది. తర్వాత వర్గం చేసే పని పూర్తవుతుంది. చివరగా ముద్రించే పని పూర్తవుతుంది. ఇది ఎంత వేగంగా జరుగుతుందంటే మన కంటికి కూడా తెలియదు.
అబ్బో, అంటే ఇది ఒక క్రమశిక్షణ ఉన్న సైన్యంలా పనిచేస్తుందన్నమాట. కానీ నాకు ఒక అనుమానం ఉంది. ఒకవేళ ఆ దొంతరకి ఒక పరిమితి ఉంటే ఏమవుతుంది? అంటే నేను పొరపాటున ఒక పనిని ఆపకుండా అదే పనిని మళ్ళీ మళ్ళీ చేయమని చెబితే ఏమవుతుంది? ఆ దొంతర పడిపోదా? అదే ఇక్కడ ప్రమాదకరమైన విషయం. దీనినే మనం 'పేర్పు పరిమితి దాటిపోవడం' అంటాం.
ఒక విధి తనను తానే మళ్ళీ మళ్ళీ పిలుచుకుంటూ పోతే, ఆ దొంతరలో స్థలం అయిపోతుంది. అప్పుడు యంత్రం ఆగిపోయి ఒక లోపాన్ని చూపిస్తుంది. మనం ఎప్పుడైనా आदेशాలు రాసేటప్పుడు వచ్చే ఆ పొడవైన జాబితా ఉంది చూడు, అది నిజానికి ఆ క్షణంలో ఆ పేర్పు ఎలా ఉందో చూపించే ఒక అడుగుజాడ. అది చూసి మనం ఎక్కడ తప్పు జరిగిందో తెలుసుకోవచ్చు. అంటే ఆ జాబితా మనకు దారి చూపే పటం లాంటిది.
కానీ రవి, నువ్వు చెప్పేది వినడానికి బాగుంది. ఒకే దారం మీద ఇన్ని పనులు యంత్ర భాషలో జరిగినా, ఏదైనా ఒక పని చాలా సమయం తీసుకుంటే పరిస్థితి ఏంటి? ఒకవేళ ஏதாவது భారీ లెక్కలు చేయాల్సి వస్తే మిగతా పనులన్నీ ఆగిపోవా? ఈ పిలుపుల పేర్పు ఖాళీగా ఉన్నప్పుడు మాత్రమే వేరే పనులకు అవకాశం దొరుకుతుంది. అంటే బయట నుండి వచ్చే కొత్త అభ్యర్థనలను అది స్వీకరిస్తుంది.
ఒకవేళ మనం ఒక భారీ పనిని ఈ పేర్పు మీద పెట్టి కూర్చుంటే, మిగతా వినియోగదారులు అందరూ ఏమవుతారు? ఆ దారం అక్కడే ఆగిపోతుందా? లేక వేరే మార్గం ఉందా? ఒకవేళ ఆ దారం స్తంభించిపోతే, మనం చెప్పుకున్న ఆ వేలాది మంది వినియోగదారుల పరిస్థితి ఏంటి? ఈ చిక్కుముడిని విప్పేదే మనం తర్వాత చూడబోయే 'ఘటనల చక్రం'.
ఈవెంట్ లూప్ మరియు లిబ్-యువి బ్యాక్గ్రౌండ్ ఆర్కిటెక్చర్
ఈవెంట్ లూప్ మరియు లిబ్-యువి బ్యాక్గ్రౌండ్ ఆర్కిటెక్చర్
ఒక రద్దీగా ఉండే హోటల్ వంటగది మధ్యలో మీరు నిలబడి ఉన్నారని ఊహించుకోండి. అక్కడ వందలాది ఆర్డర్లు ఒకేసారి వస్తున్నాయి. కానీ వండడానికి మాత్రం ఒకే ఒక్క ప్రధాన వంటవాడు ఉన్నాడు. గత భాగంలో మనం సమకాలిక కోడ్ గురించి మాట్లాడుకున్నాం కదా? దాన్ని నిర్వహించే ప్రధాన పిలుపుల పేర్పు కూడా సరిగ్గా ఇలాంటి ఒకే ఒక్క పోగుతో నడిచే వంటవాడి లాంటిదే.
ఒకవేళ ఆ వంటవాడు ఒక పెద్ద పాత్రలో నీళ్లు పోసి, అవి మరిగే వరకు ఏపనీ చేయకుండా అక్కడే నిలబడి ఉంటే ఏమవుతుంది? మొత్తం వంటగది ఆగిపోతుంది కదా? ఇక్కడే మనకు సహాయం చేయడానికి ఒక అద్భుతమైన యంత్రాంగం తెరవెనుక పనిచేస్తుంది. ఇది వింటుంటే నాకు మొన్న మా ఇంట్లో జరిగిన ఒక చిన్న సంఘటన గుర్తొస్తోంది.
నేను అంతర్జాలం నుండి ఒక పెద్ద దస్త్రాన్ని తీసుకుంటూ, అదే సమయంలో నా పరికరంలో వేరే వ్యాసాన్ని చదువుదామని ప్రయత్నించాను. అప్పుడు నా తెర కాసేపు కదలకుండా నిలిచిపోయింది. నిజంగా ఈ ఒకే ఒక్క దారంతో నడిచే వ్యవస్థలో అంత పెద్ద నెమ్మదైన పని వస్తే, అది మిగతా వినియోగదారుల అభ్యర్థనలను పూర్తిగా ఆపేయదా? ఖచ్చితంగా ఆ ప్రమాదం ఉంది.
కానీ నోడ్ ఆ నెమ్మదైన పనులను తన ప్రధాన పోగు ద్వారా చేయించదు. ఇక్కడే లిబ్-యువి అనే ప్రత్యేక సి-ప్లస్-ప్లస్ సహాయక యంత్రాంగం రంగంలోకి దిగుతుంది. దస్త్రాలను చదవడం లేదా సమాచార నిధి నుండి సమాచారాన్ని సేకరించడం వంటి క్లిష్టమైన పనులు వచ్చినప్పుడు, నోడ్ వాటిని వెనుక భాగంలో ఉన్న నాలుగు సహాయక పోగుల సమూహానికి అప్పగిస్తుంది.
ఆ పనులు అక్కడ జరుగుతున్నంత సేపు మన ప్రధాన వంటవాడు ఖాళీగానే ఉంటాడు. అంటే జావాస్క్రిప్ట్ ప్రధాన దారం, తరువాతి అభ్యర్థనలను తీసుకోవడానికి సిద్ధంగా ఉంటుందన్నమాట. సరే, ఆ వెనుక ఉన్న సహాయక పోగులు తమ పనిని పూర్తి చేశాయనుకుందాం. కానీ ఆ పూర్తి అయిన సమాచారం మళ్లీ ప్రధాన దారానికి ఎలా చేరుతుంది?
ఒకవేళ అవి నేరుగా వచ్చి ప్రస్తుతం నడుస్తున్న పనుల మధ్యలో దూరిపోతే, మొత్తం క్రమం గందరగోళంగా మారదా? నువ్వు సరిగ్గా అసలైన సమస్యను గుర్తించావు. అవి నేరుగా ప్రధాన పేర్పులోకి వెళ్లలేవు. అలా వెళ్తే ప్రస్తుతం నడుస్తున్న కోడ్ పాడైపోతుంది. అందుకే, వెనుక భాగంలో పని పూర్తయిన తర్వాత వచ్చే తిరుగు పిలుపులన్నీ ఒక ప్రత్యేకమైన వేచి ఉండే వరుసలో చేరతాయి.
ఇక్కడే మన ఘటనా వలయం తన పనిని ప్రారంభిస్తుంది. ఇది నిరంతరం వృత్తాకారంలో తిరిగే ఒక చక్రం లాంటిది. ఇది ఎప్పుడూ ఒకే ఒక్క విషయాన్ని గమనిస్తూ ఉంటుంది. అదేంటంటే, ప్రధాన పిలుపుల పేర్పు ఖాళీగా ఉందా లేదా అని. ఆ పేర్పు పూర్తిగా ఖాళీ అయినప్పుడు మాత్రమే, ఈ వేచి ఉండే వరుసలో ఉన్న మొదటి తిరుగు పిలుపును తీసుకుని ప్రధాన దారానికి అందిస్తుంది.
అంటే, ప్రధాన కోడ్ నడుస్తున్నంత సేపు ఈ ఘటనా వలయం ఎంతటి ముఖ్యమైన తిరుగు పిలుపునైనా లోపలికి పంపలేదు అన్నమాట. దీనివల్లే అనుకుంటా, మనం కాలపరిమితిని సున్నా క్షణాలుగా నిర్ణయించినా ఆ పని వెంటనే జరగదు. నేను మొన్న ఒక కోడ్లో సమయాన్ని సున్నా అని పెట్టినా, అది దాని కింద ఉన్న సాధారణ కోడ్ అంతా తెరపై కనిపించిన తర్వాతే చివర్లో వచ్చింది.
నిజానికి అది చాలా మందిని ఆశ్చర్యపరిచే విషయమే. సున్నా క్షణాలు అంటే ఆ పని ఇప్పుడే జరిగిపోవాలని కాదు. ప్రస్తుతం నడుస్తున్న సమకాలిక కోడ్ అంతా పూర్తయి, ప్రధాన పేర్పు ఖాళీ అయిన తర్వాత వీలైనంత త్వరగా జరగాలని అర్థం. ఆ సున్నా క్షణాల తిరుగు పిలుపు కూడా మొదట ఆ వేచి ఉండే వరుసలోనే కూర్చోవాలి. PodThis లో మనం గుర్తుంచుకోవాల్సిన ముఖ్యమైన సూత్రం ఇదే.
అంతా బాగానే ఉంది రవి, కానీ నా మనసులో ఒక చిన్న సందేహం ఉంది. ఒకవేళ ఆ వేచి ఉండే వరుసలో ఒకేసారి రెండు వేర్వేరు పనులు సిద్ధంగా ఉంటే ఏం జరుగుతుంది? అంటే, ఒకవైపు వాగ్దానాలకు సంబంధించిన తిరుగు పిలుపు, మరోవైపు కాలపరిమితికి సంబంధించిన తిరుగు పిలుపు ఉన్నాయనుకుందాం. అప్పుడు ఈ ఘటనా వలయం దేనికి ముందు ప్రాధాన్యత ఇస్తుంది? దేన్ని ముందుగా లోపలికి పంపుతుంది?
మైక్రోటాస్క్స్ వర్సెస్ మాక్రోటాస్క్స్ మధ్య ప్రాధాన్యత తేడాలు
మైక్రోటాస్క్స్ వర్సెస్ మాక్రోటాస్క్స్ మధ్య ప్రాధాన్యత తేడాలు
ఒక కేంద్ర సమాచార వ్యవస్థ సెకనుకు లక్షలాది అభ్యర్థనలను స్వీకరిస్తుంది. కానీ కేవలం ఒకే ఒక్క చిన్న పొరపాటు వల్ల మిగిలిన పనులన్నీ పూర్తిగా ఆగిపోతాయి. ఈ వాస్తవం ఎవరినైనా ఆశ్చర్యపరుస్తుంది. మనం క్రితం భాగంలో ఈవెంట్ లూప్, లిబ్-యువి బ్యాక్గ్రౌండ్ ఆర్కిటెక్చర్ గురించి చర్చించుకున్నాం. దాని ప్రకారం పనులన్నీ ఒకే వరుసలో నిలబడతాయని అనుకుంటే పొరపాటే.
నిజానికి అక్కడ ఒకే వరుస ఉండదు. విభిన్న ప్రాధాన్యతలు ఉన్న వేర్వేరు మార్గాలు ఉంటాయి. పనులన్నీ పూర్తిగా ఆగిపోతాయా? ఇది వింటుంటేనే నాకు భయం వేస్తోంది. అంత పెద్ద వ్యవస్థ ఒక్కసారిగా అలా ఎలా స్తంభించిపోతుంది? అక్కడ వేచి ఉండే వరుసలలో రెండు ముఖ్యమైన రకాలు ఉన్నాయి. మొదటిది అత్యంత ముఖ్యమైన నిశ్చయపత్రాల సూక్ష్మ వరుస. దీనినే మనం ప్రామిసెస్ కోసం వాడతాము.
రెండవది సాధారణ సమయ సూచికల వరుస. దీనిలో కాలపరిమితి ఉన్న పనులు వేచి ఉంటాయి. ఘటనా వలయం ఈ రెండింటినీ ఒకేలా చూడదు. ఆగు రవి, నాకు ఇక్కడ ఒక సందేహం వస్తోంది. వేచి ఉండే వరుసలో ఒకే సమయంలో రెండు పనులు సిద్ధంగా ఉంటే ఘటనా వలయం దేనికి ముందు ప్రాధాన్యత ఇస్తుంది? రెండూ ఒకేసారి జరగడానికి వీల్లేదు కదా. ఎందుకంటే మన జావాస్క్రిప్ట్ కేవలం ఒకే ఒక్క పోగుపై నడుస్తుంది.
ఇక్కడ ఒక ముఖ్యమైన నియమం ఉంది. ప్రతి సాధారణ పని ముగిసిన వెంటనే ఘటనా వలయం ఆ సూక్ష్మ వరుసలోని పనులన్నింటినీ పూర్తిగా ఖాళీ చేస్తుంది. అంటే నిశ్చయపత్రాల పనులు ఎల్లప్పుడూ సాధారణ పనుల కంటే ముందే పూర్తవుతాయి. సమయ సూచికలు ఎంత ముందుగా వచ్చినా నిశ్చయపత్రాలు వాటిని దాటుకుని ముందుకు వెళ్తాయి. నేను దీన్ని పూర్తిగా అంగీకరించడం లేదు.
ఒకవేళ సమయ సూచిక సున్నా మిల్లీసెకన్ల కాలంతో ముందుగా నమోదైతే అది కదా ముందు నడవాలి? తర్వాత వచ్చిన నిశ్చయపత్రం దాన్ని దాటి ముందుకు వెళ్లడం వల్ల క్రమం తప్పుతుంది. ఇది వ్యవస్థ పనితీరును దెబ్బతీస్తుంది. నీ వాదన వినడానికి బాగుంది కానీ అంతర్గత సూత్రం వేరుగా ఉంటుంది. నిశ్చయపత్రాలు అనేవి ప్రస్తుత కార్యాచరణకు తక్షణ కొనసాగింపులు.
అందుకే ఘటనా వలయం వీటికి అగ్ర ప్రాధాన్యత ఇస్తుంది. సాధారణ పనుల కంటే ముందే ఈ సూక్ష్మ వరుసను పూర్తిగా ఖాళీ చేయడం దీని నైజం. ఒకవేళ ఆ సూక్ష్మ వరుసలో పనులు ఎప్పటికీ అయిపోకపోతే అప్పుడేమవుతుంది? ఒక నిశ్చయపత్రం ముగిసేలోపు మరొకటి, అది ముగిసేలోపు ఇంకొకటి అలా వస్తూనే ఉంటే పరిస్థితి ఏంటి? ఇక్కడే మనం మాట్లాడుకున్న ఆ ప్రమాదం పొంచి ఉంది.
సూక్ష్మ వరుసలో నిరంతరాయంగా పనులు చేరుతూనే ఉంటే సాధారణ పనులకు అసలు సమయమే దొరకదు. దీనివల్ల వ్యవస్థ పూర్తిగా స్తంభించిపోతుంది. దీనినే సాంకేతిక భాషలో ఆకలి చావు అంటారు. ముఖ్యమైన పనులకే ఎక్కువ ప్రాధాన్యత ఇవ్వడం వల్ల సాధారణ పనులు అసలు జరగకుండా ఆగిపోతాయి. అంటే మనం రాసే కోడ్ వల్ల సమాచార వ్యవస్థకు మొత్తం పక్షవాతం వచ్చినట్టు అవుతుందన్నమాట.
ఒక చిన్న పునరావృత లూప్ ద్వారా నిశ్చయపత్రాలను సృష్టిస్తూ పోతే చాలు. వెనుక ఉన్న వేలాది వినియోగదారుల అభ్యర్థనలు అక్కడికక్కడే నిలిచిపోతాయి. నేను ఊహించిన దానికంటే ఇది చాలా తీవ్రమైన విషయం. ఈ వరుసలను నిర్వహించేటప్పుడు చాలా జాగ్రత్తగా ఉండాలి. అయితే ఈ రెండింటి కంటే ముందుగా జరగాల్సిన పనుల కోసం మరో అత్యవసర మార్గం కూడా ఉంది.
దాన్ని తదుపరి క్షణం అనే ప్రత్యేక విధి అంటారు. ఇది సూక్ష్మ వరుస కంటే కూడా వేగంగా పనిచేస్తుంది. ప్రస్తుత పని ముగిసిన వెంటనే దూసుకుపోతుంది. బాబోయ్, ఇన్ని వరుసలా! కానీ ఈ అంతర్గత యంత్రాంగం ఇంత అద్భుతంగా పనిచేస్తున్నప్పుడు మనం సొంతంగా ఇలాంటి సంఘటనలను ఎలా సృష్టించగలం? అసలు మన కోడ్లో వీటిని ఎలా నియంత్రించాలో నాకు ఇంకా అర్థం కావడం లేదు.
ఆ ప్రశ్నే మనల్ని తదుపరి అడుగు వైపు నడిపిస్తుంది. ఈ వ్యవస్థను మనం సొంతంగా శాసించడమే కాకుండా మనకు కావలసినట్టుగా సంఘటనలను సృష్టించుకునే వీలుంది. ఈ అంతర్గత క్రమశిక్షణను అర్థం చేసుకోవడం ద్వారా మరింత విస్తృతమైన సమాచార ప్రసార నమూనాలను మనం నిర్మించవచ్చు. ఇది కేవలం సాంకేతికతకు మాత్రమే పరిమితం కాదు. మొత్తం సాఫ్ట్వేర్ నిర్మాణ శైలినే మారుస్తుంది.
ఈవెంట్ ఎమిటర్ మరియు పబ్-సబ్ ప్యాటర్న్ ప్రాముఖ్యత
ఈవెంట్ ఎమిటర్ మరియు పబ్-సబ్ ప్యాటర్న్ ప్రాముఖ్యత
ఒక పెద్ద వంటశాల గురించి ఆలోచించండి. అక్కడ ప్రధాన వంటవాడు ప్రతి వంటకం సిద్ధమైనప్పుడల్లా అందరికీ స్వయంగా చెప్పలేడు. అలా చెప్తే అక్కడ గందరగోళం ఏర్పడుతుంది. దానికి బదులుగా ఒక చిన్న గంట మోగిస్తే, ఆ ధ్వని విని ఎవరి పని వారు చేసుకుంటారు. మనం క్రితం విభాగంలో చర్చించుకున్న పనుల వరుసక్రమంలా కాకుండా, ఈ పద్ధతి మనకు సొంతంగా సంఘటనలను సృష్టించే శక్తిని ఇస్తుంది.
ఈ అంతర్గత యంత్రాంగం ఇంత అద్భుతంగా పనిచేస్తున్నప్పుడు, మనం సొంతంగా ఇలాంటి సంఘటనలను ఎలా సృష్టించగలమనే ప్రశ్నకు సమాధానమే ఘటనా ప్రసారకం. దీని ద్వారా మనం సొంతంగా సంఘటనలను సృష్టించి, సమాచారాన్ని పంపే మరియు స్వీకరించే పద్ధతిని వాడుకోవచ్చు. రవి, మీరు చెప్పేది వినడానికి బాగుంది కానీ నాకొక పెద్ద అనుమానం వస్తోంది.
మనం ఈ పద్ధతిని వాడుతున్నప్పుడు, ఆ ఒక్క దారిపైనే భారం మరియు ఒత్తిడి మరింత పెరగదా? మనం ఒకే సంఘటనకు చాలా పనులను జోడిస్తూ పోతే, అది మిగిలిన పనుల వరుసక్రమాన్ని పూర్తిగా ఆలస్యం చేయదా? చాలా మంచి ప్రశ్న లక్ష్మి. నిజానికి, ఘటనా ప్రసారకం అనేది ఒక సంఘటన జరిగినప్పుడు దానికి సంబంధించిన పనులను తక్షణమే పిలుస్తుంది.
దీనివల్ల ప్రధాన కోడ్లో ఎలాంటి మార్పులు చేయకుండానే కొత్త పనులను సులభంగా జోడించవచ్చు. ఉదాహరణకు, ఒక కొత్త వినియోగదారుడు చేరినప్పుడు, మనం ఆ ప్రధాన భాగాన్ని మార్చకుండానే ఒక కొత్త పనిని చేర్చి స్వాగత సందేశం పంపవచ్చు. ఆగండి, ఇక్కడే నాకు పెద్ద సందేహం ఉంది. ఒకవేళ ఆ కొత్తగా చేర్చిన పని చాలా నెమ్మదిగా సాగితే, అది మొత్తం వ్యవస్థను నిలిపివేస్తుంది కదా?
ఎందుకంటే ఇది ఒకదాని తర్వాత ఒకటి జరుగుతుందని మీరే చెప్పారు. అప్పుడు మనం ఆశించిన వేగం ఎక్కడ ఉంటుంది? నువ్వు చెప్పింది అక్షరాలా నిజం లక్ష్మి. ఆ విషయాన్ని నేను స్పష్టం చేయాలి. ఘటనా ప్రసారకం పనులను ఒకదాని తర్వాత ఒకటిగా నడుపుతుంది. ఒకవేళ అందులో ఏదైనా ఒక పని ఎక్కువ సమయం తీసుకుంటే, అది మిగిలిన పనులను ఆపేస్తుంది.
అందుకే మనం అక్కడ కేవలం పనులను ప్రారంభించి, ఎక్కువ సమయం తీసుకునే పనులను వేరే విభాగానికి అప్పగించాలి. అంటే ఇది కేవలం ఒక ప్రకటన మాత్రమే చేస్తుంది, కానీ పనుల బాధ్యతను ఇది నేరుగా మోయదు. అయితే మనం ఎన్ని పనులనైనా ఇలా ఒకే సంఘటనకు జోడించుకుంటూ పోవచ్చా? దానికి ఏవైనా పరిమితులు ఉన్నాయా? కచ్చితంగా పరిమితులు ఉన్నాయి.
ఒకే సంఘటనను గమనించడానికి పది కంటే ఎక్కువ పనులను చేరిస్తే, మెమరీ వృధా అవుతోందని హెచ్చరిక వస్తుంది. ఇది ఒక రకమైన రక్షణ కవచం లాంటిది. ఎందుకంటే మనం తెలియకుండానే పనులను జోడిస్తూ పోతే, జ్ఞాపకశక్తి నిండిపోయి వ్యవస్థ నెమ్మదిస్తుంది. పది అనే పరిమితి పెట్టడం చాలా మంచిదైంది.
లేకపోతే పెద్ద పెద్ద కార్యక్రమాలలో ఎక్కడ తప్పు జరుగుతుందో కనిపెట్టడం అసాధ్యం అవుతుంది. కానీ ఒకవేళ ఆ పనులలో ఏదైనా లోపం వస్తే పరిస్థితి ఏమిటి? ఇక్కడే మనం చాలా జాగ్రత్తగా ఉండాలి. ఎప్పుడైనా లోపం జరిగినప్పుడు దానిని పట్టుకునే ఏర్పాటు లేకపోతే, మొత్తం ప్రక్రియ కుప్పకూలిపోతుంది. అవును, ఒక చిన్న లోపం వల్ల మొత్తం కేంద్ర వ్యవస్థ ఆగిపోతుంది.
అందుకే లోపాలను పట్టుకునే ప్రత్యేక పద్ధతులను ఎల్లప్పుడూ సిద్ధంగా ఉంచాలి. ఇది వినడానికి కొంచెం భయంగానే ఉంది, కానీ బాధ్యతాయుతంగా పనిచేయడం నేర్పిస్తుంది. సరే, ఇప్పుడు మనం ఈ మొత్తం PodThis భాగంలో నేర్చుకున్న విషయాలను ఒక అభ్యర్థన ప్రయాణంలో ఎలా చూస్తామో ఒక్కసారి వివరిస్తారా? తప్పకుండా.
ఒక వినియోగదారుడి నుండి అభ్యర్థన వచ్చినప్పుడు, మొదట వరుసలో ఉన్న పనులు జరుగుతాయి. అవి ముగిసిన వెంటనే, సూక్ష్మ పనులు తమ వంతును తీసుకుంటాయి. చివరగా, కాలపరిమితులు మరియు బయటి సమాచార సేకరణ వంటి పనులు ఒకే వరుసక్రమంలో జరుగుతాయి. ఈ మూడు దశలు ఒకదాని తర్వాత ఒకటి ఖచ్చితమైన క్రమంలో సాగుతాయి. ఆ వరుసక్రమమే ఈ వ్యవస్థ యొక్క అసలు రహస్యం.
ఈ రోజు మన చర్చలో వంటవాడు పొయ్యి మీద పెట్టిన పాత్ర ఉదాహరణ నా మనసుకి బాగా నచ్చింది. ఒకే ఒక్క ప్రధాన ప్రక్రియ ద్వారా వేలాది మంది వినియోగదారుల కోరికలను తీర్చడం అనేది నిజంగా ఒక గొప్ప వ్యూహం. నిజమే లక్ష్మి. సమయాన్ని వృధా చేసే పనులను వెనుక ఉన్న సహాయక యంత్రాంగానికి అప్పగించడమే ఇందులో ఉన్న అసలు కిటుకు.
ఏ పని ఎప్పుడు చేయాలో ఆ పనుల చక్రం ద్వారా నిర్ణయిస్తారు. అందుకే ఈ వ్యవస్థ ఎక్కడా ఆగిపోకుండా సాఫీగా సాగిపోతుంది. నువ్వు చెప్పింది కరెక్ట్. ఈ విషయం తెలిశాక సమాచార నిధుల అనుసంధానం గురించి అలాగే నెట్వర్క్ ప్రవాహాల గురించి ఇంకా తెలుసుకోవాలని ఉంది. వచ్చే సారి మనం వీటి గురించే మాట్లాడుకుందాం. తప్పకుండా చేద్దాం రవి.
ఈ రోజు మనం చెప్పుకున్న ఈ కొత్త విషయాలు మీ స్నేహితులకు కూడా ఉపయోగపడతాయని అనిపిస్తే వారికి తప్పకుండా తెలియజేయండి. జ్ఞానాన్ని పంచుకోవడం వల్ల మన తెలివితేటలు ఇంకా పెరుగుతాయి. మీకు ఏవైనా సందేహాలు ఉంటే మాతో పంచుకోండి. మనమంతా కలిసి నేర్చుకుంటూ ముందుకు సాగుదాం. ఎప్పుడూ నేర్చుకుంటూ ఉండండి. ఎప్పుడూ ఎదుగుతూ ఉండండి. మళ్ళీ వచ్చే పాఠంలో కలుద్దాం! PodThis.
Sources & further reading
Node.js Design Patterns
Provides an in-depth explanation of the event loop and asynchronous patterns in Node.js.
You Don't Know JS Yet: Async & Performance
A foundational book to master asynchronous execution and call stacks in JavaScript.
How this episode was made
Created by Vineela Tallam with PodThis. The script, research and voices are AI-generated with Google Gemini from the creator's topic. PodThis editors have not reviewed this episode.
Create your own podcast in minutes
Turn any topic into a professional podcast series with AI
Get Started Free
Comments (0)
Sign in to join the conversation