کلف ڪلڪ سان زبردست انٽرويو، جاوا ۾ JIT جي تاليف جو پيء

کلف ڪلڪ سان زبردست انٽرويو، جاوا ۾ JIT جي تاليف جو پيءڪلف ڪلڪ ڪريو Cratus جو CTO (عمل جي بهتري لاءِ IoT سينسرز)، ڪيترن ئي ڪامياب نڪتن سان گڏ ڪيترن ئي شروعاتن جو باني ۽ شريڪ باني (بشمول راڪيٽ ريئل ٽائم اسڪول، نيورينسڪ ۽ H2O.ai). ڪلف 15 سالن جي عمر ۾ پنهنجو پهريون ڪمپيلر لکيو (Pascal for TRS Z-80)! هو جاوا ۾ C2 تي پنهنجي ڪم لاءِ مشهور آهي (The Sea of ​​Nodes IR). هي مرتب ڪندڙ دنيا کي ڏيکاري ٿو ته JIT اعلي معيار جو ڪوڊ پيدا ڪري سگهي ٿي، جيڪو جاوا جي اڀرڻ ۾ هڪ مکيه جديد سافٽ ويئر پليٽ فارمن مان هڪ هو. پوءِ ڪلف ايزول سسٽم کي 864-ڪور مين فريم ٺاهڻ ۾ مدد ڪئي خالص جاوا سافٽ ويئر سان جيڪا 500 مليسيڪنڊن اندر 10-گيگا بائيٽ جي هيپ تي جي سي پيز کي سپورٽ ڪري ٿي. عام طور تي، ڪلف JVM جي سڀني شعبن تي ڪم ڪرڻ جو انتظام ڪيو.

 
هي هيبراپوسٽ ڪلف سان هڪ بهترين انٽرويو آهي. اسان هيٺ ڏنل عنوانن تي ڳالهائينداسين:

  • گھٽ سطح جي اصلاحن ڏانھن منتقلي
  • ڪيئن هڪ وڏو refactoring ڪرڻ
  • قيمت ماڊل
  • گھٽ سطح جي اصلاح جي تربيت
  • ڪارڪردگي بهتر ڪرڻ جا عملي مثال
  • توهان جي پنهنجي پروگرامنگ ٻولي ڇو ٺاهيو
  • ڪارڪردگي انجنيئر ڪيريئر
  • ٽيڪنيڪل چئلينجز
  • رجسٽر مختص ۽ ملٽي ڪور بابت ٿورڙو
  • زندگي ۾ سڀ کان وڏو چئلينج

انٽرويو پاران ڪيل آهي:

  • آندري ستارين Amazon ويب سروسز کان. پنهنجي ڪيريئر ۾، هن مڪمل طور تي مختلف منصوبن ۾ ڪم ڪرڻ جو انتظام ڪيو: هن Yandex ۾ NewSQL ورهايل ڊيٽابيس، ڪاسپرسڪي ليب ۾ ڪلائوڊ ڊيٽڪشن سسٽم، Mail.ru ۾ هڪ ملٽي پليئر گيم ۽ Deutsche Bank ۾ پرڏيهي مٽاسٽا جي قيمتن کي ڳڻڻ لاءِ هڪ خدمت جي آزمائش ڪئي. وڏي پيماني تي پس منظر ۽ ورهايل سسٽم کي جانچڻ ۾ دلچسپي.
  • Vladimir Sitnikov Netcracker کان. NetCracker OS جي ڪارڪردگي ۽ اسپيبلٽي تي ڏهه سال ڪم، ٽيليڪ آپريٽرز پاران استعمال ٿيل سافٽ ويئر نيٽ ورڪ ۽ نيٽورڪ سامان جي انتظام جي عمل کي خودڪار ڪرڻ لاء. جاوا ۽ Oracle ڊيٽابيس ڪارڪردگي مسئلن ۾ دلچسپي. سرڪاري PostgreSQL JDBC ڊرائيور ۾ درجن کان وڌيڪ ڪارڪردگي سڌارن جو ليکڪ.

گھٽ سطح جي اصلاحن ڏانھن منتقلي

آوري: توهان JIT جي تاليف، جاوا، ۽ ڪارڪردگي جي ڪم جي دنيا ۾ عام طور تي هڪ وڏو نالو آهيو، صحيح؟ 

ڪلف: ائين آهي!

آوري: اچو ته ڪارڪردگي جي ڪم بابت ڪجهه عام سوالن سان شروع ڪريون. توهان ڇا ٿا سوچيو ته اعلي سطحي ۽ گهٽ-سطح جي اصلاحن جي وچ ۾ چونڊ جي باري ۾ جيئن سي پي يو سطح تي ڪم ڪرڻ؟

ڪلف: ها، هتي سڀ ڪجھ سادو آهي. تيز ترين ڪوڊ اهو آهي جيڪو ڪڏهن به نه هلندو آهي. تنهن ڪري، توهان کي هميشه هڪ اعلي سطح کان شروع ڪرڻ جي ضرورت آهي، الگورتھم تي ڪم ڪريو. هڪ بهتر O نوٽشن هڪ بدتر O نوٽشن کي مات ڏيندو، جيستائين ڪجهه ڪافي وڏا مستقل مداخلت نه ڪن. گھٽ-سطح شيون آخري وڃو. عام طور تي، جيڪڏهن توهان پنهنجي باقي اسٽيڪ کي چڱي طرح بهتر ڪيو آهي ۽ اڃا به ڪجهه دلچسپ شيون رهجي ويون آهن، اهو گهٽ سطح آهي. پر هڪ اعلي سطح کان ڪيئن شروع ڪجي؟ توهان کي ڪيئن خبر آهي ته ڪافي اعلي سطحي ڪم ڪيو ويو آهي؟ خير... هرگز نه. نه تيار ٿيل ترڪيبون آهن. توهان کي مسئلو سمجهڻ جي ضرورت آهي، فيصلو ڪيو ته توهان ڇا ڪرڻ وارا آهيو (جيئن ته مستقبل ۾ غير ضروري قدم نه کڻڻ) ۽ پوء توهان پروفائلر کي ظاهر ڪري سگهو ٿا، جيڪو ڪجهه مفيد چئي سگهي ٿو. ڪجهه نقطي تي، توهان پاڻ کي محسوس ڪيو ته توهان غير ضروري شين کان نجات حاصل ڪئي آهي ۽ اهو وقت آهي ڪجهه گهٽ-سطح جي فائن ٽيوننگ ڪرڻ جو. هي يقيناً هڪ خاص قسم جو فن آهي. اتي گھڻا ماڻھو آھن جيڪي غير ضروري شيون ڪري رھيا آھن، پر ايتري تيزيءَ سان ھلندا آھن جو انھن وٽ پيداوار جي باري ۾ پريشان ٿيڻ جو وقت ئي ڪونھي. پر اهو آهي جيستائين سوال واضح طور تي پيدا ٿئي. عام طور تي 99٪ وقت ڪنهن کي به پرواه ناهي ته آئون ڇا ڪريان، ان وقت تائين جڏهن هڪ اهم شيء نازڪ رستي تي اچي ٿي جنهن جي ڪنهن کي به پرواه ناهي. ۽ هتي هرڪو توهان کي تنگ ڪرڻ شروع ڪري ٿو "ڇو اهو شروع کان مڪمل طور تي ڪم نه ڪيو." عام طور تي، اتي هميشه ڪارڪردگي ۾ بهتر ڪرڻ لاء ڪجهه آهي. پر 99٪ وقت جو توهان وٽ ڪوبه ليڊ ناهي! توھان صرف ڪوشش ڪري رھيا آھيو ڪجھ ڪم ڪرڻ ۽ ان عمل ۾ توھان سمجھو ٿا ته ڇا ضروري آھي. توهان ڪڏهن به اڳ ۾ نه ٿا ڄاڻو ته هي ٽڪرو مڪمل ٿيڻ جي ضرورت آهي، تنهنڪري، حقيقت ۾، توهان کي هر شيء ۾ مڪمل هجڻ گهرجي. پر اهو ناممڪن آهي ۽ توهان اهو نه ڪيو. اتي هميشه ٺيڪ ڪرڻ لاء ڪيتريون ئي شيون آهن - ۽ اهو مڪمل طور تي عام آهي.

ڪيئن هڪ وڏو refactoring ڪرڻ

آوري: توهان هڪ ڪارڪردگي تي ڪيئن ڪم ڪندا آهيو؟ هي هڪ ڪراس ڪٽڻ وارو مسئلو آهي. مثال طور، ڇا توهان ڪڏهن انهن مسئلن تي ڪم ڪيو آهي جيڪي موجوده ڪارڪردگي جي گھڻائي جي چونڪ مان پيدا ٿين ٿا؟

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

قيمت ماڊل

آوري: هڪ پوڊ ڪاسٽ ۾ توهان پيداوار جي حوالي سان قيمت جي ماڊل بابت ڳالهايو. ڇا توھان وضاحت ڪري سگھوٿا ته توھان جو مطلب ڇا آھي؟

