JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ ملٽي ٿريڊنگ: جوهر، فائدا ۽ عام نقصان

جاوا ۾ ملٽي ٿريڊنگ: جوهر، فائدا ۽ عام نقصان

گروپ ۾ شايع ٿيل
سلام! سڀ کان پهريان، مبارڪون: توهان جاوا ۾ ملٽي ٽريڊنگ جي موضوع تي پهچي ويا آهيو! هي هڪ سنجيده ڪاميابي آهي، اتي وڃڻ لاء هڪ ڊگهو رستو آهي. پر تيار ٿي وڃو: هي ڪورس ۾ سڀ کان ڏکيو موضوعن مان هڪ آهي. ۽ نقطي اهو ناهي ته پيچيده طبقن يا ڪيترائي طريقا هتي استعمال ڪيا ويا آهن: ان جي برعڪس، اتي ٻه درجن به نه آهن. اهو وڌيڪ آهي ته توهان کي پنهنجي سوچ کي ٿورو تبديل ڪرڻ جي ضرورت آهي. اڳي، توهان جا پروگرام ترتيب وار ڪيا ويندا هئا. ڪوڊ جون ڪجهه لائينون ٻين جي پٺيان، ڪجھ طريقا ٻين جي پٺيان، ۽ مجموعي طور تي سڀ ڪجھ واضح ھو. پهرين، ڪجھ ڳڻيو، پوء نتيجو ڏيکاريو ڪنسول تي، پوء پروگرام ختم ڪريو. ملٽي ٿريڊنگ کي سمجھڻ لاءِ، اھو بھترين آھي ته سمجھوتي جي لحاظ کان. اچو ته ڪجھھ سادو سان شروع ڪريون :) جاوا ۾ ملٽي ٿريڊنگ: جوهر، فائدا ۽ عام نقصانات - 1تصور ڪريو ته توھان جو خاندان ھڪڙي گھر کان ٻئي ڏانھن منتقل ٿي رھيو آھي. منتقل ڪرڻ جو هڪ اهم حصو توهان جي ڪتابن کي ڀريل آهي. توهان تمام گهڻا ڪتاب گڏ ڪيا آهن، ۽ توهان کي انهن کي دٻي ۾ رکڻو پوندو. هاڻي صرف توهان آزاد آهيو. ماءُ ماني تيار ڪري رهي آهي، ڀاءُ ڪپڙا گڏ ڪري رهيو آهي، ۽ ڀيڻ دڪان تي وئي آهي. اڪيلو توهان منظم ڪري سگهو ٿا، گهٽ ۾ گهٽ، ۽، جلدي يا بعد ۾، توهان پڻ پنهنجو ڪم مڪمل ڪري سگهو ٿا، پر اهو گهڻو وقت وٺندو. بهرحال، 20 منٽن ۾ توهان جي ڀيڻ اسٽور تان واپس ايندي، ۽ هن وٽ ٻيو ڪجهه به ناهي. تنهنڪري هوءَ توهان سان شامل ٿي سگهي ٿي. ڪم ساڳيو رهيو: ڪتابن کي دٻي ۾ وجهي. اهو صرف ٻه ڀيرا تيز رفتار سان هلندو آهي. ڇو؟ ڇاڪاڻ ته ڪم هڪجهڙائي ۾ ڪيو ويندو آهي. ٻه مختلف ”ڌاڙا“ (توهان ۽ توهان جي ڀيڻ) هڪ ئي وقت هڪ ئي ڪم سرانجام ڏئي رهيا آهيو ۽، جيڪڏهن ڪجهه به نه بدليو ته، وقت جو فرق ان صورتحال جي مقابلي ۾ تمام وڏو هوندو جنهن ۾ توهان سڀ ڪجهه اڪيلو ڪندا. جيڪڏھن توھان جو ڀاءُ پنھنجو ڪم جلد پورو ڪري، اھو توھان جي مدد ڪري سگھي ٿو، ۽ شيون اڃا به تيز ٿي وينديون.

مسئلا جيڪي ملٽي ٿريڊنگ جاوا ۾ حل ڪن ٿا

