Blocking I/O stopper den kaldende tråd, indtil operationen er færdig; non-blocking I/O returnerer med det samme og lader tråden lave andet arbejde, mens operationen fuldføres. Sync vs. async beskriver den samme idé på API-niveau.
Blocking I/O stopper den kaldende tråd, indtil operationen er færdig; non-blocking I/O returnerer med det samme og lader tråden lave andet arbejde, mens operationen fuldføres. Sync vs. async beskriver den samme idé på API-niveau.
read(), indtil data ankommer. Simpelt, men tråden er inaktiv hele tiden — for at betjene N langsomme klienter har du brug for N tråde.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');
Dette er kernen i skalerbare servere. Node.js og nginx håndterer enorme antal forbindelser på få tråde netop, fordi I/O er non-blocking — at vente binder ikke en tråd op. Brug blocking-kald for enkelhed i scripts; brug non-blocking til netværkstjenester med høj concurrency, og bloker aldrig event loop'en med CPU-tungt arbejde.
Et bibliotek af IT-interviewspørgsmål med detaljerede svar — fra Junior til Senior.
Donér