ڪلف: يقيناً. مان هڪ دور ۾ پيدا ٿيو هو جڏهن پروسيسر جي ڪارڪردگي انتهائي اهم هئي. ۽ هي دور وري واپس اچي ٿو - قسمت بغير بغير ناهي. مون اٺ بٽ مشينن جي ڏينهن ۾ رهڻ شروع ڪيو؛ منهنجو پهريون ڪمپيوٽر 256 بائيٽ سان ڪم ڪيو. بلڪل بائيٽ. هر شيءِ تمام ننڍي هئي. هدايتون ڳڻڻ گهرجن، ۽ جيئن اسان پروگرامنگ ٻوليء جي اسٽيڪ کي اڳتي وڌڻ شروع ڪيو، ٻوليون وڌيڪ ۽ وڌيڪ وٺن ٿيون. اتي اسمبلر، پوءِ بنيادي، پوءِ سي، ۽ سي ڪيترن ئي تفصيلن جو خيال رکيو، جھڙوڪ رجسٽر مختص ڪرڻ ۽ ھدايت جي چونڊ. پر اتي هر شيء بلڪل صاف هئي، ۽ جيڪڏهن مون هڪ متغير جي مثال ڏانهن اشارو ڪيو، ته پوء مون کي لوڊ ٿيندو، ۽ هن هدايت جي قيمت معلوم ٿئي ٿي. هارڊويئر مشين جي چڪر جو هڪ خاص تعداد پيدا ڪري ٿو، تنهنڪري مختلف شين جي عمل جي رفتار جو اندازو لڳائي سگهجي ٿو صرف انهن سڀني هدايتن کي شامل ڪندي جيڪي توهان هلائڻ وارا آهيو. هر موازن/امتحان/شاخ/ڪال/لوڊ/اسٽور کي شامل ڪري سگهجي ٿو ۽ چيو وڃي ٿو: اهو توهان لاءِ عمل جو وقت آهي. جڏهن ڪارڪردگي بهتر ڪرڻ تي ڪم ڪري رهيا آهيو، توهان کي ضرور ڌيان ڏيڻو پوندو ته ڪهڙا انگ ننڍڙن گرم سائيڪلن سان ملن ٿا. 
پر جيئن ئي توهان جاوا، پٿون ۽ ساڳين شين تي سوئچ ڪندا آهيو، توهان تمام جلدي گهٽ-سطح هارڊويئر کان پري ٿي ويندا آهيو. جاوا ۾ حاصل ڪندڙ کي سڏڻ جي قيمت ڇا آهي؟ جيڪڏهن هاٽ اسپاٽ ۾ JIT صحيح آهي اندر اندر، اهو لوڊ ٿيندو، پر جيڪڏهن اهو ائين نه ڪيو، اهو هڪ فنڪشن ڪال هوندو. جيئن ته ڪال هڪ گرم لوپ تي آهي، اهو ان لوپ ۾ ٻين سڀني اصلاحن کي ختم ڪري ڇڏيندو. تنهن ڪري، حقيقي قيمت تمام گهڻو ٿيندو. ۽ توهان فوري طور تي ڪوڊ جي هڪ ٽڪڙي کي ڏسڻ جي صلاحيت وڃائي ڇڏيو ۽ سمجھو ته اسان کي پروسيسر ڪلاڪ جي رفتار، ميموري ۽ ڪيش جي استعمال جي لحاظ سان عمل ڪرڻ گهرجي. اهو سڀ ڪجهه دلچسپ ٿي ويندو صرف جيڪڏهن توهان واقعي ڪارڪردگي ۾ وڃو.
هاڻي اسان پاڻ کي اهڙي صورتحال ۾ ڳولي رهيا آهيون جتي پروسيسر جي رفتار هڪ ڏهاڪي تائين مشڪل سان وڌي وئي آهي. پراڻا ڏينهن موٽي آيا آهن! توھان ھاڻي ڳڻپ نٿا ​​ڪري سگھو سٺي سنگل ٿريڊ ڪارڪردگي تي. پر جيڪڏهن اوچتو توهان متوازي ڪمپيوٽنگ ۾ داخل ٿيو، اهو ناقابل يقين حد تائين ڏکيو آهي، هرڪو توهان کي جيمز بانڊ وانگر ڏسندو آهي. هتي ڏهه ڀيرا تيز رفتاري عام طور تي انهن هنڌن تي ٿيندي آهي جتي ڪنهن کي ڪجهه خراب ڪيو آهي. اتفاق سان تمام گهڻي محنت جي ضرورت آهي. انهي کي حاصل ڪرڻ لاء XNUMXx رفتار، توهان کي سمجهڻ جي ضرورت آهي قيمت ماڊل. ان جي قيمت ڇا ۽ ڪيتري آهي؟ ۽ هن کي ڪرڻ لاء، توهان کي سمجهڻ جي ضرورت آهي ته زبان ڪيئن هيٺئين هارڊويئر تي ٺهڪي اچي ٿي.
مارٽن ٿامپسن پنهنجي بلاگ لاءِ هڪ بهترين لفظ چونڊيو آهي مشيني همدردي! توهان کي اهو سمجهڻ جي ضرورت آهي ته هارڊويئر ڇا ڪرڻ وارو آهي، اهو ڪيئن ڪندو، ۽ اهو ڇو ڪندو آهي جيڪو اهو پهرين جڳهه ۾ ڪري ٿو. ھن کي استعمال ڪندي، ھدايتن کي ڳڻڻ شروع ڪرڻ بلڪل آسان آھي ۽ اھو معلوم ڪرڻ جو وقت ڪٿي وڃي رھيو آھي. جيڪڏهن توهان وٽ مناسب تربيت نه آهي، توهان صرف هڪ اونداهي ڪمري ۾ ڪارو ٻلي ڳولي رهيا آهيو. مان ماڻهن کي هر وقت ڪارڪردگي کي بهتر ڪندي ڏسان ٿو جن کي خبر ناهي ته اهي ڇا ڪري رهيا آهن. اهي تمام گهڻو ڏکيا آهن ۽ گهڻو ترقي نه ڪري رهيا آهن. ۽ جڏهن مان ڪوڊ جو ساڳيو ٽڪڙو کڻان ٿو، ڪجهه ننڍڙن هيڪس ۾ سلپ ڪريو ۽ هڪ پنج يا ڏهه ڀيرا اسپيڊ اپ حاصل ڪريو، اهي هن طرح آهن: خير، اهو صحيح ناهي، اسان اڳ ۾ ئي ڄاڻون ٿا ته توهان بهتر آهيو. عجب. مان ڇا جي باري ۾ ڳالهائي رهيو آهيان ... قيمت ماڊل بابت آهي ته توهان ڪهڙي قسم جو ڪوڊ لکو ٿا ۽ وڏي تصوير ۾ اهو اوسط تي ڪيترو تيز هلندو آهي.

آوري: ۽ توهان پنهنجي سر ۾ اهڙي مقدار کي ڪيئن رکي سگهو ٿا؟ ڇا اهو وڌيڪ تجربو سان حاصل ڪيو ويو آهي، يا؟ اهڙو تجربو ڪٿان ايندو؟

ڪلف: خير، مون پنهنجو تجربو آسان طريقي سان حاصل نه ڪيو. مون انهن ڏينهن ۾ اسيمبليءَ ۾ پروگرام ڪيو جڏهن توهان هر هڪ هدايت کي سمجهي سگهو ٿا. اهو بيوقوف آواز آهي، پر ان کان پوء Z80 هدايتون سيٽ هميشه منهنجي سر ۾ رهي ٿو، منهنجي يادگيري ۾. مون کي ڳالهائڻ جي هڪ منٽ اندر ماڻهن جا نالا ياد ناهن، پر مون کي 40 سال اڳ لکيل ڪوڊ ياد آهي. اهو عجيب آهي، اهو هڪ سنڊوم وانگر ڏسڻ ۾ اچي ٿو"بيوقوف سائنسدان».

گھٽ سطح جي اصلاح جي تربيت

آوري: داخل ٿيڻ جو ڪو آسان رستو آھي ڇا؟

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

ڪارڪردگي بهتر ڪرڻ جا عملي مثال

آوري: پيداوار تي ڪم ڪرڻ وقت توهان کي ٻيو ڇا ڌيان ڏيڻ گهرجي؟

ڪلف: ڊيٽا جي جوڙجڪ. رستي ۾، ها، مون انهن ڪلاسن کي ڊگهي عرصي کان نه سيکاريو آهي ... راکٽ اسڪول. اها مذاق هئي، پر ان کي تمام گهڻي ڪوشش جي ضرورت آهي، ۽ مون کي پڻ زندگي آهي! ٺيڪ. تنهن ڪري، هڪ وڏي ۽ دلچسپ ڪلاس ۾، ”توهان جي ڪارڪردگي ڪيڏانهن وڃي ٿي،“ مون شاگردن کي هڪ مثال ڏنو: اڍائي گيگا بائيٽ فينٽيڪ ڊيٽا هڪ CSV فائل مان پڙهيا ويا ۽ پوءِ انهن کي حساب ڪرڻو پيو ته وڪرو ڪيل شين جو تعداد. . باقاعده چيڪ مارڪيٽ ڊيٽا. UDP پيڪٽس 70s کان ٽيڪسٽ فارميٽ ۾ تبديل ڪيا ويا. شکاگو مرڪنٽائل ايڪسچينج - هر قسم جون شيون جهڙوڪ مکڻ، مکڻ، سويابين، اهڙيون شيون. اهو ضروري هو ته انهن شين کي ڳڻڻ، ٽرانزيڪشن جو تعداد، پئسن ۽ سامان جي حرڪت جي اوسط مقدار، وغيره. اهو تمام سادو واپاري رياضي آهي: پراڊڪٽ ڪوڊ ڳولهيو (جيڪو هيش ٽيبل ۾ 1-2 اکر آهي)، رقم حاصل ڪريو، ان کي واپار جي ھڪڙي سيٽ ۾ شامل ڪريو، حجم شامل ڪريو، قيمت شامل ڪريو، ۽ ڪجھ ٻيون شيون. بلڪل سادي رياضي. رانديڪن تي عمل درآمد بلڪل سادو هو: هر شيءِ هڪ فائل ۾ آهي، مان فائل پڙهان ٿو ۽ ان ذريعي منتقل ڪريان ٿو، انفرادي رڪارڊن کي جاوا تارن ۾ ورهائي، انهن ۾ ضروري شيون ڳوليان ٿو ۽ مٿي بيان ڪيل رياضي مطابق انهن کي شامل ڪريان ٿو. ۽ اهو ڪجهه گهٽ رفتار تي ڪم ڪري ٿو.