لازمي طور تي، جاوا ملٽي ٿريڊنگ ٻن مکيه مسئلن کي حل ڪرڻ لاءِ ايجاد ڪئي وئي:
  1. ساڳئي وقت ڪيترن ئي عملن کي انجام ڏيو.

    مٿي ڏنل مثال ۾، مختلف موضوعن (يعني خاندان جي ميمبرن) متوازي طور تي ڪيترائي عمل ڪيا: برتن ڌوئي، دڪان تي ويا، شيون ٺاهي.

    هڪ وڌيڪ "پروگرامر" مثال ڏئي سگهجي ٿو. تصور ڪريو ته توھان وٽ ھڪڙو پروگرام آھي جيڪو يوزر انٽرفيس سان. جڏهن جاري رکو بٽڻ کي دٻايو ويندو آهي، پروگرام جي اندر ڪجهه حساب ڪتاب ٿيڻ گهرجي، ۽ صارف کي هيٺين انٽرفيس اسڪرين کي ڏسڻ گهرجي. جيڪڏهن اهي ڪارناما ترتيب سان ڪيا وڃن، "جاري رکو" بٽڻ تي ڪلڪ ڪرڻ کان پوء، پروگرام صرف منجمد ٿي ويندو. صارف ساڳئي اسڪرين کي "جاري" بٽڻ سان ڏسندو جيستائين سڀئي اندروني حساب مڪمل ٿي وڃن ۽ پروگرام ان حصي تي پهچي جتي انٽرفيس ٺهڻ شروع ڪيو ويندو.

    خير، اچو ته ڪجهه منٽن جو انتظار ڪريون!

    جاوا ۾ ملٽي ٿريڊنگ: جوهر، فائدا ۽ عام نقصانات - 3

    اسان پنهنجي پروگرام کي ٻيهر ٺاهي سگهون ٿا، يا، جيئن پروگرامر چوندا آهن، "متوازي." اچو ته ضروري حسابن کي ھڪڙي سلسلي ۾ انجام ڏيو، ۽ ٻئي ۾ انٽرفيس رينجرنگ. گهڻن ڪمپيوٽرن وٽ هن لاءِ ڪافي وسيلا آهن. انهي حالت ۾، پروگرام "بيوقوف" نه ٿيندو، ۽ صارف خاموشيء سان انٽرفيس اسڪرين جي وچ ۾ منتقل ڪندو، بغير اندر اندر ڇا ٿي رهيو آهي. اهو مداخلت نٿو ڪري :)

  2. حسابن کي تيز ڪريو.

    هتي هر شيء بلڪل آسان آهي. جيڪڏھن اسان جي پروسيسر ۾ ڪيترائي ڪور آھن، ۽ گھڻا پروسيسر ھاڻي ملٽي-ڪور آھن، اسان جي ڪمن جي فهرست متوازي طور تي ڪيترن ئي ڪورن سان حل ڪري سگھجي ٿي. ظاهر آهي، جيڪڏهن اسان کي 1000 مسئلن کي حل ڪرڻ جي ضرورت آهي ۽ انهن مان هر هڪ سيڪنڊ ۾ حل ڪيو وڃي ٿو، هڪ ڪور 1000 سيڪنڊن ۾ لسٽ کي منهن ڏيندو، ٻه ڪور 500 سيڪنڊن ۾، ٽي صرف 333 سيڪنڊن ۾، وغيره.

پر، جيئن توهان اڳي ئي ليڪچر ۾ پڙهي چڪا آهيو، جديد سسٽم ڏاڍا سمارٽ آهن، ۽ هڪ ڪمپيوٽنگ ڪور تي به اهي متوازي، يا pseudo-paralelism کي لاڳو ڪرڻ جي قابل هوندا آهن، جڏهن ڪم متبادل طور تي ڪيا ويندا آهن. اچو ته عام شين کان مخصوص شين ڏانهن وڃو ۽ جاوا لائبريري ۾ ملٽي ٿريڊنگ سان لاڳاپيل مکيه طبقي سان واقف ٿي وڃو - java.lang.Thread. سختي سان ڳالهائڻ، جاوا ۾ موضوع ڪلاس جي مثالن جي نمائندگي ڪن ٿا Thread. اهو آهي، 10 موضوعن کي ٺاهڻ ۽ هلائڻ لاء، توهان کي هن طبقي جي 10 شين جي ضرورت پوندي. اچو ته آسان ترين مثال لکون:
public class MyFirstThread extends Thread {

