Node.js వేల సంఖ్యలో రిక్వెస్ట్లను ఎలా హ్యాండిల్ చేస్తుంది
People say Node.js is single-threaded.
అయినప్పటికీ, ఇది ఆగకుండా వేల సంఖ్యలో రిక్వెస్ట్లను హ్యాండిల్ చేస్తుంది, ఫైళ్లను చదువుతుంది మరియు API కాల్స్ చేస్తుంది.
ఇది ఎలా పనిచేస్తుంది?
దీనికి సమాధానం libuv.
libuv అనేది ఒక C లైబ్రరీ. ఇది Node.js కి asynchronous మరియు non-blocking I/O సామర్థ్యాలను అందిస్తుంది. JavaScript స్వయంగా ఫైళ్లను చదవలేరు లేదా నెట్వర్క్ సాకెట్లను నిర్వహించలేరు. మీ ఆపరేటింగ్ సిస్టమ్తో సంభాషించడానికి Node.js libuvని ఉపయోగిస్తుంది.
libuv లేకపోతే, మీరు ప్రతిసారి ఒక ఫైల్ను చదివేటప్పుడు JavaScript ఆగిపోతుంది. మీ యాప్ స్పందించకుండా (unresponsive) పోతుంది.
libuv ఉండటం వల్ల, ఫైల్ రీడింగ్ బ్యాక్గ్రౌండ్లో జరుగుతుంది. JavaScript ఇతర కోడ్ను రన్ చేస్తూనే ఉంటుంది.
Example:
console.log("Start");
fs.readFile("data.txt", "utf8", (err, data) => {
console.log(data);
});
console.log("End");
Output: Start End (ఫైల్ కంటెంట్స్)
ఫైల్ చదవడం పూర్తయ్యేలోపే Node.js "End" అని ప్రింట్ చేస్తుంది. ఇది వేచి ఉండదు.
libuv మీ కోడ్ను ఎలా నిర్వహిస్తుంది:
• The Event Loop: టాస్క్లు పూర్తయ్యాయో లేదో తనిఖీ చేసే లూప్ను libuv రన్ చేస్తుంది. టాస్క్లు పూర్తయినప్పుడు ఇది callbacksలను ఒక క్యూలో ఉంచుతుంది. • Thread Pool: JavaScript ఒకే త్రెడ్ను ఉపయోగిస్తుంది. libuv వర్కర్ త్రెడ్స్ యొక్క పూల్ను ఉపయోగిస్తుంది. డిఫాల్ట్గా, ఈ పూల్లో 4 త్రెడ్స్ ఉంటాయి. ఈ త్రెడ్స్ ఈ క్రింది భారీ పనులను నిర్వహిస్తాయి:
- File system operations
- DNS lookups
- Compression
- Cryptography • Networking: libuv HTTP, TCP, మరియు UDP సాకెట్లను నిర్వహిస్తుంది. ఇది సర్వర్లు ఒకేసారి అనేక కనెక్షన్లను హ్యాండిల్ చేయడానికి అనుమతిస్తుంది. • Timers: libuv setTimeout మరియు setIntervalలను హ్యాండిల్ చేస్తుంది.
ఎగ్జిక్యూషన్ ఫ్లో (execution flow) ఇలా పనిచేస్తుంది:
- JavaScript మీ కోడ్ను రన్ చేస్తుంది.
- libuv భారీ పనులను బ్యాక్గ్రౌండ్కు తీసుకువెళుతుంది.
- JavaScript తదుపరి లైన్కు వెళుతుంది.
- టాస్క్ పూర్తయినప్పుడు libuv Event Loopకి తెలియజేస్తుంది.
- Event Loop మీ callbackను రన్ చేస్తుంది.
ఒక పిజ్జా షాప్ను ఊహించుకోండి.
libuv లేకపోతే, మీరు కౌంటర్ వద్ద నిలబడి ప్రతి పది సెకన్లకు ఒకసారి "నా ఆహారం సిద్ధంగా ఉందా?" అని అడుగుతుంటారు. మీరు లైన్ను బ్లాక్ చేస్తారు.
libuv ఉండటం వల్ల, మీరు ఆర్డర్ ఇచ్చి, కూర్చుని, నోటిఫికేషన్ కోసం వేచి ఉంటారు. పిజ్జా సిద్ధమయ్యే వరకు మీరు ఇతర పనులు చేసుకోవడానికి స్వేచ్ఛగా ఉంటారు.
Summary:
• JavaScript execution: V8 Engine • Event Loop: libuv • File I/O: libuv • Network: libuv • Timers: libuv
Node.jsని వేగంగా ఉంచే ఇంజిన్ libuv.