هن طريقي سان، اهو واضح آهي ته ڇا ٿي رهيو آهي، ۽ متوازي ڪمپيوٽنگ مدد نه ڪندي، صحيح؟ اهو ظاهر ٿئي ٿو ته ڪارڪردگي ۾ پنج ڀيرا اضافو صرف صحيح ڊيٽا جي جوڙجڪ کي چونڊڻ سان حاصل ڪري سگهجي ٿو. ۽ اهو حيرت انگيز تجربيڪار پروگرامر پڻ! منهنجي خاص صورت ۾، چال اها هئي ته توهان کي گرم لوپ ۾ ميموري مختص نه ڪرڻ گهرجي. خير، اهو سڄو سچ ناهي، پر عام طور تي - توهان کي اجاگر نه ڪرڻ گهرجي "هڪ ڀيرو ايڪس ۾" جڏهن ايڪس ڪافي وڏو آهي. جڏهن X اڍائي گيگا بائيٽ آهي، توهان کي ڪجهه به مختص نه ڪرڻ گهرجي “هڪ ڀيرو في خط”، يا “هڪ ڀيرو في ليڪ”، يا “هڪ ڀيرو في فيلڊ”، اهڙي ڪا به شيءِ. هي اهو آهي جتي وقت گذاريو ويندو آهي. اهو ڪيئن ڪم ڪري ٿو؟ تصور ڪريو مون کي ڪال ڪرڻ String.split() يا BufferedReader.readLine(). Readline بائيٽ جي هڪ سيٽ مان هڪ اسٽرنگ ٺاهي ٿو جيڪو نيٽ ورڪ تي آيو آهي، هڪ ڀيرو هر لڪير لاءِ، هر هڪ سئو لکن لائينن لاءِ. مان هن لڪير کي وٺي، ان کي پارس ڪريان ٿو ۽ ان کي اڇلائي ڇڏيان. مان ان کي ڇو اڇلائي رهيو آهيان - چڱو، مون اڳ ۾ ئي پروسيس ڪيو آهي، اهو سڀ ڪجهه آهي. تنهن ڪري، انهن 2.7G مان پڙهڻ لاءِ هر بائيٽ لاءِ، ٻه اکر لڪير ۾ لکيا ويندا، يعني اڳ ۾ ئي 5.4G، ۽ مون کي انهن جي وڌيڪ ضرورت نه آهي، تنهن ڪري اهي اڇلايا ويا آهن. جيڪڏهن توهان ميموري بينڊوڊٿ کي ڏسو، اسان 2.7G لوڊ ڪريون ٿا جيڪو پروسيسر ۾ ميموري ۽ ميموري بس ذريعي وڃي ٿو، ۽ پوء ٻه ڀيرا وڌيڪ ميموري ۾ بيٺل لائن ڏانهن موڪليو ويو آهي، ۽ اهو سڀ ڪجهه خراب ٿي ويندو آهي جڏهن هر نئين لائين ٺاهي ويندي آهي. پر مون کي ان کي پڙهڻ جي ضرورت آهي، هارڊويئر ان کي پڙهي، جيتوڻيڪ هر شيء بعد ۾ ڀريل آهي. ۽ مون کي ان کي لکڻو پوندو ڇو ته مون هڪ لڪير ٺاهي آهي ۽ ڪيش مڪمل آهن - ڪيش 2.7G کي گڏ نٿو ڪري سگهي. تنهن ڪري، هر بائيٽ لاءِ آئون پڙهان ٿو، مان ٻه وڌيڪ بائيٽ پڙهان ٿو ۽ ٻه وڌيڪ بائيٽ لکان ٿو، ۽ آخر ۾ انهن جو تناسب 4:1 آهي - ان تناسب ۾ اسان ميموري بينڊوڊٿ ضايع ڪري رهيا آهيون. ۽ پوء اهو ظاهر ٿئي ٿو ته جيڪڏهن آئون ڪندس String.split() - هي آخري ڀيرو نه آهي جڏهن مان ائين ڪري رهيو آهيان، شايد اندر 6-7 فيلڊس هوندا. تنهن ڪري CSV پڙهڻ جو کلاسک ڪوڊ ۽ پوءِ تارن کي پارس ڪرڻ جي نتيجي ۾ 14:1 جي ميموري بينڊوڊٿ ضايع ٿي ويندي آهي جيڪا توهان اصل ۾ حاصل ڪرڻ چاهيو ٿا. جيڪڏهن توهان انهن چونڊن کي اڇلائي ڇڏيو، توهان حاصل ڪري سگهو ٿا پنج ڀيرا تيز رفتار.

۽ اهو ايترو ڏکيو ناهي. جيڪڏهن توهان ڪوڊ کي ساڄي زاويه کان ڏسو، اهو سڀ ڪجهه بلڪل سادو ٿي ويندو آهي جڏهن توهان مسئلي کي محسوس ڪيو. توهان کي مڪمل طور تي ميموري کي مختص ڪرڻ بند نه ڪرڻ گهرجي: صرف مسئلو اهو آهي ته توهان ڪجهه مختص ڪريو ٿا ۽ اهو فوري طور تي مري ويندو آهي، ۽ رستي ۾ اهو هڪ اهم وسيلو ساڙي ٿو، جيڪو هن صورت ۾ ميموري بينڊوڊٿ آهي. ۽ هي سڀ نتيجو پيداوار ۾ گهٽتائي ۾. x86 تي توهان کي عام طور تي پروسيسر سائيڪل کي فعال طور تي ساڙڻ جي ضرورت آهي، پر هتي توهان تمام گهڻو اڳ ياداشت کي ساڙي ڇڏيو. حل اهو آهي ته خارج ٿيڻ جي مقدار کي گھٽايو وڃي. 
مسئلو جو ٻيو حصو اهو آهي ته جيڪڏهن توهان پروفائلر هلائيندا آهيو جڏهن ميموري پٽي ختم ٿي ويندي آهي، صحيح جڏهن اهو ٿئي ٿو، توهان عام طور تي ڪيش جي واپس اچڻ جو انتظار ڪري رهيا آهيو ڇو ته اهو گندگي سان ڀريل آهي جيڪو توهان صرف پيدا ڪيو آهي، اهي سڀئي لائينون. تنهن ڪري، هر لوڊ يا اسٽور جو آپريشن سست ٿي ويندو آهي، ڇاڪاڻ ته اهي ڪيش مسز ڏانهن ويندا آهن - سڄو ڪيش سست ٿي چڪو آهي، ڪچري کي ڇڏڻ جي انتظار ۾. تنهن ڪري، پروفائلر صرف ڏيکاريندو گرم بي ترتيب شور سڄي لوپ ۾ گندو آهي - ڪوڊ ۾ ڪو به الڳ گرم هدايت يا جڳهه نه هوندي. رڳو شور. ۽ جيڪڏهن توهان GC سائيڪلن تي نظر رکون ٿا، اهي سڀئي نوجوان نسل ۽ سپر تيز آهن - مائڪرو سيڪنڊ يا مليسيڪنڊ وڌ ۾ وڌ. آخرڪار، هي سڀ يادگيري فوري طور تي مري ويندو آهي. توهان اربين گيگا بائيٽ مختص ڪريو ٿا، ۽ هو انهن کي ڪٽي ٿو، ۽ انهن کي ڪٽي ٿو، ۽ انهن کي ٻيهر ڪٽي ٿو. اهو سڀ ڪجهه تمام جلدي ٿئي ٿو. اهو ظاهر ٿئي ٿو ته هتي سستا GC سائيڪلون آهن، سڄي چڪر سان گرم شور، پر اسان چاهيون ٿا 5x اسپيڊ اپ. هن وقت، توهان جي مٿي ۽ آواز ۾ ڪجهه بند ٿيڻ گهرجي: "اهو ڇو آهي؟!" ميموري پٽي اوور فلو کلاسک ڊيبگر ۾ ظاهر نه ڪيو ويو آهي؛ توهان کي هارڊويئر ڪارڪردگي انسداد ڊيبگر کي هلائڻ جي ضرورت آهي ۽ ان کي پنهنجو پاڻ ۽ سڌو سنئون ڏسو. پر انهن ٽنهي علامن مان اهو سڌو سنئون شڪ نٿو ڪري سگهجي. ٽيون علامه اهو آهي جڏهن توهان ڏسو ٿا ته جيڪو توهان نمايان ڪيو آهي، پروفائلر کان پڇو، ۽ هو جواب ڏئي ٿو: "توهان هڪ ارب قطار ٺاهيو، پر GC مفت ۾ ڪم ڪيو." جيئن ئي ائين ٿئي ٿو، توهان محسوس ڪيو ته توهان تمام گهڻيون شيون ٺاهي ڇڏيون آهن ۽ سڄي ياداشت واري لين کي ساڙي ڇڏيو آهي. اهو معلوم ڪرڻ جو هڪ طريقو آهي، پر اهو واضح ناهي. 

