Blocking I/O کالنگ thread کو اُس وقت تک روک دیتی ہے جب تک operation مکمل نہ ہو؛ non-blocking I/O فوراً واپس آ جاتی ہے اور thread کو دوسرے کام کرنے دیتی ہے جبکہ operation مکمل ہوتا ہے۔ Sync بمقابلہ async اسی خیال کو API کی سطح پر بیان کرتے ہیں۔
Blocking I/O کالنگ thread کو اُس وقت تک روک دیتی ہے جب تک operation مکمل نہ ہو؛ non-blocking I/O فوراً واپس آ جاتی ہے اور thread کو دوسرے کام کرنے دیتی ہے جبکہ operation مکمل ہوتا ہے۔ Sync بمقابلہ async اسی خیال کو API کی سطح پر بیان کرتے ہیں۔
read() پر رُک جاتی ہے جب تک ڈیٹا نہ آئے۔ سادہ، لیکن thread پورا وقت بیکار رہتی ہے — N سست clients کو serve کرنے کے لیے آپ کو N threads درکار ہیں۔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');
یہ scalable servers کا مرکز ہے۔ Node.js اور nginx بہت زیادہ connection counts کو کم threads پر بالکل اسی لیے سنبھالتے ہیں کیونکہ I/O non-blocking ہے — انتظار کسی thread کو باندھ کر نہیں رکھتا۔ scripts میں سادگی کے لیے blocking calls استعمال کریں؛ high-concurrency network services کے لیے non-blocking استعمال کریں، اور CPU-heavy کام سے event loop کو کبھی block نہ کریں۔
تفصیلی جوابات کے ساتھ IT انٹرویو سوالات کی ایک لائبریری — جونیئر سے سینئر تک۔
عطیہ دیں