Blokkerende I/O stopper den kallende tråden til operasjonen er ferdig; ikke-blokkerende I/O returnerer umiddelbart og lar tråden gjøre annet arbeid mens operasjonen fullføres. Sync vs async beskriver den samme ideen på API-nivå.
Blokkerende I/O stopper den kallende tråden til operasjonen er ferdig; ikke-blokkerende I/O returnerer umiddelbart og lar tråden gjøre annet arbeid mens operasjonen fullføres. Sync vs async beskriver den samme ideen på API-nivå.
read() til data ankommer. Enkelt, men tråden er inaktiv hele tiden — for å betjene N trege klienter trenger du N tråder.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 kjernen i skalerbare servere. Node.js og nginx håndterer enorme antall tilkoblinger på få tråder nettopp fordi I/O er ikke-blokkerende — venting binder ikke opp en tråd. Bruk blokkerende kall for enkelhets skyld i skript; bruk ikke-blokkerende for nettverkstjenester med høy samtidighet, og blokker aldri event loop-en med CPU-tungt arbeid.
Et bibliotek av IT-intervjuspørsmål med detaljerte svar — fra Junior til Senior.
Doner