مسئلو ڊيٽا جي ڍانچي ۾ آهي: ننگي ڍانچي جي هيٺان هر شيء جيڪا ٿئي ٿي، اهو تمام وڏو آهي، اهو ڊسڪ تي 2.7G آهي، تنهنڪري هن شيء جي ڪاپي ٺاهڻ تمام ناپسنديده آهي - توهان ان کي فوري طور تي نيٽ ورڪ بائيٽ بفر تان لوڊ ڪرڻ چاهيو ٿا. رجسٽرن ۾ داخل ڪريو، جيئن ته پنج ڀيرا اڳتي ۽ پوئتي لڪير کي پڙهڻ ۽ لکڻ نه ڏيو. بدقسمتي سان، جاوا توهان کي اهڙي لائبريري نه ڏيندو آهي جيئن ته JDK جو حصو ڊفالٽ طرفان. پر هي معمولي آهي، صحيح؟ لازمي طور تي، اهي ڪوڊ جون 5-10 لائينون آهن جيڪي توهان جي پنهنجي بفر ٿيل اسٽرنگ لوڊر کي لاڳو ڪرڻ لاءِ استعمال ڪيون وينديون، جيڪو سٽرنگ ڪلاس جي رويي کي ورجائي ٿو، جڏهن ته هيٺئين بائيٽ بفر جي چوڌاري لفافو آهي. نتيجي طور، اهو ظاهر ٿئي ٿو ته توهان تقريبا ڪم ڪري رهيا آهيو ڄڻ ته تارن سان، پر حقيقت ۾ بفر ڏانهن اشارو ڪري رهيا آهن، ۽ خام بائيٽ ڪٿي به نقل نه ڪيا ويا آهن، ۽ اهڙي طرح ساڳيا بفر ٻيهر ٻيهر استعمال ڪيا ويندا آهن، ۽ آپريٽنگ سسٽم خوش آهي پنهنجي پاڻ تي اهي شيون وٺي جيڪي ان لاءِ ٺهيل آهن، جهڙوڪ انهن بائيٽ بفرن جي لڪيل ڊبل بفرنگ، ۽ توهان هاڻي غير ضروري ڊيٽا جي لامحدود وهڪرو ذريعي پيس نه رهيا آهيو. رستي ۾، ڇا توهان سمجهي رهيا آهيو ته جڏهن GC سان ڪم ڪري رهيا آهيو، اها ضمانت آهي ته هر ميموري مختص ڪيل پروسيسر کي آخري GC چڪر کان پوء نظر نه ايندي؟ تنهن ڪري، اهو سڀ ڪجهه ممڪن طور تي ڪيش ۾ نه ٿي سگهي، ۽ پوء هڪ 100٪ ضمانت واري مس ٿئي ٿي. جڏهن هڪ پوائنٽر سان ڪم ڪري رهيو آهي، x86 تي، ميموري مان هڪ رجسٽر کي ختم ڪرڻ ۾ 1-2 ڪلاڪ چڪر لڳن ٿا، ۽ جيترو جلدي اهو ٿئي ٿو، توهان ادا ڪريو، ادا ڪريو، ادا ڪريو، ڇاڪاڻ ته ميموري تمام آن آهي. نو ڪيچ - ۽ هي ميموري مختص ڪرڻ جي قيمت آهي. حقيقي قدر.

ٻين لفظن ۾، ڊيٽا جي جوڙجڪ کي تبديل ڪرڻ لاء سڀ کان وڏو شيء آهي. ۽ هڪ دفعو توهان محسوس ڪيو ته توهان غلط ڊيٽا جي جوڙجڪ کي چونڊيو آهي جيڪو بعد ۾ ڪارڪردگي کي ختم ڪري ڇڏيندو، عام طور تي تمام گهڻو ڪم ڪرڻو پوندو، پر جيڪڏهن توهان نه ڪيو، شيون خراب ٿي وينديون. سڀ کان پهريان، توهان کي ڊيٽا جي جوڙجڪ بابت سوچڻ جي ضرورت آهي، اهو ضروري آهي. هتي بنيادي قيمت ٿلهي ڊيٽا جي جوڙجڪ تي پوي ٿي، جيڪي "مون ڊيٽا ڍانچي X کي ڊيٽا جي جوڙجڪ Y ۾ نقل ڪيو آهي، ڇاڪاڻ ته مون کي Y جي شڪل بهتر پسند آهي" جي انداز ۾ استعمال ٿيڻ شروع ڪيو آهي. پر ڪاپي آپريشن (جيڪو سستو لڳي ٿو) اصل ۾ ميموري بينڊوڊٿ کي ضايع ڪري ٿو ۽ اهو ئي آهي جتي تمام ضايع ٿيل عملدرآمد وقت دفن ٿيل آهي. جيڪڏهن مون وٽ JSON جو هڪ وڏو اسٽرنگ آهي ۽ مان ان کي POJOs يا ڪنهن شيءِ جي هڪ منظم ڊوم ٽري ۾ تبديل ڪرڻ چاهيان ٿو، ته ان اسٽرنگ کي پارس ڪرڻ ۽ POJO کي تعمير ڪرڻ، ۽ پوءِ POJO کي ٻيهر رسائي حاصل ڪرڻ، نتيجي ۾ غير ضروري خرچ ٿيندو - اهو آهي. سستو ناهي. بجاءِ جيڪڏهن توهان POJOs جي چوڌاري ڊوڙندا آهيو گهڻو ڪري توهان جي هڪ تار جي چوڌاري ڊوڙڻ کان. بند ڪري ڇڏيو، توھان بدران ڪوشش ڪري سگھوٿا تار کي ڊڪرپٽ ڪرڻ ۽ صرف ان کي ڪڍيو جيڪو توھان کي ضرورت آھي اتان کان، ان کي ڪنھن POJO ۾ تبديل ڪرڻ کان سواءِ. جيڪڏهن اهو سڀ ڪجهه اهڙي رستي تي ٿئي ٿو جتان وڌ کان وڌ ڪارڪردگي گهربل آهي، توهان لاءِ ڪو به POJO نه آهي، توهان کي ڪنهن نه ڪنهن طرح سڌي طرح لڪير ۾ داخل ٿيڻ جي ضرورت آهي.

توهان جي پنهنجي پروگرامنگ ٻولي ڇو ٺاهيو

آوري: توهان چيو ته قيمت جي نموني کي سمجهڻ لاء، توهان کي پنهنجي ننڍڙي ٻولي لکڻ جي ضرورت آهي ...

ڪلف: ٻولي نه، پر هڪ مرتب ڪندڙ. ٻولي ۽ مرتب ٻه مختلف شيون آهن. سڀ کان اهم فرق توهان جي سر ۾ آهي. 

آوري: جيتريقدر مون کي خبر آهي، توهان پنهنجون ٻوليون ٺاهڻ جو تجربو ڪري رهيا آهيو. ڇا جي لاءِ؟

ڪلف: ڇاڪاڻ ته مان ڪري سگهان ٿو! مان نيم رٽائرڊ آهيان، تنهنڪري هي منهنجو شوق آهي. منهنجي سڄي زندگي ٻين ماڻهن جي ٻولين تي عمل ڪندي رهي آهي. مون پنهنجي ڪوڊنگ انداز تي پڻ تمام گهڻو ڪم ڪيو. ۽ ان ڪري جو مون کي ٻين ٻولين ۾ مسئلا نظر اچن ٿا. مان ڏسان ٿو ته واقف شيون ڪرڻ جا بهتر طريقا آهن. ۽ مان ان کي استعمال ڪندس. مان رڳو پاڻ ۾، جاوا ۾، پٿون ۾، ڪنهن ٻي ٻوليءَ ۾ مسئلا ڏسي ٿڪجي پيو آهيان. مان هاڻي React Native، JavaScript ۽ Elm ۾ هڪ شوق جي طور تي لکان ٿو جيڪو ريٽائرمينٽ بابت ناهي، پر فعال ڪم بابت. مان پٿون ۾ پڻ لکندو آهيان ۽ گهڻو ڪري، جاوا بيڪ اينڊس لاءِ مشين لرننگ تي ڪم جاري رکندو. ڪيتريون ئي مشهور ٻوليون آهن ۽ اهي سڀئي دلچسپ خاصيتون آهن. هرڪو پنهنجي طريقي سان سٺو آهي ۽ توهان انهن سڀني خاصيتن کي گڏ ڪرڻ جي ڪوشش ڪري سگهو ٿا. تنهن ڪري، مان انهن شين جو مطالعو ڪري رهيو آهيان جيڪي مون کي دلچسپي وٺن ٿا، ٻولي جو رويو، معقول لفظن سان گڏ اچڻ جي ڪوشش ڪري رهيا آهن. ۽ اڃا تائين مان ڪامياب آهيان! هن وقت مان ميموري سيمينٽڪس سان جدوجهد ڪري رهيو آهيان، ڇاڪاڻ ته مان چاهيان ٿو ته اهو سي ۽ جاوا ۾ هجي، ۽ لوڊ ۽ اسٽورن لاءِ مضبوط ميموري ماڊل ۽ ميموري سيمينٽڪس حاصل ڪجي. ساڳئي وقت، پاڻمرادو قسم جو اندازو لڳايو هاسڪيل ۾. هتي، مان ڪوشش ڪري رهيو آهيان Haskell-like type inference کي ميموري ڪم سان گڏ C ۽ Java ٻنهي ۾. اهو آهي جيڪو مان گذريل 2-3 مهينن کان ڪري رهيو آهيان، مثال طور.

