Blockerande I/O stoppar den anropande tråden tills operationen är klar; icke-blockerande I/O returnerar omedelbart och låter tråden göra annat arbete medan operationen slutförs. Sync kontra async beskriver samma idé på API-nivå.
Blockerande I/O stoppar den anropande tråden tills operationen är klar; icke-blockerande I/O returnerar omedelbart och låter tråden göra annat arbete medan operationen slutförs. Sync kontra async beskriver samma idé på API-nivå.
read() tills data kommer. Enkelt, men tråden är overksam hela tiden — för att betjäna N långsamma klienter behöver du N trådar.Blocking: ──[ wait for disk ]── (thread stuck, does nothing)
Non-blocking: ──▶ returns now; event loop notified when ready
// Blocking: nothing else runs until the file is read
const data = fs.readFileSync('big.txt');
// Non-blocking: thread keeps going; callback fires later
fs.readFile('big.txt', (err, data) => { /* handle later */ });
// or async/await on top of non-blocking primitives
const data2 = await fs.promises.readFile('big.txt');
Detta är kärnan i skalbara servrar. Node.js och nginx hanterar enorma anslutningsantal på få trådar just för att I/O är icke-blockerande — väntan binder inte upp en tråd. Använd blockerande anrop för enkelhet i skript; använd icke-blockerande för nätverkstjänster med hög samtidighet, och blockera aldrig event-loopen med CPU-tungt arbete.
Ett bibliotek med IT-intervjufrågor och detaljerade svar — från Junior till Senior.
Donera