   @Override
   public void run() {
       System.out.println("I'm Thread! My name is " + getName());
   }
}
ٿريڊز ٺاهڻ ۽ لانچ ڪرڻ لاءِ، اسان کي ڪلاس ٺاهڻو پوندو ۽ ان کي وراثت ۾ آڻڻو پوندو java.lang. Thread۽ ان ۾ طريقي کي ختم ڪريو run(). آخري هڪ تمام اهم آهي. اهو طريقو آهي ته run()اسان منطق کي بيان ڪريون ٿا ته اسان جي موضوع تي عمل ڪرڻ گهرجي. ھاڻي، جيڪڏھن اسان ھڪڙو مثال ٺاھيو MyFirstThread۽ ان کي ھلايو، اھو طريقو run()پنھنجي نالي سان ھڪڙي لائن ڪنسول ڏانھن پرنٽ ڪندو: طريقو getName()"سسٽم" موضوع جو نالو پرنٽ ڪري ٿو، جيڪو خودڪار طور تي لڳايو ويو آھي. جيتوڻيڪ، اصل ۾، ڇو "جيڪڏهن"؟ اچو ته ٺاهيو ۽ جانچ ڪريون!
public class Main {

   public static void main(String[] args) {

       for (int i = 0; i < 10; i++) {

           MyFirstThread thread = new MyFirstThread();
           thread.start();
       }
   }
}
ڪنسول آئوٽ: مان ٿريڊ آهيان! منهنجو نالو Thread-2 آهي مان ٿريڊ آهيان! منهنجو نالو آهي Thread-1 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-0 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-3 مان ٿريڊ آهيان! منهنجو نالو Thread-6 آهي مان ٿريڊ آهيان! منهنجو نالو آهي Thread-7 مان ٿريڊ آهيان! منهنجو نالو Thread-4 آهي مان ٿريڊ آهيان! منهنجو نالو آهي Thread-5 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-9 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-8 اسان 10 ٿريڊ (آبجڪٽ) ٺاهيندا آهيون MyFirstThreadجيڪي ورثي ۾ مليا آهن Thread۽ انهن کي اعتراض جي طريقي سان سڏڻ سان لانچ ڪندا آهيون start(). ڪنهن ميٿڊ کي سڏڻ کان پوءِ start()ان جو طريقو ڪم ڪرڻ لڳندو آهي run()۽ ان ۾ جيڪا منطق لکيل هوندي آهي، ان تي عمل ٿيندو آهي. مهرباني ڪري نوٽ ڪريو: موضوع جا نالا ترتيب ۾ نه آهن. اها ڏاڍي عجيب ڳالهه آهي، ڇو نه انهن کي بدلي ۾ قتل ڪيو ويو: ،،، Thread-0وغيره ؟ اهو بلڪل هڪ مثال آهي جڏهن معياري، "ترتيباتي" سوچ ڪم نه ڪندي. حقيقت اها آهي ته هن معاملي ۾ اسان صرف 10 موضوع ٺاهڻ ۽ لانچ ڪرڻ لاء حڪم جاري ڪريون ٿا. ڪهڙي ترتيب ۾ انهن کي شروع ڪيو وڃي اهو فيصلو ڪيو ويو آهي ٿريڊ شيڊولر: آپريٽنگ سسٽم اندر هڪ خاص ميڪانيزم. اهو ڪيئن ٺهيو آهي ۽ ڪهڙي اصول تي اهو فيصلو ڪري ٿو، اهو هڪ تمام پيچيده موضوع آهي، ۽ اسان هاڻي ان تي غور نه ڪنداسين. ياد رکڻ جي بنيادي شيء اها آهي ته پروگرامر ٿريڊ جي عمل جي تسلسل کي ڪنٽرول نٿو ڪري سگهي. صورتحال جي سنگينيت کي محسوس ڪرڻ لاءِ، مٿي ڏنل مثال مان هڪ ٻه ڀيرا وڌيڪ طريقو هلائڻ جي ڪوشش ڪريو. ٻيو ڪنسول آئوٽ: مان ٿريڊ آهيان! منهنجو نالو آهي Thread-0 مان ٿريڊ آهيان! منهنجو نالو Thread-4 آهي مان ٿريڊ آهيان! منهنجو نالو آهي Thread-3 مان ٿريڊ آهيان! منهنجو نالو Thread-2 آهي مان ٿريڊ آهيان! منهنجو نالو آهي Thread-1 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-5 مان ٿريڊ آهيان! منهنجو نالو Thread-6 آهي مان ٿريڊ آهيان! منهنجو نالو آهي Thread-8 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-9 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-7 ٽيون ڪنسول آئوٽ: مان ٿريڊ آهيان! منهنجو نالو آهي Thread-0 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-3 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-1 مان ٿريڊ آهيان! منهنجو نالو Thread-2 آهي مان ٿريڊ آهيان! منهنجو نالو Thread-6 آهي مان ٿريڊ آهيان! منهنجو نالو Thread-4 آهي مان ٿريڊ آهيان! منهنجو نالو آهي Thread-9 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-5 مان ٿريڊ آهيان! منهنجو نالو آهي Thread-7 مان ٿريڊ آهيان! منهنجو نالو Thread-8 آهيThread-1Thread-2main()