آوري: جيڪڏهن توهان هڪ ٻولي ٺاهيندا آهيو جيڪا ٻين ٻولين کان بهتر پهلو وٺي، ڇا توهان سوچيو ٿا ته ڪو ماڻهو ان جي برعڪس ڪندو: پنهنجا خيال وٺو ۽ انهن کي استعمال ڪريو؟

ڪلف: هي بلڪل ائين آهي ته نئين ٻوليون ظاهر ٿين ٿيون! ڇو جاوا سي سان ملندڙ جلندڙ آهي؟ ڇاڪاڻ ته C هڪ سٺي نحو هئي جنهن کي هرڪو سمجهي ويو ۽ جاوا هن نحو مان متاثر ٿيو، قسم جي حفاظت، صفن جي حدن جي چڪاس، GC شامل ڪيو، ۽ انهن پڻ C مان ڪجهه شيون بهتر ڪيون. انهن پنهنجو پاڻ کي شامل ڪيو. پر انهن کي تمام گهڻو متاثر ڪيو ويو، صحيح؟ هر ڪو انهن جنات جي ڪلهن تي بيٺو آهي جيڪي توهان کان اڳ آيا هئا - اهڙيءَ طرح ترقي ٿيندي آهي.

آوري: جيئن مان سمجهان ٿو، توهان جي ٻولي ياداشت محفوظ ٿي ويندي. ڇا توهان ڪجهه لاڳو ڪرڻ جي باري ۾ سوچيو آهي جهڙوڪ زنگ مان قرض چيڪ ڪندڙ؟ توهان هن کي ڏٺو آهي، توهان هن جي باري ۾ ڇا سوچيو؟

ڪلف: خير، مان لکندو رهيو آهيان C عمر سالن کان، هي سڀ malloc ۽ مفت سان، ۽ دستي طور تي سڄي زندگي انتظام ڪري رهيو آهيان. توهان ڄاڻو ٿا، 90-95٪ دستي طور تي ڪنٽرول ٿيل زندگي جي وقت جي ساڳي جوڙجڪ آهي. ۽ اهو دستي طور تي ڪرڻ تمام گهڻو دردناڪ آهي. مان چاهيان ٿو ته مرتب ڪندڙ توهان کي صرف اهو ٻڌائي ته اتي ڇا ٿي رهيو آهي ۽ توهان پنهنجي عملن سان ڇا حاصل ڪيو. ڪجھ شين لاءِ، قرض جي چڪاس ڪندڙ هن کي دٻي مان ڪڍي ٿو. ۽ اهو خود بخود معلومات کي ظاهر ڪرڻ گهرجي، هر شيء کي سمجهڻ گهرجي، ۽ مون کي هن سمجهه کي پيش ڪرڻ سان به بوجھ نه ڏيڻ گهرجي. ان کي گھٽ ۾ گھٽ مقامي فرار جو تجزيو ڪرڻ گھرجي، ۽ رڳو جيڪڏھن اھو ناڪام ٿئي ٿو، ته پوءِ ان کي ٽائپ اينوٽيشنز شامل ڪرڻ جي ضرورت آھي جيڪي بيان ڪنديون حياتيءَ جو - ۽ اھڙي اسڪيم قرض جي جانچ ڪندڙ، يا حقيقت ۾ ڪنھن موجود ميموري چيڪر کان وڌيڪ پيچيده آھي. "سڀ ڪجھ ٺيڪ آهي" ۽ "مان ڪجھ به نه ٿو سمجھان" جي وچ ۾ انتخاب - نه، اتي ڪجھھ بھتر آھي. 
تنهن ڪري، جيئن ڪو ماڻهو سي ۾ تمام گهڻو ڪوڊ لکيو آهي، مان سمجهان ٿو ته خودڪار زندگي جي ڪنٽرول لاء سپورٽ حاصل ڪرڻ سڀ کان اهم شيء آهي. مان پڻ بيزار آهيان جاوا ڪيترو استعمال ڪري ٿو ميموري ۽ بنيادي شڪايت GC آهي. جڏهن توهان جاوا ۾ ميموري مختص ڪندا، توهان کي ميموري واپس نه ملندي جيڪا آخري GC چڪر ۾ مقامي هئي. اهو معاملو ٻولين ۾ وڌيڪ صحيح ياداشت جي انتظام سان ناهي. جيڪڏهن توهان malloc سڏين ٿا، توهان کي فوري طور تي ياداشت ملي ٿي جيڪا عام طور تي صرف استعمال ڪئي وئي هئي. عام طور تي توهان ميموري سان ڪجهه عارضي شيون ڪندا آهيو ۽ فوري طور تي ان کي واپس موٽايو. ۽ اهو فوري طور تي malloc تلاء ڏانهن موٽندو آهي، ۽ ايندڙ malloc چڪر ان کي ٻيهر ڪڍي ٿو. تنهن ڪري، حقيقي ياداشت جو استعمال گھٽجي ويو آهي هڪ ڏنل وقت تي جاندار شين جي سيٽ تائين، گڏوگڏ ليک. ۽ جيڪڏهن هر شي مڪمل طور تي اڻ وڻندڙ ​​​​طريقه ليڪ نه ٿي ٿئي، اڪثر ميموري ڪيش ۽ پروسيسر ۾ ختم ٿي ويندي آهي، ۽ اهو جلدي ڪم ڪري ٿو. پر ضرورت آهي تمام گهڻو دستي ياداشت جي انتظام سان malloc ۽ مفت سڏيو صحيح ترتيب ۾، صحيح جڳهه تي. مورچا هن کي پنهنجي طور تي صحيح طريقي سان سنڀالي سگهي ٿو، ۽ ڪيترن ئي ڪيسن ۾ اڃا به بهتر ڪارڪردگي ڏئي ٿو، ڇاڪاڻ ته ميموري جو استعمال صرف موجوده حساب سان محدود ڪيو ويو آهي - جيئن ته ميموري کي آزاد ڪرڻ لاء ايندڙ GC چڪر جو انتظار ڪرڻ جي مخالفت ڪئي وئي آهي. نتيجي طور، اسان کي ڪارڪردگي بهتر ڪرڻ لاء هڪ تمام دلچسپ طريقو مليو. ۽ ڪافي طاقتور - منهنجو مطلب آهي، مون اهڙيون شيون ڪيون جڏهن fintech لاء ڊيٽا پروسيسنگ، ۽ هن مون کي اٽڪل پنج ڀيرا جي رفتار حاصل ڪرڻ جي اجازت ڏني. اهو هڪ تمام وڏو واڌارو آهي، خاص طور تي هڪ دنيا ۾ جتي پروسيسر تيز نه ٿي رهيا آهن ۽ اسان اڃا تائين بهتري جي انتظار ۾ آهيون.

ڪارڪردگي انجنيئر ڪيريئر

آوري: مان عام طور تي ڪيريئر جي باري ۾ پڻ پڇڻ چاهيندس. توهان HotSpot تي پنهنجي JIT ڪم سان شهرت حاصل ڪئي ۽ پوءِ Azul ڏانهن وڌيو، جيڪا پڻ JVM ڪمپني آهي. پر اسان اڳ ۾ ئي سافٽ ويئر کان هارڊويئر تي وڌيڪ ڪم ڪري رهيا هئاسين. ۽ پوءِ اهي اوچتو بدلجي ويا بگ ڊيٽا ۽ مشين لرننگ ڏانهن، ۽ پوءِ فراڊ جي ڳولا ڏانهن. اهو ڪيئن ٿيو؟ اهي ترقي جا تمام مختلف علائقا آهن.

ڪلف: مان ڪافي عرصي کان پروگرام ڪري رهيو آهيان ۽ ڪافي مختلف ڪلاس وٺڻ جو انتظام ڪري چڪو آهيان. ۽ جڏهن ماڻهو چون ٿا ته: ”او، تون ئي آهين جنهن جاوا لاءِ JIT ڪئي!“، اهو هميشه مضحکہ خیز آهي. پر ان کان اڳ، مان پوسٽ اسڪرپٽ جي ڪلون تي ڪم ڪري رهيو هوس - اها ٻولي جيڪا ايپل هڪ ڀيرو پنهنجي ليزر پرنٽر لاءِ استعمال ڪئي هئي. ۽ ان کان اڳ مون فورٿ ٻولي تي عمل ڪيو. مان سمجهان ٿو ته مون لاءِ عام موضوع اوزار جي ترقي آهي. مون سڄي زندگي اوزار ٺاهيا آهن جن سان ٻيا ماڻهو پنهنجا سٺا پروگرام لکندا آهن. پر مان آپريٽنگ سسٽم، ڊرائيورز، ڪنيل ليول ڊيبگرز، او ايس ڊولپمينٽ لاءِ ٻولين جي ترقيءَ ۾ به شامل هئس، جن جي شروعات ننڍي هوندي هئي، پر وقت گذرڻ سان گڏ وڌيڪ پيچيده ٿيندي وئي. پر مکيه موضوع اڃا به اوزار جي ترقي آهي. منهنجي زندگي جو هڪ وڏو حصو ازول ۽ سج جي وچ ۾ گذريو، ۽ اهو جاوا بابت هو. پر جڏهن مان بگ ڊيٽا ۽ مشين لرننگ ۾ داخل ٿيو، مون پنهنجي فينسي ٽوپي کي واپس رکيو ۽ چيو، "او، هاڻي اسان وٽ هڪ غير معمولي مسئلو آهي، ۽ اتي تمام گهڻيون دلچسپ شيون ٿي رهيون آهن ۽ ماڻهو شيون ڪري رهيا آهن." هي هڪ عظيم ترقي وارو رستو آهي جيڪو وٺڻ لاءِ.

