I/O blocking e ndalon thread-in thirrës derisa operacioni të përfundojë; I/O non-blocking kthehet menjëherë dhe e lë thread-in të bëjë punë tjetër ndërsa operacioni përfundon. Sync kundrejt async e përshkruan të njëjtën ide në nivel API.
I/O blocking e ndalon thread-in thirrës derisa operacioni të përfundojë; I/O non-blocking kthehet menjëherë dhe e lë thread-in të bëjë punë tjetër ndërsa operacioni përfundon. Sync kundrejt async e përshkruan të njëjtën ide në nivel API.
read() derisa të dhënat të mbërrijnë. I thjeshtë, por thread-i është i papunë gjithë kohën — për të shërbyer N klientë të ngadaltë të duhen N thread-e.Blocking: ──[ prit diskun ]── (thread-i i ngecur, s'bën asgjë)
Non-blocking: ──▶ kthehet tani; event loop njoftohet kur gati
// Blocking: asgjë tjetër s'ekzekutohet derisa file të lexohet
const data = fs.readFileSync('big.txt');
// Non-blocking: thread-i vazhdon; callback aktivizohet më vonë
fs.readFile('big.txt', (err, data) => { /* trajto më vonë */ });
// ose async/await mbi primitiva non-blocking
const data2 = await fs.promises.readFile('big.txt');
Kjo është thelbi i serverave të shkallëzueshëm. Node.js dhe nginx trajtojnë numra të mëdhenj lidhjesh me pak thread-e pikërisht sepse I/O është non-blocking — pritja s'e zë një thread. Përdor thirrje blocking për thjeshtësi në script-e; përdor non-blocking për shërbime rrjeti me konkurrencë të lartë, dhe kurrë mos e blloko event loop me punë të rëndë CPU.
Një bibliotekë pyetjesh intervistash IT me përgjigje të detajuara — nga Junior te Senior.
Dhuro