Blokirajući I/O zaustavlja pozivajuću nit dok se operacija ne dovrši; neblokirajući I/O vraća se odmah i pušta nit da radi drugi posao dok se operacija dovršava. Sync nasuprot async opisuje istu ideju na razini API-ja.
Blokirajući I/O zaustavlja pozivajuću nit dok se operacija ne dovrši; neblokirajući I/O vraća se odmah i pušta nit da radi drugi posao dok se operacija dovršava. Sync nasuprot async opisuje istu ideju na razini API-ja.
read() dok podaci ne stignu. Jednostavno, ali nit je cijelo vrijeme besposlena — da poslužite N sporih klijenata trebate N niti.Blokirajuće: ──[ čekanje na disk ]── (nit zaglavljena, ne radi ništa)
Neblokirajuće: ──▶ vraća se sada; event loop obaviješten kad je spremno
// Blokirajuće: ništa drugo se ne izvršava dok se datoteka ne pročita
const data = fs.readFileSync('big.txt');
// Neblokirajuće: nit nastavlja; callback se okida kasnije
fs.readFile('big.txt', (err, data) => { /* obradi kasnije */ });
// ili async/await povrh neblokirajućih primitiva
const data2 = await fs.promises.readFile('big.txt');
Ovo je srž skalabilnih poslužitelja. Node.js i nginx rukuju golemim brojem veza na malo niti upravo zato što je I/O neblokirajući — čekanje ne veže nit. Koristite blokirajuće pozive za jednostavnost u skriptama; koristite neblokirajuće za mrežne servise visoke konkurentnosti i nikada ne blokirajte event loop poslom koji intenzivno troši CPU.
Knjižnica IT pitanja za razgovore za posao s detaljnim odgovorima — od Juniora do Seniora.
Doniraj