ها، مون کي واقعي ورهايل ڪمپيوٽنگ پسند آهي. منهنجي پهرين نوڪري سي ۾ هڪ شاگرد جي حيثيت ۾ هئي، هڪ اشتهاري منصوبي تي. اهو تقسيم ڪيو ويو ڪمپيوٽنگ Zilog Z80 چپس تي جيڪو اينالاگ OCR لاءِ ڊيٽا گڏ ڪري ٿو، هڪ حقيقي اينالاگ تجزيه ڪندڙ پاران تيار ڪيل. اهو هڪ ٿڌو ۽ مڪمل طور تي چريو موضوع هو. پر اتي مسئلا هئا، ڪجهه حصو صحيح طور تي سڃاڻي نه سگهيو، تنهنڪري توهان کي هڪ تصوير ڪڍڻي هئي ۽ ان کي ڪنهن شخص کي ڏيکاريو جيڪو اڳ ۾ ئي پنهنجي اکين سان پڙهي سگهي ٿو ۽ رپورٽ ڪري سگهي ٿو ته اهو ڇا چيو ويو آهي، ۽ تنهنڪري ڊيٽا سان گڏ نوڪريون هيون، ۽ اهي نوڪريون. پنهنجي ٻولي هئي. اتي ھڪڙو پس منظر ھو جنھن اھو سڀ عمل ڪيو - Z80s متوازي طور تي ھلندڙ vt100 ٽرمينلز سان گڏ ھلندو - ھڪڙو في شخص، ۽ ھڪڙو متوازي پروگرامنگ ماڊل ھو Z80 تي. ميموري جو ڪجهه عام ٽڪرو سڀني Z80s طرفان هڪ اسٽار جي ترتيب ۾ حصيداري ڪئي وئي آهي؛ پسمانده جهاز پڻ ورهايو ويو، ۽ رام جو اڌ نيٽ ورڪ ۾ ورهايو ويو، ۽ ٻيو اڌ نجي هو يا ڪنهن ٻئي ڏانهن ويو. هڪ بامعني پيچيده متوازي ورهايل نظام سان گڏ گڏيل... نيم شيئر ڪيل ياداشت. اهو ڪڏهن هو... مون کي ياد به ناهي، ڪٿي 80 واري ڏهاڪي جي وچ ۾. ڪافي وقت اڳ. 
ها، اچو ته فرض ڪريون ته 30 سال ڪافي وقت اڳ جي ڳالهه آهي، ورهايل ڪمپيوٽنگ سان لاڳاپيل مسئلا ڪافي عرصي کان موجود آهن؛ ماڻهو ڊگهي عرصي کان جنگ ۾ رهيا آهن. Beowulf- ڪلستر. اهڙا ڪلسٽر نظر اچن ٿا... مثال طور: هتي Ethernet آهي ۽ توهان جو تيز x86 هن Ethernet سان ڳنڍيل آهي، ۽ هاڻي توهان جعلي شيئر ڪيل ميموري حاصل ڪرڻ چاهيو ٿا، ڇاڪاڻ ته ان وقت ڪو به ورهايل ڪمپيوٽنگ ڪوڊنگ نٿو ڪري سگهي، اهو تمام ڏکيو هو ۽ ان ڪري اتي. x86 تي حفاظتي ميموري صفحن سان جعلي شيئر ڪيل ميموري هئي، ۽ جيڪڏهن توهان هن صفحي تي لکيو، ته پوءِ اسان ٻين پروسيسرز کي ٻڌايو ته جيڪڏهن اهي ساڳي شيئر ڪيل ميموري تائين رسائي ڪن ٿا، ته ان کي توهان کان لوڊ ڪرڻ جي ضرورت پوندي، ۽ اهڙي طرح ڪجهه مدد لاءِ پروٽوڪول وانگر. cache coherence ظاهر ٿيو ۽ ان لاءِ سافٽ ويئر. دلچسپ تصور. اصل مسئلو، يقينا، ٻيو ڪجهه هو. اهو سڀ ڪم ڪيو، پر توهان جلدي ڪارڪردگي جا مسئلا پيدا ڪيا، ڇاڪاڻ ته ڪو به سمجهي نه سگهيو پرفارمنس ماڊل سٺي سطح تي - ڪهڙي ياداشت جي رسائي جا نمونا هئا، انهي کي ڪيئن يقيني بڻايو وڃي ته نوڊس هڪ ٻئي کي ختم نه ڪن، وغيره.

H2O ۾ جيڪو مون سان آيو آهي اهو اهو آهي ته اهو ڊولپرز پاڻ آهن جيڪي اهو طئي ڪرڻ جا ذميوار آهن ته ڪٿي متوازي لڪيل آهي ۽ ڪٿي ناهي. مان هڪ ڪوڊنگ ماڊل کڻي آيو آهيان جيڪو اعليٰ ڪارڪردگي وارو ڪوڊ لکڻ آسان ۽ سادو بڻائي ٿو. پر سست رفتاري وارو ڪوڊ لکڻ ڏکيو آهي، خراب نظر ايندو. توهان کي سنجيدگي سان سست ڪوڊ لکڻ جي ڪوشش ڪرڻ جي ضرورت آهي، توهان کي غير معياري طريقا استعمال ڪرڻو پوندو. بريڪنگ ڪوڊ پهرين نظر ۾ نظر اچي ٿو. نتيجي طور، توھان عام طور تي ڪوڊ لکندا آھيو جيڪو تيز ھلندو آھي، پر توھان کي اھو معلوم ڪرڻو پوندو ته گڏيل ياداشت جي صورت ۾ ڇا ڪجي. اهو سڀ ڪجهه وڏين صفن سان جڙيل آهي ۽ اتي جو رويو متوازي جاوا ۾ غير مستحڪم وڏين صفن وانگر آهي. منهنجو مطلب آهي، تصور ڪريو ته ٻه موضوع هڪ متوازي صف ڏانهن لکن ٿا، انهن مان هڪ جيت، ۽ ٻيو، ان جي مطابق، هاري ٿو، ۽ توهان کي خبر ناهي ته ڪهڙو آهي. جيڪڏهن اهي غير مستحڪم نه آهن، پوء آرڊر ٿي سگهي ٿو جيڪو توهان چاهيو ٿا - ۽ اهو واقعي سٺو ڪم ڪري ٿو. ماڻهو واقعي عملن جي ترتيب جي باري ۾ خيال رکندا آهن، اهي صحيح هنڌن تي غير مستحڪم رکن ٿا، ۽ انهن کي اميد آهي ته ميموري سان لاڳاپيل ڪارڪردگي مسئلن جي صحيح هنڌن تي. ٻي صورت ۾، اهي صرف 1 کان N تائين لوپ جي صورت ۾ ڪوڊ لکندا، جتي N ڪجهه ٽريلين آهي، اميد ۾ ته سڀئي پيچيده ڪيس پاڻمرادو متوازي ٿي ويندا - ۽ اهو اتي ڪم نٿو ڪري. پر H2O ۾ اهو نه ته جاوا آهي ۽ نه اسڪالا؛ جيڪڏهن توهان چاهيو ته ان کي ”جاوا مائنس مائنس“ سمجهي سگهو ٿا. هي هڪ تمام واضح پروگرامنگ انداز آهي ۽ سادو سي يا جاوا ڪوڊ لکڻ جهڙو آهي لوپس ۽ آري سان. پر ساڳئي وقت، ياداشت تي عمل ڪري سگهجي ٿو terabytes ۾. مان اڃا تائين H2O استعمال ڪريان ٿو. مان ان کي وقت بوقت مختلف منصوبن ۾ استعمال ڪريان ٿو - ۽ اهو اڃا تائين تيز ترين شيءِ آهي، ان جي مقابلي ۾ درجنين ڀيرا تيز. جيڪڏهن توهان ڪالمن ڊيٽا سان بگ ڊيٽا ڪري رهيا آهيو، اهو تمام ڏکيو آهي H2O کي مات ڏيڻ.

ٽيڪنيڪل چئلينجز

آوري: توهان جي سڄي ڪيريئر ۾ توهان جو سڀ کان وڏو چئلينج ڪهڙو رهيو آهي؟

