Blokující I/O zastaví volající vlákno, dokud se operace nedokončí; neblokující I/O se vrátí okamžitě a nechá vlákno dělat jinou práci, zatímco se operace dokončuje. Sync vs async popisuje stejnou myšlenku na úrovni API.
Blokující I/O zastaví volající vlákno, dokud se operace nedokončí; neblokující I/O se vrátí okamžitě a nechá vlákno dělat jinou práci, zatímco se operace dokončuje. Sync vs async popisuje stejnou myšlenku na úrovni API.
read(), dokud nedorazí data. Jednoduché, ale vlákno je celou dobu nečinné — k obsloužení N pomalých klientů potřebujete N vláken.Blokující: ──[ čekání na disk ]── (vlákno zaseknuté, nedělá nic)
Neblokující: ──▶ vrací se hned; event loop notifikován, až je připraveno
// Blokující: nic jiného neběží, dokud se soubor nepřečte
const data = fs.readFileSync('big.txt');
// Neblokující: vlákno pokračuje; callback se spustí později
fs.readFile('big.txt', (err, data) => { /* zpracuj později */ });
// nebo async/await nad neblokujícími primitivy
const data2 = await fs.promises.readFile('big.txt');
Toto je jádro škálovatelných serverů. Node.js a nginx zvládají obrovské počty připojení na málo vláknech právě proto, že I/O je neblokující — čekání nezablokuje vlákno. Blokující volání použijte pro jednoduchost ve skriptech; neblokující pro síťové služby s vysokou souběžností a nikdy neblokujte event loop výpočetně náročnou prací.
Knihovna IT otázek k pohovoru s podrobnými odpověďmi — od Junior po Senior.
Přispět