 بسم اللہ الرحمن الرحیم آج ہم موڈیول 166 دسکس کریں گے موڈیول 166 ہے about reducing thread contention thread contention آپ کو اب تک سمجھ آگی ہوگی کہ جس طرح سے ہم نے پہلے memory contention کی بات کی تھی اسی طرح سے thread contention بیا یا cash کی contention کی بات کی تھی اگر number of threads at a time run ہو رہی ہیں اور آپ جونجو آپ کی need بھرتی جا رہی ہے جونجو آپ کو مختلف request آتے جا رہی ہے آپ کی threads بھی increase ہو رہی ہے جونجو threads increase ہوں گی تو ان increase number of threads کے بیچا اپس میں کسی کسم کی contention بیا آنی شروع ہو جائے گے وہ contention کی وجوہات کی وجہ سے آسکتی ہیں وہ ہم دسکس کرتے ہیں briefly پہلی تو ایک وجہ یہ ہے کہ جب بھی آپ ایک thread create کرتے ہیں تو اس کے لیے ایک separate سے memory space جو ہے وہ reserve ہو جاتی ہے اس کے لیے stack area reserve ہو جاتا ہے اور memory space reserve ہو جاتی ہے تکریباً one mb space جو ہے ایک thread کے لیے reserve ہو جاتی ہے جونجو آپ اور threads add کرتے جا رہے ہیں تو وہ one mb one mb وہ memory area جو ہے وہ pile up ہوتا جا اور اس کے بیچ میں پھر جب switching ہوگی تو of course پھر اس کی وجہ سے زیادہ overheads مصوص ایک سیرٹن امانٹ کے بعد overheads زیادہ آپ کو feel ہونا شروع ہو جائیں گے تو جب زیادہ آپ کے پاس threads ہوں گی اس کے contact switching overheads جب ایک thread سے آپ نے دوسی thread پہ جانا ہے اور کئی ساری threads میں سے آپ نے دیسائٹ کرنا ہے کہ کس thread کیا پر switching ہونی ہے تو پھر switching ہے switching کے جو overheads ہیں وہ بھی increase ہو جائیں گے اس سناریو کے اندر پھر یہ بھی ہو سکتا ہے کیوں کہ جب آپ کے پاس بہت زیادہ threads آگی ہیں تو بہت زیادہ memory space کنزیو موری ہے تو number of page faults بھی increase ہو جائیں گے جب ایک thread سے switch کر کے آپ دوسی thread کیا پر جا رہے ہیں تو جب دوسی thread کی stack access ہوگی تو اس کی stack access ہونے کی صورت میں page faults بھی اکر ہو سکتے ہیں تو number of page faults بھی increase ہو جائیں گے جس کے وجہ سے مزیج ایک ایک performance ہے وہ de grade ہونے شروع ہو جائے گی اب آپ threads کو reduce بھی نہیں کر سکتے کیوں کہ اگر threads کو آپ reduce کریں گے تو آپ parallelism کا جو advantage وہ lose کرتے ہیں کہ concurrency کا جو advantage وہ نہیں آپ کو ملے گا اور چیزیں جو وہ again پھر سے serialize ہو جائیں گی تو آپ ایسا بھی نہیں کر سکتے ہیں کہ threading ختم کرنے یا threads کو کام کرتے ہیں اب optimization کیلی ہم کیا کر سکتے ہیں اس سناریو کے اندر جب کئی ساری threads کریٹ ہو رہی ہیں تو اس کو deal کرنے کے بھی مختلف strategies ہیں مختلف تریکوں سے آپ ان کے ساتھ deal کر سکتے ہیں تاکہ مزید optimization ہو اور یہ number of threads جو increase ہو رہے ہیں اس کا جو disadvantage وہ آپ کو affect نہ کریں اس کے گاس میں مختلف قسم کی programming technique سکتے ہیں جن کو آگے چل کے discuss کریں گے ایک programming technique جو ہے جس کو ہم کہتے ہیں semaphore throttles سے ہم contention among threads ہے اس کو ہم کچھ ہتاکہ reduce کر سکتے ہیں using IO completion ports یہ تقنیق جو ہے اس کو بھی ہم آگے چل کے discuss کریں گے a synchronous IO ہر کس میں enforce کرنی possible نہیں ہو سکتی لیکن جان پہ a synchronous IO possible ہے وہاں پہ ہم a synchronous IO کی مدد سے بھی یہ جو number of threads کا جو پرشہ رہا ہے اس کو reduce کر سکتے ہیں thread pools جو ہیں thread pools کے اندر call back function کی مدد سے number of threads کو control کر سکتے ہیں اور a synchronous procedure call یا apcs اس کی مدد سے بھی ہم optimization جو ہے وہ achieve کر سکتے ہیں تو یہ کئی سارے آپ کے پاس methods ہیں ایک وقت میں ایک تکنی کیا ایک سزادہ تکنی ایک اس جو ہم وہ use ہوری ہوتی ہیں for a thread optimization اس کے لہاں یہ تو وہ ساری ہم نے تکنی اس discuss کیا ہے جو کہ آپ اپنی programming skill کی مدد سے enforce کر سکتے ہیں اس کے لہاں مختلف قسم کے frame works ہیں آپ اون third body frame works کو جب آپ a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a