ڪلف: ڇا اسان مسئلي جي ٽيڪنيڪل يا غير ٽيڪنيڪل حصي تي بحث ڪري رهيا آهيون؟ مان چوندس ته سڀ کان وڏو چئلينج ٽيڪنيڪل نه آهن. 
جيئن ته ٽيڪنيڪل چئلينج لاء. مون صرف انهن کي شڪست ڏني. مون کي اها به خبر ناهي ته سڀ کان وڏو ڪهڙو هو، پر ڪجهه خوبصورت دلچسپ هئا جن ۾ ڪافي وقت، ذهني جدوجهد هئي. مان جڏهن سن ۾ ويس ته مون کي پڪ هئي ته مان هڪ تيز مرتبي وارو ٺاهيندس، ۽ سينيئرن جي هڪ ٽولي جواب ۾ چيو ته مان ڪڏهن به ڪامياب نه ٿيندس. پر مون هن رستي جي پيروي ڪئي، رجسٽري مختص ڪندڙ ڏانهن هڪ مرتب ڪندڙ لکيو، ۽ اهو تمام تيز هو. اهو جديد C1 جيترو تيز هو، پر مختص ڪندڙ ان وقت تمام گهڻو سست هو، ۽ پوئتي نظر ۾ اهو هڪ وڏو ڊيٽا جي جوڙجڪ جو مسئلو هو. مون کي ان جي ضرورت هئي هڪ گرافيڪل رجسٽر مختص ڪندڙ لکڻ لاءِ ۽ مون ڪوڊ ايڪسپريس ۽ اسپيڊ جي وچ ۾ موجود پريشاني کي سمجهي نه سگهيو، جيڪو ان دور ۾ موجود هو ۽ تمام ضروري هو. اهو ظاهر ٿيو ته ڊيٽا جي جوڙجڪ عام طور تي ان وقت جي x86s تي ڪيش جي سائيز کان وڌي ويندي آهي، ۽ تنهن ڪري، جيڪڏهن مون شروعاتي طور تي فرض ڪيو ته رجسٽري مختص ڪندڙ مجموعي وقت جي 5-10 سيڪڙو ڪم ڪندو، پوء حقيقت ۾ اهو نڪتو. 50 سيڪڙو.

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

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

رجسٽر مختص ۽ ملٽي ڪور بابت ٿورڙو

Владимир: رجسٽرڊ مختص ڪرڻ جهڙا مسئلا ڪنهن ابدي، لامحدود موضوع وانگر نظر اچن ٿا. مون کي حيرت ٿي ته ڇا ڪڏهن ڪو اهڙو خيال آيو آهي جيڪو واعدو ڪندڙ لڳي ۽ پوءِ عملي طور ناڪام ٿيو؟

ڪلف: يقيناً! رجسٽري مختص هڪ علائقو آهي جنهن ۾ توهان NP-مڪمل مسئلو حل ڪرڻ لاءِ ڪجهه هوريسٽ ڳولڻ جي ڪوشش ڪندا آهيو. ۽ توهان ڪڏهن به هڪ مڪمل حل حاصل ڪري سگهو ٿا، صحيح؟ اهو صرف ناممڪن آهي. ڏس، وقت جي تاليف کان اڳ - اهو پڻ خراب ڪم ڪري ٿو. هتي گفتگو ڪجهه سراسري ڪيسن بابت آهي. عام ڪارڪردگيءَ جي باري ۾، تنهن ڪري توهان وڃو ۽ ماپ ڪري سگهو ٿا ڪا شيءِ جيڪا توهان سوچيو ته سٺي عام ڪارڪردگي آهي - آخرڪار، توهان ان کي بهتر ڪرڻ لاءِ ڪم ڪري رهيا آهيو! رجسٽر مختص هڪ موضوع آهي ڪارڪردگي بابت. هڪ دفعو توهان وٽ پهريون پروٽوٽائپ آهي، اهو ڪم ڪري ٿو ۽ رنگ ڪري ٿو جيڪو گهربل آهي، ڪارڪردگي جو ڪم شروع ٿئي ٿو. توهان کي چڱي طرح ماپڻ سکڻ جي ضرورت آهي. اهو ڇو ضروري آهي؟ جيڪڏهن توهان وٽ صاف ڊيٽا آهي، توهان مختلف علائقن کي ڏسي سگهو ٿا ۽ ڏسو: ها، اهو هتي مدد ڪئي، پر اهو آهي جتي سڀ ڪجهه ڀڄي ويو! ڪجهه سٺا خيال سامهون اچن ٿا، توهان نئين هوريسٽ شامل ڪيو ۽ اوچتو هر شيءِ اوسط تي ٿورو بهتر ڪم ڪرڻ شروع ڪري ٿي. يا اهو شروع نٿو ٿئي. مون وٽ ڪيسن جو هڪ گروپ هو جتي اسان پنج سيڪڙو ڪارڪردگي لاءِ وڙهندا هئاسين جيڪا اسان جي ترقي کي اڳئين مختص ڪندڙ کان مختلف ڪري ٿي. ۽ هر ڀيري اهو ڏسڻ ۾ اچي ٿو: ڪٿي توهان کٽيو، ڪٿي توهان وڃائي ڇڏيو. جيڪڏهن توهان وٽ سٺي ڪارڪردگي تجزيي جا اوزار آهن، توهان گم ٿيل خيالن کي ڳولي سگهو ٿا ۽ سمجهي سگهو ٿا ته اهي ناڪام ڇو آهن. ٿي سگهي ٿو ته اهو هر شيءِ کي ڇڏي وڃڻ جي لائق آهي جيئن اهو آهي، يا ٿي سگهي ٿو ته ٺيڪ ٺاڪ ڪرڻ لاءِ وڌيڪ سنجيده انداز اختيار ڪرڻ، يا ٻاهر وڃڻ ۽ ڪنهن ٻي شيءِ کي درست ڪرڻ. اهو هڪ مڪمل bunch شيء آهي! مون هي بهترين هيڪ ٺاهيو آهي، پر مون کي به هن جي ضرورت آهي، ۽ هي هڪ، ۽ هي هڪ - ۽ انهن جو مجموعي ميلاپ ڪجهه بهتري ڏئي ٿو. ۽ اڪيلو ناڪام ٿي سگهن ٿا. هي NP-مڪمل مسئلن تي ڪارڪردگي جي ڪم جي فطرت آهي.

Владимир: هڪ کي اهو احساس ٿئي ٿو ته شيون مختص ڪرڻ ۾ مصوري وانگر هڪ مسئلو آهي جيڪو اڳ ۾ ئي حل ڪيو ويو آهي. خير، اهو توهان لاءِ فيصلو ڪيو ويو آهي، فيصلو ڪندي جيڪو توهان چئي رهيا آهيو، پوءِ ڇا اهو ان جي لائق آهي ته پوءِ ...

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

Владимир: توهان ملٽي ڪور بابت ڇا ٿا سوچيو، جڏهن هڪ ئي وقت هزارين ڪور هجن؟ ڇا هي هڪ مفيد شيء آهي؟

ڪلف: GPU جي ڪاميابي ڏيکاري ٿي ته اهو ڪافي مفيد آهي!

Владимир: اهي ڪافي خاص آهن. عام مقصد جي پروسيسرز بابت ڇا؟

ڪلف: خير، اهو Azul جو ڪاروباري نمونو هو. جواب هڪ دور ۾ واپس آيو جڏهن ماڻهو واقعي پيش ڪيل ڪارڪردگي سان پيار ڪندا هئا. ان وقت متوازي ڪوڊ لکڻ ڏکيو هو. H2O ڪوڊنگ ماڊل انتهائي اسپيبلبل آهي، پر اهو عام مقصد وارو ماڊل ناهي. شايد GPU استعمال ڪرڻ کان ٿورو وڌيڪ عام. ڇا اسان اهڙي شيء کي ترقي ڪرڻ جي پيچيدگي يا ان کي استعمال ڪرڻ جي پيچيدگي بابت ڳالهائي رهيا آهيون؟ مثال طور، Azul مون کي هڪ دلچسپ سبق سيکاريو، بلڪه غير واضح هڪ: ننڍا ڪيچ عام آهن. 

زندگي ۾ سڀ کان وڏو چئلينج

Владимир: غير ٽيڪنيڪي چئلينجن بابت ڇا؟

ڪلف: سڀ کان وڏو چيلينج نه هو... ماڻهن سان مهربان ۽ سٺو. ۽ نتيجي طور، مون مسلسل پاڻ کي انتهائي تڪرار جي حالتن ۾ مليو. اهي جتي مون کي خبر هئي ته شيون غلط ٿي رهيون آهن، پر مون کي خبر ناهي ته انهن مسئلن سان ڪيئن اڳتي وڌو ۽ انهن کي سنڀالي نه سگهيو. ڪيترائي ڊگھي مدي وارا مسئلا، ڏهاڪن تائين، ان طريقي سان پيدا ٿيا. حقيقت اها آهي ته جاوا وٽ C1 ۽ C2 مرتب ڪندڙ آهن هن جو سڌو نتيجو آهي. حقيقت اها آهي ته جاوا ۾ مسلسل ڏهن سالن تائين ڪو به گهڻن سطحي تاليف نه هو، اهو پڻ سڌو نتيجو آهي. ظاهر آهي ته اسان کي اهڙي نظام جي ضرورت هئي، پر اهو ظاهر ناهي ته اهو ڇو نه هو. مون کي هڪ انجنيئر سان مسئلو هو... يا انجنيئرن جي هڪ گروپ سان. هڪ دفعي، جڏهن مون سج تي ڪم ڪرڻ شروع ڪيو، مون کي ... ٺيڪ آهي، نه رڳو پوء، مون کي عام طور تي هميشه هر شيء تي منهنجي پنهنجي راء آهي. ۽ مون سمجهيو ته اهو سچ آهي ته توهان صرف پنهنجي هن حقيقت کي وٺي سگهو ٿا ۽ ان کي سر تي ٻڌائي سگهو ٿا. خاص طور تي جڏهن مان اڪثر وقت حيران ڪندڙ طور تي صحيح هو. ۽ جيڪڏهن توهان کي اهو طريقو پسند نه آهي... خاص طور تي جيڪڏهن توهان واضح طور تي غلط آهيو ۽ بکواس ڪري رهيا آهيو... عام طور تي، ٿورا ماڻهو هن قسم جي رابطي کي برداشت ڪري سگھن ٿا. جيتوڻيڪ ڪجھ ڪري سگھي ٿو، مون وانگر. مون پنهنجي سڄي زندگي ميرٽ جي اصولن تي ٺاهي آهي. جيڪڏهن توهان مون کي ڪجهه غلط ڏيکاريو، ته آئون فوري طور تي ڦري ويندس ۽ چوندس: توهان بيڪار چيو. ساڳئي وقت، يقينا، مان معافي وٺان ٿو ۽ اهو سڀ ڪجهه، مان سمجهان ٿو، جيڪڏهن ڪو آهي، ۽ ٻيون صحيح ڪارناما وٺندس. ٻئي طرف، مان کل وقت جي ھڪڙي وڏي سيڪڙو بابت حيران ڪندڙ طور تي صحيح آھيان. ۽ اهو ماڻهن سان لاڳاپن ۾ تمام سٺو ڪم نٿو ڪري. مان سٺو ٿيڻ جي ڪوشش نه ڪري رهيو آهيان، پر مان سوال پڇي رهيو آهيان. "اهو ڪڏهن به ڪم نه ڪندو، ڇاڪاڻ ته هڪ، ٻه ۽ ٽي." ۽ اهي هئا، "او!" اهڙا ٻيا به نتيجا هئا جن کي نظر انداز ڪرڻ شايد بهتر هو: مثال طور، اهي جيڪي منهنجي زال کان طلاق ۽ ان کان پوءِ ڏهن سالن جي ڊپريشن جو سبب بڻيا.

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

