I/O-ul blocant oprește thread-ul apelant până când operația se termină; I/O-ul neblocant revine imediat și lasă thread-ul să facă altă muncă în timp ce operația se finalizează. Sync vs async descrie aceeași idee la nivelul API-ului.
I/O-ul blocant oprește thread-ul apelant până când operația se termină; I/O-ul neblocant revine imediat și lasă thread-ul să facă altă muncă în timp ce operația se finalizează. Sync vs async descrie aceeași idee la nivelul API-ului.
read() până sosesc datele. Simplu, dar thread-ul este inactiv tot timpul — ca să servești N clienți lenți ai nevoie de N thread-uri.Blocant: ──[ așteaptă discul ]── (thread blocat, nu face nimic)
Neblocant: ──▶ revine acum; event loop notificat când e gata
// Blocant: nimic altceva nu rulează până când fișierul e citit
const data = fs.readFileSync('big.txt');
// Neblocant: thread-ul continuă; callback-ul se declanșează mai târziu
fs.readFile('big.txt', (err, data) => { /* tratează mai târziu */ });
// sau async/await peste primitive neblocante
const data2 = await fs.promises.readFile('big.txt');
Acesta este miezul serverelor scalabile. Node.js și nginx gestionează un număr uriaș de conexiuni pe puține thread-uri tocmai pentru că I/O-ul este neblocant — așteptarea nu ocupă un thread. Folosește apeluri blocante pentru simplitate în scripturi; folosește neblocant pentru servicii de rețea cu concurență mare și nu bloca niciodată event loop-ul cu muncă intensivă de CPU.
O bibliotecă de întrebări de interviu IT cu răspunsuri detaliate — de la Junior la Senior.
Donează