 اسم اللہ الرحمن الرحیم، آج ہم موڈیول 168 دسکس کریں گے، موڈیول 168 ہے ایٹ ہے about پریڈ پولز جس طرح پریبسل ہم نے دسکس کیا تھا کہ جب آپ کنکرنسی کے ساتھ کام کرے ہیں تو کنکرنسی کے کئی فائدیں ہیں لیکن کنکرنسی کی وجہ سے ستن کانفلٹس آتے ہیں آپ کو میوشل ایکسلویڈن انفورس کینی پڑتی ہے ان کانفلٹس کو دور کرنے کے لئے جب میوشل ایکسلویڈن انفورس کرتے ہیں تو اس سے اور کسم کے مسائل پیدا ہوتے ہیں اس سے کئی کسم کے کنسرینٹس آ جاتے ہیں اور اپٹیمائزیشن نہیں ہو پاتی یا ایک سیٹن سیٹویشن کے اندر سیٹن کسم کی ٹکنیٹ جو ہے وہ کم اپٹیمال ہوتی ہے یہ جو میوشل ایکسلویڈن انفورس کرنا ہے تو ضروری ہے اب ہم یہ دیکھ رہے ہیں کہ میوشل ایکسلویڈن کو ہم ایک بیتر طریقے سے اپٹیمائز طریقے سے کیسے انفورس کر سکتے ہیں تو اس کے لیے کئی کسم کی ٹکنیگس ہے جن میں سے ایک ٹکنیگ جو ہے ٹریڈ پولز ہم نے پریویس لی سیمہ فور ٹھرٹلنگ دسکس کی تھی تو سیمہ فور ٹھرٹلنگ جو ہے اس کی مدل سے بھی آپ اپٹیمائزیشن کسی ہتک آپ کو ملتی ہے لیکن یہ ٹریڈ پولز کی مطالجی ہے اس کو اپٹریڈنگ سسٹم جو ہے اس کے لیے پروائیٹ کرتا ہے آپ کو فسلٹی اور اس کو use کرتے ہوئے آپ زیادہ بہتر طریقے سے اپٹیمائزیشن کر سکتے ہیں جب آپ میوشل ایکسلویڈن کے ساتھ دیل کر رہے ہیں یا سنکرنائیزیشن کے ساتھ دیل کر رہے ہیں تو ٹریڈ پولز جو ہے وہ ایک ٹریڈز لکھنے کا ایک ڈفرنڈ انداز ہے ٹریڈ پولز اگر آپ نے ایک پوگرام بنایا ہے جس کے اندر ٹریڈنگ پہ استعمال کیا ہے تو اس پوگرام کو تھوڑا ساپ کو چینج کرنا پڑھے گا ٹریڈ پولز کیلئے تھوڑی سی کسٹمائیزیشن کر کے تھوڑی سی مارٹفیکیشن کر کے آپ اس کے اندر ٹریڈ پولز کا استعمال کر سکتے ہیں اور اس طرح سے آپ کا پوگرام جہاں وہ مزید اوپٹمائیز ہو جائے گا اس کے اس میں ٹریڈ پولز کی کیس میں ایک تم use ہوتی ہے اس کو کہتے ہیں ہم work objects جو آپ کی اپلکیشن ہے وہ ٹریڈز کی جگہ work objects بناتی ہے آپ جب بھی ایک work object بناتے ہیں تو اس کو windows کے ساتھ رجستر کر لیا جاتا ہے اس کو بتا دیا جاتا ہے کہ یہ ہمارا ایک work object ہے اس کے لیے certain of course آپ کو بتا ہے API's use ہوتی ہے ایسا کام کرنے کے لیے once وہ register ہو جاتا ہے تو اس کو identify کرنے کے لیے ایک handle like structure use ہوتا handle نہیں ہوتا handle like structure ہم اس کو کہتے ہیں ایک structure ہوتا ہے اس کے اندر اس سے associated information ہوتی ہے اس structure کے ترو ہم اس work object کو جو ہے identify کر سکتے ہیں پھر جو بھی ایک process ہے اس process کے اندر ایک set of worker threads ہوتا یہ worker threads جو ہم previously جن کو ہم worker threads کہتے ہیں ان سے different ہے یہ وہ چیز نہیں ہے یہ worker threads جو ہے یہ آپ کو kernel provide ہے ہر process کے ساتھ certain number of worker threads جو ہیں وہ associated اب ہوگا یہ کہ ہر process کو جو worker threads associated ہیں وہ worker threads کیا کریں گے آپ کے work object کو run کریں worker thread آپ سے ایک طرح سے hidden اس کے لیے جتنی بھی scheduleing کرنی ہے وہ operating system نے کرنی ہے وہ windows نے کرنی ہے کب worker thread کو invoke کرنا ہے اور اس کے اوپر کونسا worker object جو ہے اس نے schedule کرنا ہے یہ arbitration جو ہے you operating system کرتا ہے اس کے اندر programmer کا کوئی امل دخل نہیں ہے تو یہ ایک طرح سے آپ سے ایک hidden چیز لیکن آپ کو پدانا چاہیے کہ ہر process کے ساتھ ایک set of worker threads associated ہوتی ہیں اور ان worker thread کے اوپری آپ جو worker object ہے وہ arbitrate ہوگا اب جو worker object ہے ہر worker object کے اندر ایک call back function ہوگا call back function اگر آپ یاد کریں تو آپ کو پتا ہوگا جب آپ نے windows programming کی تو اس کے اندر ایک call back function ہوتا ہے ہر program کے اندر ایک call back function call back function ایک ایسا function ہے جس کو کہ program خود تو نہیں call کرتا جس کو کہ بہر سے operating system call بیسے جتنے بھی آپ دوسرے function آتے ہیں اس کو تو آپ خود call کرتے ہیں لیکن call back function کو at an certain instance operating system call کرتا ہے تو یہ بھی ایک طرح کا call back function ہوتا ہے یہ کبھی بھی نہیں آپ خود call کر رہے ہوتے اس کو جو آپ کی worker threads ہیں وہ invoke کرتا ہے تو جو بھی آپ نے worker objects دیے ہیں ان کے ساتھ associated call back functions ہیں اور جو آپ کے worker objects جب ان کی باری آتی ہے جب ان کی arbitration ہوتی ہے کسی worker thread کے اوپر تو اس کا call back function call ہوتا ہے اس call back function کے اندر آپ کی ساری processing ہے ساری computation ہے وہ computations perform ہوتی جاتی ہے تو وہ بالکل یہ ایسا perform ہوری ہیں جیسا کہ ایک thread رہا ہے کئی سارے worker objects ہیں اور ان کے جتنے بھی call back functions ہے ان کو windows arbitrate کریے اور ان کو map کریے ہیں onto worker threads اور window determine کریے کا کس worker thread نے کسا call back کس worker object کا call back functions ہے execute کرنا ہے تو اس طرح سے ہر worker object کا جب ایک call back function execute ہورہا ہے تو وہ just like a thread کی as if کے thread run ہوری اس کے اندر thread کی جو ساری processing ہے وہ آپ اس call back function کے اندر اکتے ہیں اور آپ کا وہ thread ایک طرح سے چلنا شروع ہو جا ہے اس لیے بہت مہار ضروری ہے کہ جب بھی آپ ایک worker object بنائیں اس worker object کے اندر آپ کبھی بھی n thread e x کو نہ call because n thread e x کو call کریں گا تو اس کا مطلب یہ ہے کہ آپ worker thread کو end وہ n thread e x کا استعمال نہیں ہوگا جب آپ اس تکنی کا استعمال کرے ہیں thread pools کا استعمال کرے ہیں جب ایک آپ کا call back function map ہو جاتا ہے onto a worker thread تو وہ call back function کی execution کمپلیٹ ہوتی ہے کمپلیٹ ہونے کے بعد execution واپس worker thread کی پاس آتی ہے worker thread پر بعد میں جو بھی operating system کی scheduling policy اس کے according لی operating system decided کرتا ہے اب یہ worker thread کیs call back function کے ساتھ associate and so on اس طرح سے ایک specific number of worker threads ہیں جس کو کئی سارے call back function اپس میں share کرتے ہیں تو جو number of worker threads ہیں وہ dynamic ہیں وہ کوئی fix نہیں ہیں وہ change ہو سکتی ہیں depending upon کہ آپ کے process کا کیا بھیویر ہے جبھی اگر ایسا لگتا operating system کو کہ آپ کے process مزید optimize ہو جائے گا اس کو مزید worker threads اسائن کرنے سے تو مزید اور نہیں worker threads اس کو سائن کر دے گا اگر operating system کو لگتا ہے کہ جی آپ کو کم worker threads کی ضرورت ہے تو worker threads آپ کے کم بھی کر سکتا ہے تو application جو ہے ایک وقت میں کتنے worker threads ہیں یہ تو نہیں specify کر سکتی لیکن application جو اس کی limit determine کر سکتی ہے کہ maximum کتنے ہونے چاہیے ہیں minimum کتنے ہونے چاہیے ہیں اور actually جتنے ہونگے وہ run time پہ depending upon the behavior of process آپ کو operating system decided کرے گا کہ اس کو کتنے worker threads اسائن کیا تو thread pool ویسے تو ہر process جب آپ کریٹ کرتے ہیں تو اس کے ساتھ ایک thread pool default associate ہو جاتا ہے اور اگر آپ کو in case کسی specific circumstances کے اندر اس thread pool کے لعا اور بھی کو thread pool کی ضرورت پڑتی ہے تو آپ اور thread pools بھی کریٹ کر سکتے ہیں تو addition thread pools بھی کریٹ کر سکتے ہیں وانا otherwise default thread pool جو ہے وہ آپ اس کو آپ استعمال کر سکتے ہیں