آوري: تازو ئي هرڪو ڳالهائڻ شروع ڪيو خود آگاهي لاءِ introverts، ۽ عام طور تي نرم صلاحيتن. توهان ان بابت ڇا چئي سگهو ٿا؟

ڪلف: ها، اها ئي بصيرت ۽ سبق مون پنهنجي زال کان طلاق کان سکيو. مون طلاق مان ڇا سکيو هو پاڻ کي سمجهي رهيو هو. اهڙيءَ طرح مون ٻين ماڻهن کي سمجهڻ شروع ڪيو. سمجھو ته هي رابطو ڪيئن ڪم ڪري ٿو. جنهن سبب هڪ ٻئي پٺيان دريافتون ٿينديون رهيون. اتي هڪ آگاهي هئي ته مان ڪير آهيان ۽ ڇا مان نمائندگي ڪريان ٿو. مان ڇا ڪري رهيو آهيان: يا ته آئون ڪم ۾ مشغول آهيان، يا مان تڪرار کان پاسو ڪري رهيو آهيان، يا ٻيو ڪجهه - ۽ خود آگاهي جي هن سطح کي حقيقت ۾ پاڻ کي ڪنٽرول ۾ رکڻ ۾ مدد ڪري ٿي. ان کان پوء، سڀڪنھن شيء کي تمام آسان ٿي ويندي. هڪڙي شيءِ جيڪا مون نه رڳو پاڻ ۾، پر ٻين پروگرامرز ۾ پڻ دريافت ڪئي، اها آهي ته خيالن کي زباني بيان ڪرڻ جي ناڪامي جڏهن توهان جذباتي دٻاءُ جي حالت ۾ آهيو. مثال طور، توهان اتي بيٺا آهيو ڪوڊنگ، وهڪري جي حالت ۾، ۽ پوءِ اهي ڊوڙندا توهان وٽ ايندا ۽ دانهون ڪرڻ شروع ڪندا ته ڪجهه ڀڄي ويو آهي ۽ هاڻي توهان جي خلاف انتهائي قدم کنيا ويندا. ۽ توهان هڪ لفظ به نٿا چئي سگهو ڇو ته توهان جذباتي دٻاءَ جي حالت ۾ آهيو. حاصل ڪيل علم توهان کي هن لمحي لاء تيار ڪرڻ جي اجازت ڏئي ٿو، ان کي بچايو ۽ واپسي جي منصوبي تي اڳتي وڌو، جنهن کان پوء توهان ڪجهه ڪري سگهو ٿا. تنهن ڪري ها، جڏهن توهان محسوس ڪرڻ شروع ڪيو ته اهو سڀ ڪجهه ڪيئن ڪم ڪري ٿو، اهو هڪ وڏو زندگي بدلائڻ وارو واقعو آهي. 
مان پاڻ کي صحيح لفظ نه ڳولي سگهيو، پر مون کي عملن جو تسلسل ياد اچي ويو. نقطي اهو آهي ته اهو ردعمل گهڻو جسماني آهي جيترو اهو زباني آهي، ۽ توهان کي جاء جي ضرورت آهي. اهڙي جڳهه، زين جي معني ۾. اھو اھو آھي جيڪو بيان ڪرڻ جي ضرورت آھي، ۽ پوء فوري طور تي قدم کڻو - خالص جسماني طور تي قدم. جڏهن مان زباني طور تي خاموش رهيس، ته آئون جذباتي طور تي صورتحال تي عمل ڪري سگهان ٿو. جيئن ته ايڊينالائن توهان جي دماغ تائين پهچندي آهي، توهان کي جنگ يا فلائيٽ موڊ ۾ تبديل ڪري ٿي، توهان هاڻي ڪجهه به نٿا چئي سگهو، نه - هاڻي توهان هڪ بيوقوف، هڪ وائپنگ انجنيئر آهيو، هڪ مهذب جواب ڏيڻ يا حملي کي روڪڻ جي قابل ناهي، ۽ حملو ڪندڙ آزاد آهي. بار بار حملو ڪرڻ. توهان کي پهريان پاڻ کي ٻيهر ٿيڻ گهرجي، ٻيهر ڪنٽرول حاصل ڪرڻ، "جنگ يا پرواز" موڊ مان نڪرڻ گهرجي.

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

رستي ۾، عدالت ۾، مخالف وڪيل توهان سان ائين ڪرڻ جي ڪوشش ڪري ٿو - هاڻي اهو واضح آهي ڇو. ڇاڪاڻ ته هو توهان کي اهڙي حالت ۾ دٻائڻ جي صلاحيت رکي ٿو جو توهان پنهنجي نالي جو تلفظ به نٿا ڪري سگهو، مثال طور. بلڪل حقيقي معنى ۾، توهان ڳالهائڻ جي قابل نه هوندا. جيڪڏهن توهان سان ائين ٿئي ٿو، ۽ توهان کي خبر آهي ته توهان پاڻ کي اهڙي جاءِ تي ڏسندؤ جتي زباني ويڙهه ٿي رهي آهي، عدالت جهڙي جاءِ تي، ته پوءِ توهان پنهنجي وڪيل سان گڏ اچي سگهو ٿا. وڪيل توهان لاءِ اٿي بيٺو ۽ زباني حملي کي روڪيندو، ۽ اهو مڪمل طور تي قانوني طريقي سان ڪندو، ۽ گم ٿيل زين اسپيس توهان ڏانهن واپس ايندي. مثال طور، مون کي پنهنجي گهرواري کي هڪ ٻه ڀيرا فون ڪرڻو پيو، ان ڳالهه تي جج ڪافي دوستانه رويو اختيار ڪيو، پر مخالف وڪيل مون تي رڙيون ڪري رڙيون ڪيون، مان ڪنڌ ورائي هڪ لفظ به نه ڪڍي سگهيس. انهن حالتن ۾، ثالث استعمال ڪندي مون لاء بهترين ڪم ڪري ٿو. ثالث اهو سڀ دٻاءُ روڪي ٿو جيڪو توهان تي مسلسل وهڪري ۾ وجهي رهيو آهي، توهان کي ضروري زين جڳهه ڳولي ٿو، ۽ ان سان ڳالهائڻ جي صلاحيت واپس اچي ٿي. هي علم جو هڪ مڪمل ميدان آهي جنهن ۾ مطالعو ڪرڻ لاءِ گهڻو ڪجهه آهي، پنهنجي اندر ۾ دريافت ڪرڻ لاءِ گهڻو ڪجهه آهي، ۽ اهو سڀ ڪجهه اعليٰ سطحي حڪمت عملين جي فيصلن ۾ بدلجي ٿو جيڪي مختلف ماڻهن لاءِ مختلف آهن. ڪجهه ماڻهن وٽ مٿي بيان ڪيل مسئلا نه آهن؛ عام طور تي، جيڪي ماڻهو پيشه ور وڪرو ڪندڙ آهن انهن وٽ نه آهن. اهي سڀ ماڻهو، جيڪي لفظن سان پنهنجو گذر بسر ڪندا آهن، مشهور ڳائڻا، شاعر، مذهبي اڳواڻ ۽ سياستدان، انهن وٽ هميشه ڪجهه چوڻو هوندو آهي. انهن کي اهڙا مسئلا نه آهن، پر مون کي.

آوري: اهو هو... غير متوقع. عظيم، اسان اڳ ۾ ئي تمام گهڻو ڳالهايو آهي ۽ اهو وقت هن انٽرويو کي ختم ڪرڻ جو وقت آهي. اسان ضرور ڪانفرنس ۾ ملنداسين ۽ هن ڳالهه ٻولهه کي جاري رکڻ جي قابل ٿينداسين. هائڊرا ۾ ملنداسين!

توھان ھائڊرا 2019 ڪانفرنس ۾ ڪلف سان پنھنجي گفتگو جاري رکي سگھو ٿا، جيڪا 11-12 جولاءِ 2019 تي سينٽ پيٽرسبرگ ۾ ٿيندي. هو رپورٽ کڻي ايندو "آزول هارڊويئر ٽرانزيڪشنل ياداشت جو تجربو". ٽڪيٽون خريد ڪري سگھجن ٿيون سرڪاري ويب سائيٽ تي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو