 بسم اللہ الرحمن الرحیم آج ہم موڈیول 111 دیسکس کریں گے یہ موڈیول ہے about thread basics ہم کچھ basic information about threads ڈیسکس کریں گے ایک programر کو thread کے بارے میں یہ ساری information ہونی چاہیے تو تب بھی وہ threads کو use ڈیسکتے سکتا ہے ان کے لیے اچھا program لکھ سکتا first ڈیسکتے سکتے سکتا ہے کہ thread جو ہے وہ کوئی ایک independent entity نہیں ہے that is part of the process وہ process کی ہی space ڈیسکتا ہے ایک process کے اندر ہو سکتا ہے ایک thread ہوں دو thread ہوں multiple threads ہوں کئی ساری threads ہوں ساری threads جو ہے وہ ساری ایک ہی process کا part ہے thread کی کوئی individual existence نہیں ہے ایسا نہیں ہے کہ وہ کوئی process کے باہر کا کوئی object ہے وہ process کے اندر کی چیز ہے process کے اندر کا ایک object ہے اور ایک process کے اندر usually جسنا single threaded system ہے تو آپ کو ایک unit of execution نظر آتا ہے لیکن multi threaded کے اندر ایک process کے اندر آپ کو multiple units of execution نظر آن گے multiple flow of executions نظر آن گے تب ہم کہیں گے کہ یہ والا سسٹم جو ہے یہ multi threaded تو جتنے بھی اس کے اندر threads ہوں کہ وہ اسی کی process کی space کو اسی process کے resources کو share کر رہی ہوگی تو یہ ایک poor ڈائمر کو بڑی اچھے understanding ہونی چاہی ہے کہ process کے threads کے اپنے resources نہیں ہے threads جن resources کو use کر رہی ہے وہ کس کو belong کرتے ہیں وہ اس process کو belong کرتے ہیں operating system جو resources اسائن کرتا ہے وہ process کو کرتا اور پھر وہ resources جو ہے divide ہوتے ہیں among threads ایک سے زیادہ threads جو ہے ایک process کے اندر ہو سکتی ہیں ایک process کے ساتھ associate ہو سکتی ہیں یہ ہم نے discuss کر لیا پھر جو process کا دیتا ہے اور process کی جو code ہے اس کو تمام threads جو ہے وہ share کرتے ہیں وہ accessible ہے وہ visible ہے to all the threads کو اس کے دن information hiding نہیں ہے اگر ایک process ہے اس کے دن تین چار threads چال رہی ہے تو اس process کا جو دیتا ہے اس کے جو variables ہیں اور اس کی جو code ہے وہ ساری threads کو accessible ہے visible ہے لیکن پھر ہر thread کے پاس کچھ ایک طرح سے some level of privacy بیا ہے ہر thread کے پاس اپنی کچھ information بیا ہے ایک thread کے اندر جو اس کا status ہے اس کی information کچھ ایک mechanism exist کرتا تو اس کے پاس یہ share دیتا کے لیوہ ایک تو share دیتا ہے جو کہ سارے process کو belong کرتا ہے اور اس کو وہ share دیتا تمام threads کو visible ہے اس کے لیوہ ہر thread کے پاس اپنا کچھ individual unique دیتا بیا اس کی اپنی کچھ ایسی space بیا ہے جو کہلیں کہ اس thread کے لیے unique dedicated house thread کے لیوہ اور وہ ذویر نہیں ہے کہ وہ وی سپیس جو وہ بالکل ہی inaccessible ہو for other threads وہ کسی complicated طریقے سے دوسی threads کو بھی وہ space accessible ہو سکتی ہے لیکن programmer کی responsibility ہوتی ہے کہ یہ دیکھنا کہ وہ space جو اس space کو کوئی an advertently دوسی thread access نہ کریں تو programmer ہی انشور کرے گا کہ ایک thread کی جو اپنی unique space ہے اس unique space کو وہی thread use کریں اور کوئی دوسی thread جو ہے اس space کے ساتھ کسی کسم کی interference نہ کریں اس کے لیوہ threads کے پاس اپنی ایک stack بھی ہوتی ہے جب آپ ایک thread کو invoke کرتے ہیں تو اس کو کچھ parameters pass کرتے ہیں وہ arguments یا وہ parameters جو ہے وہ اس کی اپنی stack میں چڑے جاتی ہے اور پھر thread آگے کچھ functions کو بھی call کر سکتا ہے یا کئی functions کو call کر سکتا ہے تو ان function call کے اندر بھی وہی اسی کی اپنی stack use ہوتی ہے اگر ایک ہی common stack ہو تو function call کا sequence جو ہے وہ بالکل خراب ہو جائے ہر thread تاکہ اپنا function call کا sequence جو ہے preserve کر سکے اس لیے ہر thread کے پاس اپنا stack ہوتے اور جتنے بھی arguments ہوتے ہیں اس function call کے اور function call ہوتی ہیں وہ ساری اس stack کے اندر maintain ہوری ہوتی ہیں for that specific thread جب کوئی بھی ایک calling process ہے وہ کوئی ایک thread کو call کرتا ہے اور وہ جب thread کو call کرتا ہے تو کچھ arguments pass کرتا ہے وہ arguments pass کیا ہے وہ those thread کی stack کے اندر چلے جاتے ہیں اور subsequently thread جو as جو subsequent جتنے بھی function calls پرفوم کرے گی اس کے arguments بھی جویں stack کے اندر جاتے جائیں گے تو thread کے پاس ایک ہوتی ہے thread local storage tls ان شاڈ اس کو کہتے ہیں tls ہر thread نے اپنا ایک tls maintain کیا ہوگا وہ اس کی اپنی ایک unique space ہے یہ کیا چیز ہے یہ just ایک array of pointers ہے اور اس array کے اندر وہ اپنی جو بھی unique information ہے وہ manage کر ستی ہے thread تو ایسا نہیں ہے کہ thread نے ساری information process ہی لینی ہے process کی ہی information share کرنی ہے thread کی اپنی بھی unique information ہوسکتی ہے جس کو کہ وہ tls کے اندر maintain کر ستی ہے اور یہ of course programmer کی responsibility ہے جو کے ایک thread جو ہے اپنے ہی tls میں سے information لے کسی دوسری thread کی tls کے ساتھ انٹر فیر نہ کریں اب یہاں بھی ہم ایک یہی Discussion جو ہے ایک Diagram کی مدد سے جو ہے مزید علابریٹ کرتے ہیں اس Diagram کے اندر آپ دیکھ سکتے ہیں کہ یہ کہلیں کہ Server Application ہے Server Application ہے اور اس کو مختلف Client سے Access کریں جب بھی ایک Client اس کو ایک call بھیجتا ہے اس call کے گینسٹے ایک thread رانا ہوجاتی ہے آپ دیکھ سکتے ہیں جس طرح Client One نے ایک call بھیجی اس کے گینسٹے یہاں پہ ایک thread کریٹ ہوگی Client Two نے ایک call بھیجی اس کے گینسٹے یہاں پہ ایک thread کریٹ ہوگی Client N نے اسی طرح سے so on چلتے جائے ایک request بھیجی تو ایک اور یہاں پہ thread کریٹ ہوگی تو اس طرح سے ہر Client کے لیے ایک thread کریٹ ہوگی ہوتی ہے ہر Client کو concurrently جو اس نے operation request کیا یا جو اس نے action request کیا اس کا کچھ response جو ہے concurrently ملنا شروع ہو جائے گا تو یہ ایک threading کا advantage بھی ہے کہ Client server model کے اندر یہ جو ہے response کو بیتر کر سکتا ہے اگر ہر Client کے گینسٹ ایک الکسے ہم thread ران کریں اب یہاں پہ ہر thread کے اندر آپ دیکھ سکتے ہیں جس طرح یہ ایک thread ہے اس thread کے اندر آپ دیکھ سکتے ہیں کہ اس کی اپنی ایک stack ہے ہر thread کی اپنی stack ہے اس کے اپنے arguments ہے اور اس کا اپنا TLS thread local storage arguments کے اندر specific ڈیٹا ہے جو کہ Client نے pass کیا اس thread کو اسی طرح سے ہر thread کے پاس یہ تین structures ہیں جب بھی ایک thread کریٹ ہوتی ہے اس کے لیے تین چیزیں جو ہے یہ کریٹ ہوتی ہے thread ہے process کا part یہ پورا process ہے جتنی بھی threads کریٹ ہوں گی وہ اس پورے process کا part ہے یہ جو تین چیزیں ہیں یہ الکسے اس کی control information ہے جو اس thread کو control کرنے کے لیے جو آپ کا platform ہے آپ کا جو framework ہے ان چیزوں کو کریٹ کرتے ہیں کہ لیکن یہ ایک طرح سے overhead ہے اور اس طرح سے اگر کوئی اور بھی آپ کی thread ڈران ہو رہی ہے یہ ایک monitoring thread ہے تو اس کے لیے be TLS ہوگا stack ہوگا whatever یہاں پہ آپ ایک اور چیز دیکھ سکتے ہیں کہ جو آپ کا process ہے اس کا اپنا بھی code ہے اس کا اپنا ڈیٹا ہے اس کے constants ہے وغیرہ وغیرہ ساری information جو ہے یہ ساری information جو ہے تمام اس thread کو accessible ہے تمام threads جو ہے اس information کو دیکھ سکتے ہیں تو process کی information جو ہے تمام threads کو visible ہے لیکن یہ TLS کی information جو ہے ایک TLS کی information وہ اسی specific thread کے لیے ہے اور اس TLS کی information for example اس thread کی لیے ہے کمپلکیٹر تریکہ سے کسی fancy کسم کی programming کی مدہ سے ایسا possible ہے نہ ممکن نہیں ہے ایسا possible ہے کہ ایک thread جو ہے کسی دوسرے thread کی TLS کے اندر پڑیوی information کو access کر لیں لیکن یہ programmer کا کام ہے یہ دیکھنا ایسا now اور اگر ایسا کر رہے ہیں تو اس کو پتا ہوگا جو وہ کیا کر رہا اور stack آپ دیکھ سکتے ہیں ہرے کی اپنی unique ہے اس کے unique ہونے کی وجہ یہ ہے کہ ہرے کے اندر اپنے function calls ہوں گے اس کا اپنا ایک sequence ہوگا وہ ایک independent flow of execution ہے ہر thread تو وہ اپنے تریکہ سے functions کو call کر دیا تو اس تریکہ کو maintain کرنے کے لیے ایک common stack نہیں ہونی چاہیے ہر thread کی اپنی اپنی stack ہونی چاہیے اس لیے ہر thread کے ساتھ آپ کو ایک stack associate کرنا لازمی ہے otherwise جو flow of execution ہے وہ disturb ہو جائے گا