Blocking-I/O pysäyttää kutsuvan säikeen kunnes operaatio valmistuu; non-blocking-I/O palaa välittömästi ja antaa säikeen tehdä muuta työtä operaation valmistuessa. Sync vs async kuvaa samaa ideaa API-tasolla.
Blocking-I/O pysäyttää kutsuvan säikeen kunnes operaatio valmistuu; non-blocking-I/O palaa välittömästi ja antaa säikeen tehdä muuta työtä operaation valmistuessa. Sync vs async kuvaa samaa ideaa API-tasolla.
read():iin kunnes dataa saapuu. Yksinkertaista, mutta säie on jouten koko ajan — palvellaksesi N hidasta asiakasta tarvitset N säiettä.Blocking: ──[ odota levyä ]── (säie jumissa, ei tee mitään)
Non-blocking: ──▶ palaa heti; event loop saa ilmoituksen kun valmis
// Blocking: mikään muu ei aja kunnes tiedosto on luettu
const data = fs.readFileSync('big.txt');
// Non-blocking: säie jatkaa; callback laukeaa myöhemmin
fs.readFile('big.txt', (err, data) => { /* käsittele myöhemmin */ });
// tai async/await non-blocking-primitiivien päällä
const data2 = await fs.promises.readFile('big.txt');
Tämä on skaalautuvien palvelimien ydin. Node.js ja nginx käsittelevät valtavia yhteysmääriä harvoilla säikeillä juuri siksi, että I/O on non-blocking — odottaminen ei sido säiettä. Käytä blocking-kutsuja yksinkertaisuuden vuoksi skripteissä; käytä non-blockingia korkean samanaikaisuuden verkkopalveluihin, äläkä koskaan estä event looppia CPU-raskaalla työllä.
Kirjasto IT-haastattelukysymyksiä yksityiskohtaisine vastauksineen — Juniorista Senioriin.
Lahjoita