Blokirajoči V/I ustavi klicno nit, dokler se operacija ne zaključi; neblokirajoči V/I se vrne takoj in niti pusti opravljati drugo delo, medtem ko se operacija dokonča. Sinhrono v primerjavi z asinhronim opisuje isto zamisel na ravni API-ja.
Blokirajoči V/I ustavi klicno nit, dokler se operacija ne zaključi; neblokirajoči V/I se vrne takoj in niti pusti opravljati drugo delo, medtem ko se operacija dokonča. Sinhrono v primerjavi z asinhronim opisuje isto zamisel na ravni API-ja.
read(), dokler ne prispejo podatki. Preprosto, a je nit ves ta čas nedejavna — za strežbo N počasnih odjemalcev potrebujete N niti.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');
To je jedro skalabilnih strežnikov. Node.js in nginx obvladujeta ogromno število povezav na malo nitih prav zato, ker je V/I neblokirajoč — čakanje ne veže niti. Blokirajoče klice uporabite za preprostost v skriptah; neblokirajoče uporabite za omrežne storitve z visoko sočasnostjo in nikoli ne blokirajte zanke dogodkov s CPU-intenzivnim delom.
Knjižnica IT vprašanj za razgovore s podrobnimi odgovori — od začetnika do izkušenega.
Doniraj