مسئلا جيڪي multithreading ٺاهي ٿو

ڪتابن جي مثال ۾، توهان ڏٺو ته ملٽي ٿريڊنگ ڪافي اهم مسئلا حل ڪري ٿي، ۽ ان جو استعمال اسان جي پروگرامن جي ڪم کي تيز ڪري ٿو. ڪيترن ئي ڪيسن ۾ - ڪيترائي ڀيرا. پر اهو ڪجهه به ناهي ته ملٽي ٿريڊنگ هڪ پيچيده موضوع سمجهي وڃي ٿي. آخرڪار، جيڪڏهن غلط استعمال ڪيو وڃي، اهو انهن کي حل ڪرڻ بدران مسئلا پيدا ڪري ٿو. جڏهن مان چوان ٿو ”مسئلا پيدا ڪريو،“ منهنجو مطلب ڪجهه خلاصو نه آهي. اتي ٻه خاص مسئلا آهن جيڪي ملٽي ٿريڊنگ سبب ٿي سگهن ٿيون: تعطل ۽ نسل جي حالت. Deadlock هڪ اهڙي صورتحال آهي جنهن ۾ ڪيترائي موضوع هڪ ٻئي تي قبضو ڪيل وسيلن جي انتظار ۾ آهن، ۽ انهن مان ڪو به جاري نه ٿو ڪري سگهي. اسان ان بابت مستقبل جي ليڪچرن ۾ وڌيڪ ڳالهائينداسين، پر هن وقت لاءِ هي مثال ڪافي ٿيندو: جاوا ۾ ملٽي ٽريڊنگ: جوهر، فائدا ۽ عام نقصانات - 4 تصور ڪريو ته ٿريڊ-1 ڪجهه Object-1 سان ڪم ڪري رهيو آهي، ۽ thread-2 Object-2 سان ڪم ڪري رهيو آهي. پروگرام هن طرح لکيل آهي:
  1. Thread-1 Object-1 سان ڪم ڪرڻ بند ڪري ڇڏيندو ۽ جيئن ئي Thread-2 Object-2 سان ڪم ڪرڻ بند ڪندو ۽ Object-1 ڏانهن سوئچ ڪندو.
  2. Thread-2 Object-2 سان ڪم ڪرڻ بند ڪندو ۽ جيئن ئي Thread-1 Object 1 سان ڪم ڪرڻ بند ڪندو ۽ Object-2 ڏانهن سوئچ ڪندو ته جيئن ئي Thread-1 Object-2 سان ڪم ڪرڻ بند ڪري.
جيتوڻيڪ multithreading جي گهڻي ڄاڻ کان سواء، توهان آساني سان سمجهي سگهو ٿا ته ان مان ڪجھ به نه ايندو. موضوع ڪڏهن به جڳهون تبديل نه ڪندا ۽ هميشه هڪ ٻئي جو انتظار ڪندا. غلطي ظاهر لڳي ٿي، پر حقيقت ۾ اهو ناهي. توھان آساني سان ان کي پروگرام ۾ داخل ڪري سگھو ٿا. اسان ڪوڊ جي مثالن تي نظر ڪنداسين جيڪي ھيٺ ڏنل ليڪچرن ۾ بند ٿيڻ جو سبب بڻجن ٿا. رستي جي ذريعي، ڪوورا هڪ بهترين حقيقي زندگي جو مثال بيان ڪري ٿو ته هڪ تعطل ڇا آهي . ”هندستان جي ڪجهه رياستن ۾، اهي توهان کي زرعي زمين نه وڪڻندا جيستائين توهان هڪ هاريءَ جي طور تي رجسٽر ٿيل نه آهيو. تنهن هوندي، توهان کي هاريء جي طور تي رجسٽر نه ڪيو ويندو جيڪڏهن توهان وٽ زرعي زمين نه آهي. عظيم، مان ڇا ٿو چوان! :) هاڻي نسل جي حالت بابت - نسل جي حالت. جاوا ۾ ملٽي ٿريڊنگ: جوهر، فائدا ۽ عام نقصانات - 5نسل جي حالت هڪ گھڻ-ٽيڊڊ سسٽم يا ايپليڪيشن ۾ هڪ ڊزائن جي نقص آهي جنهن ۾ سسٽم يا ايپليڪيشن جو آپريشن ان حڪم تي منحصر آهي جنهن ۾ ڪوڊ جا حصا جاري ڪيا ويا آهن. ھلندڙ سلسلي سان مثال ياد رکو:
public class MyFirstThread extends Thread {

   @Override
   public void run() {
       System.out.println("Выполнен поток " + getName());
   }
}

public class Main {

   public static void main(String[] args) {

       for (int i = 0; i < 10; i++) {

           MyFirstThread thread = new MyFirstThread();
           thread.start();
       }
   }
}
هاڻي تصور ڪريو ته اهو پروگرام روبوٽ جي آپريشن جو ذميوار آهي جيڪو کاڌو تيار ڪري ٿو! Thread-0 انڊن کي فرج مان ڪڍي ٿو. اسٽريم 1 اسٽو تي موڙ. اسٽريم-2 هڪ فرائينگ پين ڪڍي ٿو ۽ ان کي اسٽو تي رکي ٿو. اسٽريم 3 اسٽو تي باهه ٻاري. وهڪرو 4 پين ۾ تيل وجهي. اسٽريم 5 انڊن کي ٽوڙي ٿو ۽ انھن کي فرائينگ پين ۾ وجھي ٿو. اسٽريم 6 شيل کي ڪچري جي بن ۾ اڇلائي ٿو. اسٽريم-7 گرميءَ کان ختم ٿيل انڊس کي ختم ڪري ٿو. پوٽوڪ-8 هڪ پليٽ تي ڇڪيل انڊا رکي ٿو. اسٽريم 9 برتن ڌوئڻ. اسان جي پروگرام جا نتيجا ڏسو: ٿريڊ-0 تي عملدرآمد ٿيل ٿريڊ-2 ٿريڊ تي عمل ڪيو ويو ٿريڊ-1 ٿريڊ تي عمل ڪيو ويو ٿريڊ-4 ٿريڊ تي عمل ڪيو ويو ٽريڊ-9 ٿريڊ تي عمل ڪيو ويو ٿريڊ-5 ٿريڊ تي عمل ڪيو ويو ٿريڊ-8 ٿريڊ تي عمل ڪيو ويو ٿريڊ-7 ٿريڊ تي عمل ڪيو ويو thread executed -3 Thread-6 thread execute. ڇا اسڪرپٽ مزيدار آهي؟ :). تسلسل جي معمولي خلاف ورزي تي، اسان جو باورچی خانه دوزخ ۾ بدلجي ٿو، ۽ هڪ روبوٽ چريو ٿي ويو آهي، ان جي چوڌاري هر شيء کي تباهه ڪري ٿو. اهو پڻ هڪ عام مسئلو آهي ملٽي ٿريڊ پروگرامنگ ۾، جنهن بابت توهان هڪ کان وڌيڪ ڀيرا ٻڌندا. ليڪچر جي آخر ۾، مان توهان کي ملٽي ٿريڊنگ تي هڪ ڪتاب جي سفارش ڪرڻ چاهيندس.
جاوا ۾ ملٽي ٿريڊنگ: جوهر، نفعو ۽ عام خاميون - 6
"جاوا اتفاق راءِ عمل ۾" 2006 ۾ واپس لکيو ويو، پر ان جي لاڳاپي کي نه وڃائي ڇڏيو آهي. اهو جاوا ۾ ملٽي ٿريڊ پروگرامنگ جو احاطو ڪري ٿو، بنياديات کان شروع ٿئي ٿو ۽ سڀ کان وڌيڪ عام غلطين ۽ اينٽي پيٽرن جي فهرست سان ختم ٿئي ٿو. جيڪڏهن توهان ڪڏهن به هڪ ملٽي ٿريڊ پروگرامنگ گرو بڻجڻ جو فيصلو ڪيو، هي ڪتاب ضرور پڙهڻ گهرجي. ملنداسين ايندڙ ليڪچرن تي! :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION