په جاوا کې د JIT تالیف پلار کلف کلیک سره عالي مرکه

په جاوا کې د JIT تالیف پلار کلف کلیک سره عالي مرکهکلف کلیک - د Cratus CTO (د پروسې د ښه والي لپاره IoT سینسرونه)، د څو پیلونو بنسټ ایښودونکی او شریک بنسټ ایښودونکی (پشمول د راکټ رییل ټایم ښوونځي، نیورینسک او H2O.ai) د ډیری بریالي وتلو سره. کلیف خپل لومړی کمپیلر په 15 کلنۍ کې ولیکه (د TRS Z-80 لپاره پاسکل)! هغه په ​​​​جاوا کې په C2 کې د خپل کار لپاره غوره پیژندل شوی (د نوډس IR سمندر). دې تالیف کونکي نړۍ ته وښودله چې JIT کولی شي د لوړ کیفیت کوډ تولید کړي ، کوم چې د جاوا په رامینځته کیدو کې یو له اصلي عصري سافټویر پلیټ فارمونو څخه و. بیا کلیف د Azul سیسټمونو سره د خالص جاوا سافټویر سره د 864 کور مین فریم جوړولو کې مرسته وکړه چې د 500 ملی ثانیو دننه د 10-ګیګابایټ هپ کې د GC وقفې ملاتړ کوي. په عموم کې، کلف د JVM په ټولو اړخونو کار کولو اداره کوله.

 
دا habrapost د کلف سره یوه ښه مرکه ده. موږ به په لاندې موضوعاتو خبرې وکړو:

  • د ټیټې کچې اصلاح ته لیږد
  • څنګه کولای شو چی یو لوی refactoring ترسره کړي
  • د لګښت ماډل
  • د ټیټې کچې اصلاح کولو روزنه
  • د فعالیت ښه کولو عملي مثالونه
  • ولې خپله د پروګرام کولو ژبه جوړه کړئ
  • د فعالیت انجنیر کیریر
  • تخنیکي ننګونې
  • د راجستر تخصیص او څو کورونو په اړه لږ څه
  • په ژوند کې ترټولو لوی ننګونه

مرکه د دې لخوا ترسره کیږي:

  • اندری ستارین د ایمیزون ویب خدماتو څخه. په خپل مسلک کې، هغه په ​​بشپړ ډول په مختلفو پروژو کې کار کولو توان درلود: هغه په ​​Yandex کې د NewSQL ویشل شوي ډیټابیس ازموینه وکړه، په کاسپرسکي لابراتوار کې د بادل کشف سیسټم، په Mail.ru کې یو ملټي پلیر لوبه او په Deutsche Bank کې د بهرنیو اسعارو نرخونو محاسبه کولو خدمت. د لوی پیمانه پس منظر او توزیع شوي سیسټمونو ازموینې کې لیوالتیا.
  • ولادیمیر سیتنیکوف له Netcracker څخه. د NetCracker OS فعالیت او توزیع کولو لس کلن کار، سافټویر چې د مخابراتي آپریټرانو لخوا د شبکې او شبکې تجهیزاتو مدیریت پروسې اتومات کولو لپاره کارول کیږي. د جاوا او اوریکل ډیټابیس فعالیت مسلو کې لیوالتیا. په رسمي PostgreSQL JDBC ډرایور کې د درجن څخه ډیر د فعالیت پرمختګونو لیکوال.

د ټیټې کچې اصلاح ته لیږد

Андрей: تاسو په عمومي توګه د JIT تالیف، جاوا، او د فعالیت کار په نړۍ کې لوی نوم یاست، سمه ده؟ 

کلف: همداسې ده !

Андрей: راځئ چې د فعالیت د کار په اړه د ځینو عمومي پوښتنو سره پیل وکړو. تاسو د لوړې کچې او ټیټې کچې اصلاحونو ترمینځ انتخاب په اړه څه فکر کوئ لکه د CPU په کچه کار کول؟

کلف: هو، دلته هرڅه ساده دي. ترټولو ګړندی کوډ هغه دی چې هیڅکله نه چلیږي. له همدې امله، تاسو تل د لوړې کچې څخه پیل کولو ته اړتیا لرئ، په الګوریتم کار وکړئ. یو غوره O نوټیشن به بدتر O نوټیشن مات کړي ، پرته لدې چې ځینې کافي لوی ثابت مداخلې وکړي. د ټیټې کچې شیان تیریږي. په عموم کې، که تاسو خپل پاتې پاتې برخه په ښه توګه غوره کړې وي او لاهم یو څه په زړه پوري توکي پاتې دي، دا ټیټه کچه ده. مګر څنګه د لوړې کچې څخه پیل وکړو؟ تاسو څنګه پوهیږئ چې په کافي اندازه د لوړې کچې کار ترسره شوی؟ ښه ... هیڅ لاره. هیڅ چمتو شوي ترکیبونه شتون نلري. تاسو اړتیا لرئ په ستونزه پوه شئ، پریکړه وکړئ چې تاسو څه کوئ (تر څو په راتلونکي کې غیر ضروري ګامونه پورته نه کړئ) او بیا تاسو کولی شئ پروفایل افشا کړئ، کوم چې کولی شي یو څه ګټور ووایي. په یو وخت کې، تاسو پخپله پوهیږئ چې تاسو د غیر ضروري شیانو څخه ځان خلاص کړی او دا وخت دی چې د ټیټې کچې ښه ټیوننګ ترسره کړئ. دا یقینا یو ځانګړی هنر دی. ډیری خلک شتون لري چې غیر ضروري کارونه کوي، مګر دومره چټک حرکت کوي چې دوی د تولید په اړه اندیښنه کولو لپاره وخت نلري. مګر دا تر هغه وخته پورې ده چې پوښتنه په ښکاره ډول راپورته شي. معمولا 99٪ وخت هیڅوک پروا نه کوي چې زه څه وکړم، تر هغه وخته چې یو مهم شی په نازکه لاره کې راشي چې هیڅوک یې پروا نه کوي. او دلته هرڅوک تاسو ته د "ولې دا له پیل څخه په سمه توګه کار نه کوي" په اړه نارې وهي. په عموم کې، تل د فعالیت ښه کولو لپاره یو څه شتون لري. مګر د وخت 99٪ تاسو هیڅ لیډ نلرئ! تاسو یوازې هڅه کوئ چې یو څه کار وکړئ او په پروسه کې تاسو معلومه کړئ چې څه مهم دي. تاسو هیڅکله دمخه نه پوهیږئ چې دا ټوټه باید کامل وي، نو په حقیقت کې، تاسو باید په هرڅه کې بشپړ اوسئ. مګر دا ناممکن دی او تاسو یې نه کوئ. تل د سمولو لپاره ډیری شیان شتون لري - او دا په بشپړ ډول نورمال دی.

څنګه کولای شو چی یو لوی refactoring ترسره کړي

Андрей: تاسو په یو فعالیت کې څنګه کار کوئ؟ دا د کراس پرې کولو ستونزه ده. د مثال په توګه، ایا تاسو کله هم د هغو ستونزو په اړه کار کړی چې د ډیری موجوده فعالیت له تقاطع څخه رامینځته کیږي؟

کلف: زه هڅه کوم چې مخنیوی وکړم. که زه پوهیږم چې فعالیت به یوه مسله وي، زه د کوډ کولو پیل کولو دمخه د هغې په اړه فکر کوم، په ځانګړې توګه د ډیټا جوړښتونو سره. مګر ډیری وختونه تاسو دا ټول ډیر وروسته ومومئ. او بیا تاسو باید سختو اقداماتو ته لاړشئ او هغه څه وکړئ چې زه یې "بیا لیکل او فتح" بولم: تاسو اړتیا لرئ یوه لویه ټوټه واخلئ. ځینې ​​​​کوډونه به لاهم د فعالیت ستونزو یا بل څه له امله بیا لیکل شي. هر څه چې د کوډ د بیا لیکلو دلیل وي، دا تقریبا تل غوره وي چې د کوچنۍ ټوټې په پرتله لویه ټوټه بیا ولیکئ. پدې شیبه کې ، هرڅوک په ویره کې لړزیږي: "ای زما خدایه ، تاسو دومره کوډ نشي لمس کولی!" مګر په حقیقت کې، دا طریقه تقریبا تل خورا ښه کار کوي. تاسو اړتیا لرئ سمدلاسه یوه لویه ستونزه ونیسئ ، شاوخوا یې یوه لویه دایره جوړه کړئ او ووایاست: زه به د دایرې دننه هرڅه بیا لیکم. پوله د هغې دننه د مینځپانګې په پرتله خورا کوچنۍ ده چې ځای په ځای کولو ته اړتیا لري. او که د سرحدونو دا ډول توضیح تاسو ته اجازه درکوي په بشپړ ډول دننه کار ترسره کړئ ، ستاسو لاسونه وړیا دي ، هغه څه وکړئ چې تاسو یې غواړئ. یوځل چې تاسو په ستونزه پوه شئ، د بیا لیکلو پروسه خورا اسانه ده، نو یو لوی کټ واخلئ!
په ورته وخت کې، کله چې تاسو یو لوی بیا لیکل وکړئ او پوه شئ چې فعالیت به یوه مسله وي، تاسو کولی شئ سمدستي د هغې په اړه اندیښنه پیل کړئ. دا معمولا په ساده شیانو بدلیږي لکه "ډیټا کاپي مه کوئ ، څومره چې امکان ولري ډیټا اداره کړئ ، کوچني کړئ." په لوی بیا لیکلو کې، د فعالیت ښه کولو لپاره معیاري لارې شتون لري. او دوی تقریبا تل د معلوماتو شاوخوا ګرځي.

د لګښت ماډل

Андрей: په یو پوډکاسټ کې تاسو د محصولاتو په شرایطو کې د لګښت ماډلونو په اړه خبرې وکړې. ایا تاسو کولی شئ تشریح کړئ چې تاسو له دې څخه څه معنی لرئ؟

کلف: یقینا. زه په داسې دور کې زیږیدلی وم کله چې د پروسیسر فعالیت خورا مهم و. او دا دوره بیرته راګرځي - برخلیک پرته له ستړیا نه دی. ما د اتو بټ ماشینونو په ورځو کې ژوند پیل کړ؛ زما لومړی کمپیوټر د 256 بایټ سره کار کاوه. دقیقا بایټس. هرڅه خورا کوچني وو. لارښوونې باید شمیرل شوي وای، او لکه څنګه چې موږ د پروګرام کولو ژبې سټیک ته حرکت پیل کړ، ژبو نور ډیر څه واخیستل. دلته جمع کونکی و، بیا اساسی، بیا C، او C ډیری توضیحاتو ته پاملرنه وکړه، لکه د راجستر تخصیص او د لارښوونې انتخاب. مګر دلته هرڅه خورا روښانه وو ، او که ما د متغیر مثال ته اشاره وکړه ، نو زه به بار ترلاسه کړم ، او د دې لارښوونې لګښت معلوم دی. هارډویر د ماشین دورې یو ټاکلی شمیر تولیدوي، نو د مختلفو شیانو د اجرا کولو سرعت په ساده ډول د ټولو لارښوونو په اضافه کولو سره محاسبه کیدی شي چې تاسو یې پرمخ وړئ. هر پرتله / ازموینه / څانګه / کال / بار / پلورنځی اضافه کیدی شي او وویل شي: دا ستاسو لپاره د اجرا کولو وخت دی. کله چې د فعالیت ښه کولو لپاره کار کوئ، تاسو به خامخا پام وکړئ چې کوم شمیرې د کوچني ګرمو دورونو سره مطابقت لري. 
مګر هرڅومره ژر چې تاسو جاوا ، پایتون او ورته شیانو ته لاړشئ ، تاسو ډیر ژر د ټیټ کچې هارډویر څخه لیرې یاست. په جاوا کې د ګیټر زنګ وهلو لګښت څومره دی؟ که په HotSpot کې JIT سمه وي انلاین، دا به لوډ شي، مګر که دا کار ونه کړي، دا به د فعالیت کال وي. څرنګه چې زنګ په ګرم لوپ کې دی، نو دا به په دې لوپ کې نور ټول اصلاحونه بیرته راولي. له همدې امله، اصلي لګښت به خورا لوړ وي. او تاسو سمدلاسه د کوډ یوې برخې ته د لیدو وړتیا له لاسه ورکوئ او پوه شئ چې موږ باید دا د پروسیسر ساعت سرعت ، حافظې او کارول شوي کیچ له مخې اجرا کړو. دا ټول یوازې په زړه پوري کیږي که تاسو واقعیا فعالیت ته ورشئ.
اوس موږ ځان په داسې حالت کې ګورو چیرې چې د پروسیسر سرعت په سختۍ سره د یوې لسیزې لپاره ډیر شوی. زاړه ورځې بیرته راګرځي! تاسو نور نشئ کولی په ښه واحد تار شوي فعالیت باندې حساب وکړئ. مګر که تاسو ناڅاپه موازي کمپیوټینګ ته ورشئ، نو دا خورا ستونزمن کار دی، هرڅوک تاسو ته د جیمز بانډ په څیر ګوري. دلته لس چنده سرعت معمولا په هغه ځایونو کې پیښیږي چیرې چې یو څوک یو څه ګډوډ کړي. همغږي ډیر کار ته اړتیا لري. د دې XNUMXx سرعت ترلاسه کولو لپاره ، تاسو اړتیا لرئ د لګښت ماډل پوه شئ. څه او څومره لګښت لري؟ او د دې کولو لپاره، تاسو اړتیا لرئ پوه شئ چې ژبه څنګه په لاندې هارډویر کې فټ کوي.
مارتین تامپسن د خپل بلاګ لپاره خورا ښه کلمه غوره کړه میخانیکي خواخوږي! تاسو اړتیا لرئ پوه شئ چې هارډویر څه کوي، په سمه توګه به دا څنګه وکړي، او ولې دا هغه څه کوي چې دا په لومړي ځای کې کوي. د دې په کارولو سره، دا خورا اسانه ده چې د لارښوونو شمیرل پیل کړئ او معلومه کړئ چې د اعدام وخت چیرته ځي. که تاسو مناسب روزنه نلرئ، تاسو یوازې په تیاره خونه کې د تور پیشو په لټه کې یاست. زه هغه خلک ګورم چې هر وخت فعالیت ته وده ورکوي څوک نه پوهیږي چې دوی څه کوي. دوی ډیر رنځ وړي او ډیر پرمختګ نه کوي. او کله چې زه د کوډ ورته ټوټه واخلم، په یو څو کوچني هیکونو کې وخورئ او پنځه یا لس چنده سرعت ترلاسه کړئ، دوی داسې دي: ښه، دا سمه نه ده، موږ دمخه پوهیږو چې تاسو ښه یاست. حیرانتیا. زه د څه په اړه خبرې کوم ... د لګښت ماډل پدې اړه دی چې تاسو کوم ډول کوډ لیکئ او په لوی عکس کې په اوسط ډول څومره ګړندی چلیږي.

Андрей: او تاسو څنګه کولی شئ په خپل سر کې دومره حجم وساتئ؟ ایا دا د ډیرو تجربو سره ترلاسه کیږي، یا؟ دا ډول تجربه له کوم ځای څخه راځي؟

کلف: ښه، ما خپله تجربه په اسانه لاره نه ده ترلاسه کړې. ما په هغه ورځو کې په مجلس کې برنامه وکړه کله چې تاسو کولی شئ په هر لارښود پوه شئ. دا احمق ښکاري ، مګر له هغه وخت راهیسې د Z80 لارښوونې سیټ تل زما په سر کې پاتې دی ، زما په حافظه کې. زه د خبرو په یوه دقیقه کې د خلکو نومونه په یاد نه لرم، مګر ما هغه کوډ یاد دی چې 40 کاله دمخه لیکل شوی و. دا مسخره ده، دا د سنډروم په څیر ښکاري "احمق ساینس پوه".

د ټیټې کچې اصلاح کولو روزنه

Андрей: آیا د ننوتلو لپاره کومه اسانه لار شته؟

کلف: هو او نه. هغه هارډویر چې موږ ټول یې کاروو د وخت په تیریدو سره دومره بدلون نه دی راغلی. هرڅوک د آرم سمارټ فونونو استثنا سره x86 کاروي. که تاسو یو ډول هارډ کور سرایت نه کوئ، تاسو ورته کار کوئ. ښه، بل. لارښوونې هم د پیړیو لپاره نه دي بدل شوي. تاسو اړتیا لرئ چې لاړ شئ او په مجلس کې یو څه ولیکئ. ډیر نه، مګر د پوهیدو پیل کولو لپاره کافي. تاسو خندا کوئ، مګر زه په بشپړ ډول جدي خبرې کوم. تاسو اړتیا لرئ چې د ژبې او هارډویر ترمنځ ارتباط پوه شئ. له هغې وروسته تاسو اړتیا لرئ چې لاړ شئ او یو څه ولیکئ او د کوچني لوبو ژبې لپاره د لوبو کوچني کمپیلر جوړ کړئ. د لوبو په څیر معنی دا ده چې دا باید په مناسب وخت کې جوړ شي. دا خورا ساده کیدی شي، مګر دا باید لارښوونې تولید کړي. د لارښوونې رامینځته کولو عمل به تاسو سره د لوړې کچې کوډ ترمینځ د پل لپاره د لګښت ماډل په پوهیدو کې مرسته وکړي چې هرڅوک یې لیکي او د ماشین کوډ چې په هارډویر کې پرمخ ځي. دا لیکنه به هغه وخت په مغز کې وسوځول شي کله چې کمپیلر لیکل کیږي. حتی ساده کمپیلر. له هغې وروسته ، تاسو کولی شئ جاوا ته په کتلو پیل وکړئ او دا حقیقت چې د دې سیمانټیک چاسم خورا ژور دی ، او په دې باندې د پلونو جوړول خورا ستونزمن دي. په جاوا کې، دا خورا ستونزمن کار دی چې پوه شي چې آیا زموږ پل ښه یا بد وګرځید، څه به د دې لامل شي او څه به نه. مګر تاسو یو ډول پیل ټکي ته اړتیا لرئ چیرې چې تاسو کوډ وګورئ او پوه شئ: "هو، دا ګیټونکی باید هر ځل په نښه شي." او بیا دا معلومه شوه چې ځینې وختونه دا پیښیږي، پرته له هغه حالت څخه چې میتود خورا لوی شي، او JIT هرڅه پیل کوي. د داسې ځایونو فعالیت سمدلاسه وړاندوینه کیدی شي. معمولا ترلاسه کونکي ښه کار کوي ، مګر بیا تاسو لوی ګرم لوپونه ګورئ او پوه شئ چې دلته شاوخوا ځینې فنکشن زنګونه تیریږي چې نه پوهیږي دوی څه کوي. دا د ګیټرونو پراخه کارونې سره ستونزه ده، د دې دلیل چې ولې دوی په نښه شوي ندي دا روښانه نده چې ایا دوی ترلاسه کونکي دي. که تاسو د کوچني کوډ اساس لرئ، تاسو کولی شئ په ساده ډول دا په یاد ولرئ او بیا ووایاست: دا یو ګیټونکی دی، او دا یو سیټر دی. په لوی کوډ بیس کې، هر فعالیت خپل تاریخ ژوند کوي، کوم چې په عموم کې، هیڅوک نه پوهیږي. پروفایلر وايي چې موږ 24٪ وخت په ځینې لوپ کې له لاسه ورکړ او د دې لپاره چې پوه شو چې دا لوپ څه کوي، موږ اړتیا لرو چې دننه هر فعالیت وګورو. د فعالیت له مطالعې پرته پدې پوهیدل ناشونې دي ، او دا د پوهیدو پروسه په جدي ډول ورو کوي. له همدې امله زه ګیټرز او سیټرونه نه کاروم، زه یوې نوې کچې ته رسیدلی یم!
د لګښت ماډل چیرته ترلاسه کول؟ ښه، تاسو کولی شئ یو څه ولولئ، البته ... مګر زما په اند ترټولو غوره لاره عمل کول دي. د کوچني کمپیلر جوړول به د لګښت ماډل د پوهیدو لپاره غوره لاره وي او دا په خپل سر کې فټ کړئ. یو کوچنی کمپیلر چې د مایکروویو برنامه کولو لپاره مناسب وي د پیل کونکي لپاره دنده ده. ښه ، زما مطلب دی ، که تاسو دمخه د برنامه کولو مهارتونه لرئ ، نو دا باید کافي وي. دا ټول شیان لکه د تار پارس کول چې تاسو د یو ډول الجبریک بیان په توګه لرئ، د ریاضیاتي عملیاتو لپاره لارښوونې په سم ترتیب کې استخراج کول، د راجسترونو څخه سم ارزښتونه اخیستل - دا ټول په یوځل ترسره کیږي. او پداسې حال کې چې تاسو یې کوئ، دا به ستاسو په دماغ کې نښه شي. زه فکر کوم چې هرڅوک پوهیږي چې کمپیلر څه کوي. او دا به د لګښت ماډل پوهه ورکړي.

د فعالیت ښه کولو عملي مثالونه

Андрей: د تولید په برخه کې د کار کولو پر مهال نور څه ته باید پام وکړئ؟

کلف: د معلوماتو جوړښت. په لاره کې، هو، ما د اوږدې مودې لپاره دا ټولګي نه دي تدریس کړي ... راکټ ښوونځی. دا په زړه پورې وه، مګر دا ډیرې هڅې ته اړتیا لري، او زه هم ژوند لرم! سمه ده. نو، په یوه لوی او په زړه پورې ټولګیو کې، "ستاسو فعالیت چیرته ځي،" ما زده کونکو ته یو مثال ورکړ: دوه نیم ګیګابایټ فینټیک ډیټا د CSV فایل څخه لوستل شوي او بیا دوی باید د پلورل شوي محصولاتو شمیر محاسبه کړي. . د بازار منظم ټیک ډیټا. د UDP پاکټونه د 70s راهیسې د متن ب formatه بدل شوي. د شیکاګو مرکنټیل ایکسچینج - هر ډول شیان لکه مکھن، جوار، سویابین، داسې شیان. دا اړینه وه چې دا محصولات وشمېرل شي، د معاملو شمیره، د پیسو او توکو د حرکت اوسط حجم، او نور. دا خورا ساده سوداګریز ریاضی دی: د محصول کوډ ومومئ (چې په هش میز کې 1-2 حروف دي)، مقدار ترلاسه کړئ، دا د سوداګرۍ سیټونو څخه یو ته اضافه کړئ، حجم اضافه کړئ، ارزښت اضافه کړئ، او یو څو نور شیان. ډیر ساده ریاضی. د لوبو پلي کول خورا ساده و: هرڅه په فایل کې دي ، زه فایل ولولم او د هغې له لارې حرکت کوم ، انفرادي ریکارډونه د جاوا تارونو ته ویشم ، په دوی کې اړین شیان لټوم او د پورته بیان شوي ریاضیاتو مطابق یې اضافه کول. او دا په یو څه ټیټ سرعت کار کوي.

د دې تګلارې سره، دا څرګنده ده چې څه روان دي، او موازي کمپیوټري به مرسته ونکړي، سمه ده؟ دا معلومه شوه چې په فعالیت کې پنځه چنده زیاتوالی په ساده ډول د سم ډیټا جوړښتونو غوره کولو سره ترلاسه کیدی شي. او دا حتی تجربه لرونکي پروګرام کونکي حیرانوي! زما په ځانګړي قضیه کې ، چال دا و چې تاسو باید په ګرم لوپ کې د حافظې تخصیص ونه کړئ. ښه، دا ټول حقیقت ندی، مګر په عموم کې - تاسو باید "یو ځل په X کې" روښانه نه کړئ کله چې 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 یا کوم شی په جوړښت شوي DOM ونې بدل کړم ، د دې تار تحلیل کولو او د POJO جوړولو عملیات ، او بیا وروسته POJO ته لاسرسی به غیر ضروري لګښت ولري - دا ارزانه نه ده پرته لدې چې تاسو د POJOs شاوخوا ډیری وختونه ځئ په پرتله چې تاسو د تار شاوخوا ځئ. په پای کې، تاسو کولی شئ د دې پرځای هڅه وکړئ تار کوډ کړئ او یوازې هغه څه چې تاسو ورته اړتیا لرئ استخراج کړئ، پرته له دې چې دا په کوم POJO بدل کړئ. که دا ټول په داسې لاره کې پیښ شي چې له هغې څخه اعظمي فعالیت ته اړتیا وي ، ستاسو لپاره هیڅ POJOs نه وي ، تاسو اړتیا لرئ په مستقیم ډول کرښه وخورئ.

ولې خپله د پروګرام کولو ژبه جوړه کړئ

Андрей: تاسو وویل چې د لګښت ماډل د پوهیدو لپاره، تاسو اړتیا لرئ چې خپله کوچنۍ ژبه ولیکئ ...

کلف: ژبه نه، بلکې یو تالیف کوونکی. ژبه او تالیف دوه مختلف شیان دي. ترټولو مهم توپیر ستاسو په سر کې دی. 

Андрей: تر هغه ځایه چې زه پوهیږم، تاسو د خپلې ژبې د جوړولو تجربه کوئ. د څه لپاره؟

کلف: ځکه زه کولای شم! زه نیمه تقاعد شوی یم، نو دا زما شوق دی. ما ټول عمر د نورو خلکو ژبې پلي کړې. ما هم زما د کوډ کولو سټایل باندې ډیر کار وکړ. او دا هم ځکه چې زه په نورو ژبو کې ستونزې وینم. زه ګورم چې د پیژندل شوي شیانو د ترسره کولو لپاره غوره لارې شتون لري. او زه به یې وکاروم. زه یوازې په خپل ځان کې د ستونزو په لیدو ستړی شوی یم، په جاوا کې، په پایتون کې، په بله ژبه کې. زه اوس د ریکټ اصلي ، جاواسکریپټ او ایلم کې د شوق په توګه لیکم چې د تقاعد په اړه ندي ، مګر د فعال کار په اړه. زه په پایتون کې هم لیکم او ډیری احتمال به د جاوا بیکینډونو لپاره د ماشین زده کړې کار ته دوام ورکړي. ډیری مشهورې ژبې شتون لري او دوی ټول په زړه پوري ځانګړتیاوې لري. هرڅوک په خپله طریقه ښه دی او تاسو کولی شئ هڅه وکړئ چې دا ټولې ځانګړتیاوې یوځای راوړو. نو، زه هغه شیان مطالعه کوم چې زما سره علاقه لري، د ژبې چلند، هڅه کوي د معقول سیمانټیک سره راشي. او تر دې دمه زه بریالی یم! دا مهال زه د حافظې سیمانټیک سره مبارزه کوم ، ځکه چې زه غواړم دا په C او جاوا کې ولرم ، او د بارونو او پلورنځیو لپاره قوي حافظه ماډل او د حافظې سیمانټیک ترلاسه کړم. په ورته وخت کې ، د هاسکیل په څیر د اتومات ډول ډول انفرنس ولرئ. دلته ، زه هڅه کوم چې په C او جاوا دواړو کې د حافظې کار سره د هاسکل په څیر ډول انفرنس ګډ کړم. دا هغه څه دي چې زه په تیرو 2-3 میاشتو کې کوم، د بیلګې په توګه.

Андрей: که تاسو یوه ژبه جوړه کړئ چې د نورو ژبو څخه غوره اړخونه واخلي، ایا تاسو فکر کوئ چې یو څوک به برعکس وکړي: ستاسو نظرونه واخلئ او هغه وکاروئ؟

کلف: دا سمه ده چې نوې ژبې څنګه ښکاري! ولې جاوا د C سره ورته دی؟ ځکه چې C یو ښه ترکیب درلود چې هرڅوک پوهیږي او جاوا د دې ترکیب څخه الهام اخیستی و ، د ډول خوندیتوب اضافه کول ، د سر حد چیک کول ، GC ، او دوی د C څخه ځینې شیان هم ښه کړل. دوی خپل اضافه کړل. مګر دوی خورا ډیر الهام شوي، سمه ده؟ هرڅوک د هغه جنات په اوږو ولاړ دي چې ستاسو څخه مخکې راغلي دي - دا څنګه پرمختګ کیږي.

Андрей: لکه څنګه چې زه پوهیږم، ستاسو ژبه به حافظه خوندي وي. ایا تاسو د زنګ څخه د پور چیکر په څیر د یو څه پلي کولو په اړه فکر کړی؟ تاسو ورته کتلي دي، تاسو د هغه په ​​اړه څه فکر کوئ؟

کلف: ښه، زه د کلونو لپاره C لیکل کوم، د دې ټولو مالوک او وړیا سره، او په لاسي ډول د ژوند وخت اداره کوم. تاسو پوهیږئ، د لاسي کنټرول شوي ژوند وخت 90-95٪ ورته جوړښت لري. او دا په لاسي ډول ترسره کول خورا ډیر دردناک دي. زه غواړم کمپیلر په ساده ډول تاسو ته ووایم چې هلته څه تیریږي او تاسو د خپلو کړنو سره څه ترلاسه کړي. د ځینو شیانو لپاره، د پور چیکر دا د بکس څخه بهر کوي. او دا باید په اتوماتيک ډول معلومات ښکاره کړي، په هر څه پوه شي، او حتی د دې پوهاوي وړاندې کولو سره زما بار بار نه کوي. دا باید لږترلږه د محلي فرار تحلیل ترسره کړي، او یوازې که دا ناکامه شي، نو دا اړتیا لري چې ډول ډول تشریحات اضافه کړي چې د ژوند وخت تشریح کړي - او دا ډول سکیم د پور چیکر، یا په حقیقت کې د موجوده حافظې چیکر په پرتله خورا پیچلی دی. د "هرڅه سم دي" او "زه په هیڅ نه پوهیږم" تر مینځ انتخاب - نه، باید یو څه ښه وي. 
نو، د یو چا په توګه چې په C کې ډیری کوډ لیکلی، زه فکر کوم چې د ژوند د اتوماتیک کنټرول لپاره ملاتړ کول خورا مهم شی دی. زه له دې څخه هم ستړی شوی یم چې جاوا څومره حافظه کاروي او اصلي شکایت GC دی. کله چې تاسو په جاوا کې حافظه تخصیص کړئ ، نو تاسو به هغه حافظه بیرته ترلاسه نه کړئ چې په وروستي GC دور کې ځایی وه. دا په ژبو کې د ډیر دقیق حافظې مدیریت سره قضیه نده. که تاسو malloc ته زنګ ووهئ، تاسو سمدلاسه هغه حافظه ترلاسه کوئ چې معمولا یوازې کارول کیده. معمولا تاسو د حافظې سره ځینې لنډمهاله کارونه کوئ او سمدلاسه یې بیرته راګرځوئ. او دا سمدلاسه د مالوک حوض ته راستون کیږي، او راتلونکی مالوک دوره یې بیا راوباسي. له همدې امله، د ریښتینې حافظې کارول په ټاکل شوي وخت کې د ژوندیو شیانو سیټ ته کم شوي، او لیکونه. او که هرڅه په بشپړ ډول په نامناسب ډول نه لیکي، ډیری حافظه په کیچونو او پروسیسر کې پای ته رسیږي، او دا په چټکۍ سره کار کوي. مګر د malloc سره ډیری لاسي حافظې مدیریت ته اړتیا لري او په سم ترتیب کې ، په سم ځای کې وړیا بلل کیږي. زنګ کولی شي دا پخپله په سمه توګه اداره کړي، او په ډیری قضیو کې حتی غوره فعالیت وړاندې کوي، ځکه چې د حافظې مصرف یوازې اوسني محاسبې ته محدود شوی - د حافظې خالي کولو لپاره د راتلونکي GC دورې ته انتظار کولو سره مخالف. د پایلې په توګه، موږ د فعالیت ښه کولو لپاره خورا په زړه پورې لاره ترلاسه کړه. او خورا پیاوړی - زما مطلب دی ، ما دا ډول شیان ترسره کړل کله چې د فنټیک لپاره ډیټا پروسس کول ، او دې ما ته اجازه راکړه چې شاوخوا پنځه ځله سرعت ترلاسه کړم. دا خورا لوی وده ده ، په ځانګړي توګه په داسې نړۍ کې چیرې چې پروسیسرونه ګړندي نه کیږي او موږ لاهم د پرمختګونو په تمه یو.

د فعالیت انجنیر کیریر

Андрей: زه غواړم په عمومي توګه د مسلک په اړه هم وپوښتم. تاسو په HotSpot کې د خپل JIT کار سره شهرت ته رسیدلی او بیا ازول ته تللی، کوم چې د JVM شرکت هم دی. مګر موږ دمخه د سافټویر په پرتله په هارډویر کې ډیر کار کاوه. او بیا دوی ناڅاپه د لوی معلوماتو او ماشین زده کړې ته لاړل، او بیا د درغلۍ کشف ته. دا څنګه وشول؟ دا د پراختیا ډیری مختلفې ساحې دي.

کلف: زه د یو څه مودې لپاره برنامه کوم او ډیری مختلف صنفونه مې اخیستي دي. او کله چې خلک وايي: "او، تاسو هغه څوک یاست چې د جاوا لپاره یې JIT کړی!"، دا تل مسخره ده. مګر مخکې له دې، زه د پوسټ سکریپټ په کلون کار کاوه - هغه ژبه چې ایپل یو ځل د لیزر پرنټرونو لپاره کارولې. او تر دې وړاندې مې د څلورمې ژبې تطبیق هم کړی و. زما په اند زما لپاره عام موضوع د وسیلې پراختیا ده. زما ټول ژوند ما داسې وسیلې جوړې کړې چې نور خلک د دوی په زړه پوري برنامې لیکي. مګر زه د عملیاتي سیسټمونو ، ډرایورانو ، د کرنل کچې ډیبګرانو ، د OS پراختیا لپاره ژبې په پراختیا کې هم دخیل وم ، کوم چې لږ څه پیل کړل ، مګر د وخت په تیریدو سره خورا پیچلي شو. مګر اصلي موضوع لاهم د وسایلو پراختیا ده. زما د ژوند لویه برخه د ازول او لمر ترمینځ تیره شوه ، او دا د جاوا په اړه وه. مګر کله چې زه د لوی ډیټا او ماشین زده کړې ته لاړم، ما یو ځل بیا زما په زړه پورې خولۍ واچوله او ویې ویل، "هو، اوس موږ یوه غیر معمولي ستونزه لرو، او دلته ډیر په زړه پوري شیان روان دي او خلک کارونه کوي." دا د اخیستلو لپاره د پرمختګ عالي لاره ده.

هو، زه واقعیا د توزیع شوي کمپیوټر سره مینه لرم. زما لومړۍ دنده په اعلاناتي پروژه کې په C کې د زده کونکي په توګه وه. دا په زیلوګ Z80 چپس کې کمپیوټري ویشل شوي چې د انلاګ OCR لپاره ډاټا راټولوي، د ریښتیني انلاګ تحلیل کونکي لخوا تولید شوي. دا یوه ښه او په بشپړه توګه لیونی موضوع وه. مګر ستونزې وې، ځینې برخې یې په سمه توګه نه پیژندل شوې، نو تاسو باید یو عکس واخلئ او یو کس ته یې وښایئ چې مخکې یې د دوی په سترګو لوستلی شي او راپور ورکړي چې څه یې ویلي، او له همدې امله د معلوماتو سره دندې شتون درلود، او دا دندې خپله ژبه درلوده . یو پس منظر شتون درلود چې دا ټول پروسس کوي - Z80s د vt100 ټرمینالونو سره موازي روان دي - په هر شخص کې یو، او په Z80 کې د موازي پروګرام کولو ماډل شتون درلود. د حافظې ځینې عام ټوټه د ټولو Z80s لخوا د ستوري ترتیب کې شریکه شوې؛ شاته الوتکه هم شریکه شوې وه، او د RAM نیمایي برخه په شبکه کې شریکه شوې وه، او نیمایي شخصي وه یا بل څه ته لاړ. یو معنی لرونکی پیچلی موازي توزیع شوی سیسټم د شریک ... نیمه شریک حافظې سره. دا کله وه ... زه حتی په یاد نشم کولی، د 80 لسیزې په مینځ کې. ډیر وخت دمخه. 
هو، راځئ فرض کړو چې 30 کاله دمخه ډیر وخت دی، د ویشل شوي کمپیوټر پورې اړوند ستونزې د اوږدې مودې لپاره شتون لري؛ خلک له اوږدې مودې راهیسې په جګړه کې دي. بیووولف- کلسترونه. دا ډول کلسترونه داسې ښکاري ... د مثال په توګه: دلته ایترنیټ شتون لري او ستاسو ګړندی x86 له دې ایترنیټ سره وصل دی ، او اوس تاسو غواړئ جعلي شریکه حافظه ترلاسه کړئ ، ځکه چې هغه وخت هیڅوک نشي کولی توزیع شوي کمپیوټري کوډینګ وکړي ، دا خورا ستونزمن و او له همدې امله دلته شتون لري. په x86 کې د محافظت حافظې پا pagesو سره جعلي شریکه حافظه وه ، او که تاسو دې پا pageې ته لیکلي ، نو موږ نورو پروسیسرانو ته وایو چې که دوی ورته شریکې حافظې ته لاسرسی ولري ، نو دا به له تاسو څخه بار ته اړتیا ولري ، او پدې توګه د ملاتړ لپاره د پروتوکول په څیر یو څه. د کیچ همغږي ښکاره شوه او د دې لپاره سافټویر. په زړه پورې مفهوم. اصلي ستونزه، البته، بل څه وه. دې ټولو کار وکړ، مګر تاسو په چټکۍ سره د فعالیت ستونزې ترلاسه کړې، ځکه چې هیڅوک په کافي اندازه د فعالیت ماډلونه نه پوهیږي - د حافظې لاسرسي کومې نمونې شتون لري، څنګه ډاډ ترلاسه کړئ چې نوډونه په پای کې یو بل پینګ نه کوي، او داسې نور.

هغه څه چې زه یې په H2O کې راوړم هغه دا دی چې دا پخپله پراختیا کونکي دي چې د ټاکلو مسؤلیت لري چیرې چې موازي پټ دی او چیرې نه دی. زه د کوډ کولو ماډل سره راغلم چې د لوړ فعالیت کوډ لیکل اسانه او ساده کړي. مګر د سست چلولو کوډ لیکل ستونزمن دي، دا به بد ښکاري. تاسو اړتیا لرئ په جدي ډول د سست کوډ لیکلو هڅه وکړئ ، تاسو باید غیر معیاري میتودونه وکاروئ. د بریک کوډ په لومړي نظر کې لیدل کیږي. د پایلې په توګه، تاسو معمولا کوډ لیکئ چې ګړندی پرمخ ځي، مګر تاسو باید معلومه کړئ چې د شریکې حافظې په صورت کې څه وکړي. دا ټول په لویو صفونو پورې تړلي دي او هلته چلند په موازي جاوا کې د غیر بې ثباته لویو صفونو سره ورته دی. زما مطلب دی، تصور وکړئ چې دوه تارونه موازي سرې ته لیکي، یو یې وګټي، او بل یې، په دې اساس، بایللی، او تاسو نه پوهیږئ چې کوم یو دی. که دوی بې ثباته نه وي، نو امر کولی شي هر هغه څه وي چې تاسو یې غواړئ - او دا واقعیا ښه کار کوي. خلک واقعیا د عملیاتو ترتیب ته پاملرنه کوي ، دوی په سم ځایونو کې بې ثباته کوي ، او دوی په سم ځایونو کې د حافظې پورې اړوند فعالیت ستونزې تمه لري. که نه نو ، دوی به په ساده ډول له 1 څخه تر N پورې د لوپونو په شکل کې کوډ ولیکي ، چیرې چې N یو څه ټریلیون دی ، پدې امید کې چې ټولې پیچلې قضیې به په اوتومات ډول موازي شي - او دا هلته کار نه کوي. مګر په H2O کې دا نه جاوا دی او نه سکالا؛ تاسو کولی شئ دا "جاوا منفي منفي" په پام کې ونیسئ که تاسو وغواړئ. دا د پروګرام کولو خورا روښانه سټایل دی او د لوپس او اریونو سره د ساده C یا جاوا کوډ لیکلو ته ورته دی. مګر په ورته وخت کې، حافظه په ټیرابایټ کې پروسس کیدی شي. زه لاهم H2O کاروم. زه دا وخت په وخت په بیلابیلو پروژو کې کاروم - او دا لاهم ترټولو ګړندی شی دی ، د خپلو سیالانو په پرتله لسګونه ځله ګړندی. که تاسو د کالمر ډیټا سره لوی ډیټا ترسره کوئ ، نو د H2O ماتول خورا سخت دي.

تخنیکي ننګونې

Андрей: ستاسو په ټول مسلک کې ستاسو ترټولو لویه ننګونه څه وه؟

کلف: ایا موږ د موضوع په تخنیکي یا غیر تخنیکي برخه بحث کوو؟ زه به ووایم چې ترټولو لوی ننګونې تخنیکي ندي. 
لکه څنګه چې د تخنیکي ننګونو لپاره. ما په ساده ډول دوی ته ماتې ورکړه. زه حتی نه پوهیږم چې ترټولو لوی څه و، مګر یو څه ډیر په زړه پورې وو چې ډیر وخت یې واخیست، ذهني مبارزه. کله چې زه لمر ته لاړم، زه ډاډه وم چې زه به یو ګړندی تالیف جوړ کړم، او د مشرانو یوې ډلې په ځواب کې وویل چې زه به هیڅکله بریالی نه شم. مګر ما دا لاره تعقیب کړه ، د راجسټر تخصیص ته یې یو کمپیلر ولیکه ، او دا خورا ګړندی و. دا د عصري C1 په څیر ګړندی و ، مګر تخصیص کونکی هغه وخت خورا ورو و ، او په لید کې دا د ډیټا جوړښت لوی ستونزه وه. ما د ګرافیکي راجستر تخصیص لیکلو ته اړتیا درلوده او زه د کوډ څرګندولو او سرعت تر مینځ مسایل نه پوهیږم ، کوم چې په هغه دوره کې شتون درلود او خورا مهم و. دا معلومه شوه چې د ډیټا جوړښت معمولا د هغه وخت په x86s کې د کیچ اندازې څخه ډیر وي ، او له همدې امله ، که ما په پیل کې داسې انګیرله چې د راجستر تخصیص به د ټول جټټر وخت 5-10 سلنه کار وکړي ، نو په حقیقت کې دا ثابت شو. 50 سلنه.

لکه څنګه چې وخت تیر شو، کمپیلر ډیر پاک او ډیر اغیزمن شو، په ډیرو مواردو کې د ډارونکي کوډ تولید بند کړ، او فعالیت یې په زیاتیدونکي توګه د C کمپیلر تولید سره ورته والی پیل کړ. پرته لدې چې، تاسو یو څه ناپاک ولیکئ چې حتی C سرعت نه کوي. . که تاسو د C په څیر کوډ ولیکئ، نو تاسو به په ډیرو مواردو کې د C په څیر فعالیت ترلاسه کړئ. او هرڅومره چې تاسو لاړ شئ ، ډیر ځله تاسو کوډ ترلاسه کړئ چې په غیر متناسب ډول د C درجې سره مطابقت لري ، د راجسټر تخصیص د یو څه بشپړ په څیر ښکاري ... پرته لدې چې ستاسو کوډ ګړندی وي یا ورو. ما په تخصیص کونکي کار ته دوام ورکړ ترڅو دا غوره انتخابونه وکړي. هغه ورو او ورو شو، مګر هغه په ​​​​قضیو کې ښه او غوره فعالیت وړاندې کړ چې بل څوک یې نشي کولی. زه کولی شم د راجستر تخصیص کونکي ته لاړ شم ، هلته د یوې میاشتې کار ښخ کړم ، او ناڅاپه به ټول کوډ 5٪ ګړندی اجرا کول پیل کړي. دا د وخت په تیریدو سره پیښ شو او د راجستر تخصیص یو څه د هنر کار وګرځید - هرڅوک یې خوښ کړ یا یې نفرت وکړ، او د اکاډمۍ خلکو د موضوع په اړه پوښتنې وکړې "ولې هر څه په دې ډول ترسره کیږي"، ولې نه. لاین سکین، او څه توپیر دی. ځواب لاهم ورته دی: د ګراف رنګ کولو پراساس تخصیص کونکی او د بفر کوډ سره خورا محتاط کار د بریا وسلې سره مساوي دی ، غوره ترکیب چې هیڅوک نشي ماتولی. او دا یو غیر څرګند شی دی. نور هر څه چې تالیف کونکی یې کوي په کافي اندازه ښه مطالعه شوي شیان دي ، که څه هم دوی د هنر کچې ته هم راوړل شوي. ما تل هغه شیان ترسره کړل چې باید کمپیلر د هنر په کار بدل کړي. مګر پدې کې هیڅ یو غیر معمولي نه و - پرته د راجستر تخصیص کونکي. چال دا دی چې محتاط اوسئ کمول د بار لاندې او، که دا پیښ شي (زه کولی شم په ډیر تفصیل سره تشریح کړم که علاقه ولري)، دا پدې مانا ده چې تاسو کولی شئ په ډیر جارحانه توګه انلاین کړئ، پرته له دې چې د فعالیت مهال ویش کې د خنډ څخه راټیټ شي. په هغه وختونو کې، د بشپړ پیمانه تالیف کونکو یوه ډله وه، د ببلونو او ویسلونو سره ځړول شوي، چې د راجستر تخصیص کونکي درلودل، مګر بل هیڅوک یې نشو کولی.

ستونزه دا ده چې که تاسو هغه میتودونه اضافه کړئ چې د انلین کولو ساحې ته د انلاین کولو ، زیاتوالي او زیاتوالي تابع دي ، د کارول شوي ارزښتونو سیټ سمدلاسه د راجسټرونو شمیر ته مخه کوي ، او تاسو باید دوی پرې کړئ. مهمه کچه معمولا هغه وخت راځي کله چې تخصیص کونکی له لاسه ورکوي، او د سپیل لپاره یو ښه کاندید د بل ارزښت لري، تاسو به په عمومي ډول ځینې وحشي شیان وپلورئ. دلته د انلاین کولو ارزښت دا دی چې تاسو د زنګ وهلو او خوندي کولو لپاره د سر برخه له لاسه ورکوئ ، تاسو کولی شئ دننه ارزښتونه وګورئ او نور یې اصلاح کولی شئ. د انلاین کولو لګښت دا دی چې لوی شمیر ژوندی ارزښتونه رامینځته کیږي ، او که ستاسو د راجسټر تخصیص له اړتیا څخه ډیر سوځیدلی وي ، تاسو سمدلاسه له لاسه ورکوئ. له همدې امله، ډیری تخصیص کونکي ستونزه لري: کله چې انلاین کول یو ټاکلی کرښه تیریږي، په نړۍ کې هرڅه کمیدل پیل کیږي او تولیدات د تشناب لاندې فلش کیدی شي. هغه څوک چې تالیف کونکي پلي کوي ځینې هوریستیکونه اضافه کوي: د مثال په توګه ، د انلاین کولو مخه نیولو لپاره ، د یو څه لوی اندازې سره پیل کول ، ځکه چې تخصیص به هرڅه خراب کړي. دا څنګه د فعالیت په ګراف کې کنک رامینځته کیږي - تاسو انلاین یاست ، انلاین ، فعالیت ورو وده کوي - او بیا وده کوي! - دا د ګړندي جیک په څیر ښکته کیږي ځکه چې تاسو ډیر قطار کړی. دا څنګه د جاوا له راتګ دمخه هرڅه کار کاوه. جاوا خورا ډیر انلاین کولو ته اړتیا لري ، نو ما باید خپل تخصیص خورا ډیر جارحانه کړي ترڅو دا د کریش کیدو پرځای کچه راوباسي ، او که تاسو ډیر انلاین کړئ ، نو دا توییدل پیل کوي ، مګر بیا د "نور نه توزیع" شیبه لاهم راځي. دا یو په زړه پوری مشاهده ده او دا یوازې ما ته له کوم ځای څخه راغلی ، څرګند ندی ، مګر دا ښه تادیه کوي. ما جارحانه انلایننګ واخیست او دا ما هغه ځایونو ته ورساوه چیرې چې جاوا او C فعالیت په څنګ کې کار کوي. دوی واقعیا نږدې دي - زه کولی شم د جاوا کوډ ولیکم چې د C کوډ او ورته شیانو په پرتله خورا ګړندی دی ، مګر په اوسط ډول د شیانو په لوی عکس کې ، دوی تقریبا د پرتله کولو وړ دي. زه فکر کوم چې د دې وړتیا یوه برخه د راجستر تخصیص کونکی دی، کوم چې ما ته اجازه راکوي چې د امکان تر حده په احمقانه توګه انلاین کړم. زه یوازې هر څه چې ګورم انلاین کړم. دلته پوښتنه دا ده چې ایا تخصیص کونکی ښه کار کوي ، ایا پایله په هوښیارۍ سره کار کوډ دی. دا یوه لویه ننګونه وه: دا ټول درک کول او دا کار کول.

د راجستر تخصیص او څو کورونو په اړه لږ څه

Владимир: د راجستر تخصیص په څیر ستونزې د یو ډول ابدي او نه ختمیدونکي موضوع په څیر ښکاري. زه حیران یم چې ایا کله هم داسې نظر شتون لري چې ژمن ښکاري او بیا په عمل کې ناکام شوی؟

کلف: حتماً! د راجستر تخصیص یوه ساحه ده چیرې چې تاسو هڅه کوئ د NP - بشپړې ستونزې حل کولو لپاره ځینې هوریستیک ومومئ. او تاسو هیڅکله نشئ کولی بشپړ حل ترلاسه کړئ ، سمه ده؟ دا په ساده ډول ناممکن دی. وګورئ، د وخت تالیف څخه مخکې - دا هم خراب کار کوي. دلته خبرې اترې د ځینو اوسط قضیو په اړه دي. د عادي فعالیت په اړه، نو تاسو کولی شئ لاړ شئ او یو څه اندازه کړئ چې تاسو فکر کوئ ښه عادي فعالیت دی - په هرصورت، تاسو د هغې د ښه کولو لپاره کار کوئ! د راجستر تخصیص د فعالیت په اړه یوه موضوع ده. یوځل چې تاسو لومړی پروټوټایپ ولرئ ، دا کار کوي او هغه څه رنګوي چې اړتیا ورته وي ، د فعالیت کار پیل کیږي. تاسو اړتیا لرئ چې ښه اندازه کول زده کړئ. ولې دا مهمه ده؟ که تاسو روښانه معلومات لرئ، تاسو کولی شئ مختلف ساحې وګورئ او وګورئ: هو، دا دلته مرسته کړې، مګر دا هغه ځای دی چې هرڅه مات شوي! ځینې ​​​​ښه نظرونه راځي، تاسو نوي هوریستیک اضافه کړئ او ناڅاپه هرڅه په اوسط ډول یو څه ښه کار پیل کوي. یا دا نه پیل کیږي. ما د قضیو یوه ډله درلوده چیرې چې موږ د پنځه سلنه فعالیت لپاره مبارزه کوله چې زموږ پراختیا د مخکیني تخصیص کونکي څخه توپیر کوي. او هر ځل داسې ښکاري: چیرته چې تاسو وګټئ، چیرته چې تاسو بایلئ. که تاسو د ښه فعالیت تحلیلي وسیلې لرئ ، تاسو کولی شئ له لاسه ورکونکي نظرونه ومومئ او پوه شئ چې ولې دوی ناکام کیږي. شاید دا د ارزښت وړ وي چې هرڅه لکه څنګه چې دي پریږدئ ، یا شاید د ښه کولو لپاره خورا جدي چلند غوره کړئ ، یا بهر لاړ شئ او بل څه تنظیم کړئ. دا د شیانو ټوله ډله ده! ما دا ښه هیک جوړ کړ، مګر زه دې ته هم اړتیا لرم، دا یو، او دا یو - او د دوی ټول ترکیب یو څه پرمختګونه ورکوي. او یوازیتوب کولی شي ناکام شي. دا د NP - بشپړو ستونزو په اړه د فعالیت کار طبیعت دی.

Владимир: یو څوک احساس کوي چې په تخصیص کې د انځور کولو په څیر شیان یوه ستونزه ده چې دمخه حل شوې ده. ښه ، دا ستاسو لپاره پریکړه شوې ، د هغه څه په اړه قضاوت کول چې تاسو یې وایئ ، نو ایا دا حتی د دې ارزښت لري ...

کلف: دا داسې نه ده حل شوې. دا تاسو یاست چې دا باید په "حل شوي" بدل کړئ. سختې ستونزې شته او باید حل شي. یوځل چې دا ترسره شي، دا د محصولاتو په اړه کار کولو وخت دی. تاسو اړتیا لرئ د دې مطابق کار ته مراجعه وکړئ - بنچمارکونه وکړئ، میټریکونه راټول کړئ، شرایط تشریح کړئ کله چې تاسو پخوانۍ نسخې ته بیرته راستانه شوي، ستاسو زوړ هیک بیا کار پیل کړ (یا برعکس، ودرول شو). او تر هغه چې تاسو یو څه لاسته راوړئ مه پریږدئ. لکه څنګه چې ما مخکې وویل، که چیرې ښه نظرونه شتون ولري چې کار یې نه دی کړی، مګر د نظرونو د راجسترونو تخصیص کې دا تقریبا پای ته رسیږي. تاسو کولی شئ، د بیلګې په توګه، ساینسي خپرونې ولولئ. که څه هم اوس دا سیمه د ځوانۍ په پرتله ډیر ورو ورو حرکت پیل کړی او ډیر روښانه شوی دی. په هرصورت، په دې برخه کې بې شمیره خلک کار کوي او د دوی ټول نظریات د هڅې وړ دي، دوی ټول په وزرو کې انتظار کوي. او تاسو نشئ ویلای چې دوی څومره ښه دي پرته لدې چې تاسو یې هڅه وکړئ. دوی ستاسو په تخصیص کونکي کې د هر څه سره څومره ښه مدغم کیږي ، ځکه چې یو تخصیص کونکي ډیر شیان ترسره کوي ، او ځینې نظرونه به ستاسو په ځانګړي تخصیص کې کار ونکړي ، مګر په بل تخصیص کونکي کې به دوی په اسانۍ سره وي. د تخصیص کونکي لپاره د ګټلو اصلي لاره دا ده چې ورو توکي له اصلي لارې بهر وباسئ او دې ته اړ کړئ چې د ورو لارو سرحدونو سره وویشئ. نو که تاسو غواړئ چې GC پرمخ بوځي، ورو لاره غوره کړئ، غیر فعال کړئ، یو استثنا وغورځوئ، دا ټول شیان - تاسو پوهیږئ چې دا شیان نسبتا نادر دي. او دوی واقعیا نادر دي ، ما چیک کړ. تاسو اضافي کار کوئ او دا د دې ورو لارو ډیری محدودیتونه لرې کوي ، مګر دا واقعیا مهمه نده ځکه چې دوی ورو دي او په ندرت سره سفر کوي. د مثال په توګه، یو ناپاک ټکی - دا هیڅکله نه کیږي، سمه ده؟ تاسو اړتیا لرئ د مختلفو شیانو لپاره څو لارې ولرئ، مګر دوی باید د اصلي سره مداخله ونه کړي. 

Владимир: تاسو د ملټي کور په اړه څه فکر کوئ، کله چې په یوځل کې زرګونه کورونه شتون ولري؟ ایا دا ګټور شی دی؟

کلف: د GPU بریالیتوب ښیې چې دا خورا ګټور دی!

Владимир: دوی خورا متخصص دي. د عمومي هدف پروسیسرونو په اړه څه؟

کلف: ښه، دا د ازول سوداګریز ماډل و. ځواب په داسې دور کې بیرته راغی کله چې خلک واقعیا د وړاندوینې وړ فعالیت سره مینه لري. هغه وخت موازي کوډ لیکل ستونزمن وو. د H2O کوډ کولو ماډل خورا د توزیع وړ دی ، مګر دا د عمومي هدف ماډل ندی. شاید د GPU کارولو په پرتله یو څه ډیر عمومي وي. ایا موږ د داسې شی د پراختیا یا د هغې کارولو پیچلتیا په اړه خبرې کوو؟ د مثال په توګه، ازول ما ته یو په زړه پورې درس راکړ، یو نه بلکه غیر څرګند دی: کوچني کیچونه نورمال دي. 

په ژوند کې ترټولو لوی ننګونه

Владимир: د غیر تخنیکي ننګونو په اړه څه؟

کلف: تر ټولو لویه ننګونه دا وه چې د خلکو سره مهربانه او ښه نه وي. او د پایلې په توګه، ما په دوامداره توګه ځان په خورا سختو شرایطو کې وموند. هغه څوک چې زه پوهیدم شیان غلط روان دي، مګر نه پوهیدل چې څنګه د دې ستونزو سره مخ شي او نشي کولی دوی سمبال کړي. ډیری اوږدمهاله ستونزې، چې د لسیزو راهیسې دوام لري، په دې توګه رامینځته شوي. دا حقیقت چې جاوا د C1 او C2 تالیف کونکي لري د دې مستقیم پایله ده. دا حقیقت چې په پرله پسې لسو کلونو کې په جاوا کې څو اړخیز تالیف شتون نلري هم مستقیم پایله ده. دا څرګنده ده چې موږ داسې یو سیسټم ته اړتیا درلوده، مګر دا څرګنده نه ده چې ولې شتون نه درلود. ما د یو انجینر یا انجینرانو یوې ډلې سره ستونزې درلودې. یو وخت، کله چې ما په لمر کې کار پیل کړ، زه وم ... سمه ده، نه یوازې هغه وخت، زه په عمومي توګه د هر څه په اړه خپل نظر لرم. او ما فکر کاوه چې دا ریښتیا ده چې تاسو کولی شئ یوازې دا حقیقت واخلئ او په سر کې یې ووایاست. په ځانګړي توګه له هغه وخته چې زه ډیری وخت په حیرانتیا سره سم وم. او که تاسو دا طریقه نه خوښوئ ... په ځانګړې توګه که تاسو په ښکاره ډول غلط یاست او بې معنی کار کوئ ... په عموم کې، لږ شمیر خلک د اړیکو دا ډول زغملی شي. که څه هم ځینې کولی شي، زما په څیر. ما خپل ټول ژوند د استقلال په اصولو جوړ کړی دی. که تاسو ماته یو څه غلط وښایاست، زه به سمدلاسه شاته وګرځم او ووایم: تا بې ځایه وویل. په عین حال کې، البته، زه بښنه غواړم او دا ټول، زه به د ګټو یادونه وکړم، که کوم وي، او نور سم ګامونه به پورته کړم. له بلې خوا، زه په حیرانتیا سره د ټول وخت د حیرانتیا لوی فیصدي په اړه سم یم. او دا د خلکو سره په اړیکو کې ډیر ښه کار نه کوي. زه هڅه نه کوم چې ښه اوسم ، مګر زه په کلکه پوښتنه کوم. "دا به هیڅکله کار ونه کړي، ځکه چې یو، دوه او درې." او دوی داسې وو، "آه!" نورې پایلې وې چې شاید له پامه غورځول غوره وي: د بیلګې په توګه، هغه څه چې زما له میرمنې څخه د طلاق او له هغې وروسته لس کاله خپګان لامل شوي.

ننګونه د خلکو سره مبارزه ده، د دوی د انګیرنې سره چې تاسو څه کولی شئ یا نشي کولی، څه مهم دي او څه ندي. د کوډ کولو سټایل په اړه ډیری ننګونې وې. زه لاهم ډیر کوډ لیکم ، او په دې ورځو کې ما حتی سست کړی و ځکه چې ما ډیری موازي کارونه ترسره کول او د دې پرځای چې په یوه باندې تمرکز وکړم. شاته کتل ، ما د جاوا JIT کمانډ لپاره نیم کوډ لیکلی ، د C2 کمانډ. راتلونکی ګړندی کوډر نیم سست لیکلی ، بل نیم ورو ورو ، او دا یو احتمالي کمښت و. په دې قطار کې اووم کس ډیر، ډیر سست و - دا تل پیښیږي! ما ډیر کوډ لمس کړ. ما ولیدل چې چا څه لیکلي، پرته له استثنا، ما د دوی کوډ ته وکتل، هر یو یې بیاکتنه وکړه، او بیا یې هم د دوی په پرتله ډیر څه لیکلو ته دوام ورکړ. دا طریقه د خلکو سره ډیر ښه کار نه کوي. ځینې ​​خلک دا نه خوښوي. او کله چې دوی نشي کولی دا اداره کړي، هر ډول شکایتونه پیل کیږي. د مثال په توګه، ما ته یو ځل ویل شوي وو چې د کوډ کولو مخه ونیسم ځکه چې زه ډیر کوډ لیکم او دا ټیم له خطر سره مخامخ کوي، او دا ټول ما ته د ټوکې په څیر ښکاري: یاره، که د ټیم پاتې برخه ورکه شي او زه د کوډ لیکلو ته دوام ورکوم، تاسو یوازې نیم ټیمونه به له لاسه ورکړي. له بلې خوا، که زه د کوډ لیکلو ته دوام ورکړم او تاسو نیم ټیم له لاسه ورکړم، دا د خورا خراب مدیریت په څیر ښکاري. ما هیڅکله د دې په اړه فکر نه کاوه، هیڅکله یې په اړه خبرې نه وې کړې، مګر دا لاهم زما په سر کې یو ځای و. فکر مې د ذهن په شا کې ګرځېدلی و: "ایا تاسو ټول له ما سره ټوکې کوئ؟" نو، تر ټولو لویه ستونزه زما او د خلکو سره زما اړیکې وې. اوس زه خپل ځان ډیر ښه پوهیږم، زه د اوږدې مودې لپاره د پروګرام کونکو لپاره د ټیم مشر وم، او اوس زه په مستقیم ډول خلکو ته وایم: تاسو پوهیږئ، زه هغه یم، او تاسو به زما سره معامله وکړئ - ایا دا سمه ده که زه ودریږم؟ دلته؟ او کله چې دوی ورسره معامله پیل کړه، هرڅه کار وکړ. په حقیقت کې، زه نه بد یم او نه ښه، زه هیڅ بد نیت یا خود غرضه هیلې نه لرم، دا یوازې زما جوهر دی، او زه باید په یو ډول سره ژوند وکړم.

Андрей: په دې وروستیو کې هر چا د ځان پوهاوي په اړه خبرې پیل کړې د متعصبو کسانو لپاره، او په عمومي توګه نرم مهارتونه. تاسو په دې اړه څه ویلای شئ؟

کلف: هو، دا هغه بصیرت او درس وو چې ما له خپلې میرمنې څخه له طلاق څخه زده کړل. هغه څه چې ما د طلاق څخه زده کړل د ځان پوهیدل وو. په دې توګه ما د نورو خلکو په پوهیدو پیل وکړ. پوهیږئ چې دا تعامل څنګه کار کوي. دا د دې لامل شو چې یو په بل پسې کشفونه وشي. د دې په اړه پوهاوی شتون درلود چې زه څوک یم او د څه استازیتوب کوم. زه څه کوم: یا زه په کار کې بوخت یم، یا زه د شخړې څخه ډډه کوم، یا بل څه - او د ځان پوهاوي دا کچه واقعیا د ځان په کنټرول کې ساتلو کې مرسته کوي. له دې وروسته هرڅه خورا اسانه کیږي. یو شی چې ما نه یوازې په خپل ځان کې موندلی، بلکې په نورو پروګرامرانو کې هم د افکارو لفظي کولو توان نلري کله چې تاسو د احساساتي فشار په حالت کې یاست. د مثال په توګه، تاسو هلته ناست یاست، کوډ کول، د جریان په حالت کې، او بیا دوی تاسو ته په منډه راځي او په هیسټریک کې چیغې وهي چې یو څه مات شوی او اوس به ستاسو په وړاندې خورا سخت اقدامات وشي. او تاسو نشئ کولی یوه کلمه ووایاست ځکه چې تاسو د احساساتي فشار په حالت کې یاست. ترلاسه شوې پوهه تاسو ته اجازه درکوي چې د دې شیبې لپاره چمتو کړئ، ژوندي پاتې شئ او د بیرته ستنیدو پلان ته لاړ شئ، له هغې وروسته تاسو یو څه کولی شئ. نو هو ، کله چې تاسو پوهیدل پیل کړئ چې دا ټول څنګه کار کوي ، دا د ژوند بدلولو لوی پیښه ده. 
ما پخپله سم الفاظ ونه موندل، مګر ما د عملونو ترتیب یاد کړ. ټکی دا دی چې دا غبرګون څومره فزیکي دی څومره چې لفظي وي، او تاسو ځای ته اړتیا لرئ. داسې ځای، د زین احساس کې. دا په حقیقت کې هغه څه دي چې باید تشریح شي، او بیا سمدلاسه یو طرفه ګام واخلئ - په بشپړ ډول په فزیکي توګه ګام واخلئ. کله چې زه په شفاهي توګه خاموش پاتې کیږم، زه کولی شم وضعیت په احساساتي توګه پروسس کړم. لکه څنګه چې اډرینالین ستاسو دماغ ته رسي ، تاسو د جګړې یا الوتنې حالت ته اړوي ، تاسو نور هیڅ نشئ ویلای ، نه - اوس تاسو احمق یاست ، د څپې وهونکي انجینر یاست ، د ښه ځواب ورکولو توان نلري یا حتی د برید مخه نیسي ، او برید کونکی وړیا دی. بیا بیا برید کول. تاسو باید لومړی خپل ځان بیا شئ ، کنټرول بیرته ترلاسه کړئ ، د "جنګ یا الوتنې" حالت څخه بهر شئ.

او د دې لپاره موږ لفظي ځای ته اړتیا لرو. یوازې وړیا ځای. که تاسو هر څه ووایاست، نو تاسو کولی شئ په سمه توګه ووایاست، او بیا لاړ شئ او د ځان لپاره واقعیا "ځای" ومومئ: په پارک کې د تګ لپاره لاړ شئ، ځان په شاور کې بند کړئ - دا مهمه نده. اصلي شی دا دی چې په لنډمهاله توګه له دې حالت څخه جلا شي. هرڅومره ژر چې تاسو لږترلږه د څو ثانیو لپاره بند کړئ ، بیرته راستنیدو کنټرول کړئ ، تاسو په ارامه فکر پیل کوئ. "ښه، زه یو ډول احمق نه یم، زه احمقانه کارونه نه کوم، زه یو ډیر ګټور سړی یم." یوځل چې تاسو وکولی شئ خپل ځان قانع کړئ ، دا وخت دی چې راتلونکي مرحلې ته لاړشئ: پوه شئ چې څه پیښ شوي. په تاسو برید شوی، برید له هغه ځایه راغلی چې تاسو یې تمه هم نه درلوده، دا یو بې ایمانه، ناوړه برید و. دا بد دی. بل ګام دا دی چې پوه شي چې ولې بریدګر دې ته اړتیا درلوده. رښتیا، ولې؟ شاید ځکه چې هغه پخپله غوسه دی؟ هغه ولې لېونی دی؟ د مثال په توګه، ځکه چې هغه خپل ځان خراب کړی او نشي کولی مسؤلیت ومني؟ دا د ټول وضعیت په احتیاط سره اداره کولو لاره ده. مګر دا د چلولو لپاره خونې ته اړتیا لري، لفظي ځای. لومړی ګام د لفظي اړیکو ماتول دي. د خبرو اترو څخه ډډه وکړئ. لغوه کړئ، ژر تر ژره لاړ شئ. که دا د ټیلیفوني خبرو اترو وي، یوازې ودریږئ - دا یو مهارت دی چې ما د خپلې پخوانۍ میرمنې سره د خبرو اترو څخه زده کړل. که چیرې خبرې اترې ښه نه وي، یوازې "الوداع" ووایاست او ودریږئ. د تلیفون له بل اړخ څخه: "بلا بله بله"، تاسو ځواب ورکوئ: "هو، الوداع!" او ځړول. تاسو یوازې خبرې پای ته ورسوئ. پنځه دقیقې وروسته، کله چې تاسو ته د فکر کولو وړتیا بیرته راګرځي، تاسو یو څه سړه یاست، دا ممکنه ده چې د هرڅه په اړه فکر وکړئ، څه پیښ شوي او څه به پیښ شي. او یوازې د احساساتو څخه د عکس العمل کولو پرځای د فکري ځواب رامینځته کول پیل کړئ. زما لپاره، د ځان په پوهاوي کې پرمختګ دقیقا دا حقیقت و چې د احساساتي فشار په صورت کې زه خبرې نشم کولی. له دې حالت څخه وتل، فکر کول او پلان کول چې څنګه ځواب ووایو او ستونزو ته تاوان ورکړو - دا په هغه حالت کې سم ګامونه دي کله چې تاسو خبرې نشئ کولی. ترټولو آسانه لاره دا ده چې له هغه حالت څخه تیښته وکړئ چې احساساتي فشار ځان څرګندوي او په ساده ډول پدې فشار کې برخه اخیستل ودروي. له هغې وروسته تاسو د فکر کولو توان لرئ، کله چې تاسو فکر کولی شئ، تاسو د خبرو کولو توان لرئ، او داسې نور.

په هرصورت، په محکمه کې، مخالف وکیل هڅه کوي چې تاسو سره دا وکړي - اوس دا روښانه ده چې ولې. ځکه چې هغه د دې وړتیا لري چې تاسو داسې حالت ته راولي چې تاسو حتی د خپل نوم تلفظ هم نشئ کولی، د بیلګې په توګه. په ریښتینې معنی کې، تاسو به د خبرو کولو توان ونلرئ. که تاسو سره دا پیښ شي، او تاسو پوهیږئ چې تاسو به خپل ځان په داسې ځای کې ومومئ چیرې چې لفظي جنګونه روان وي، د محکمې په څیر ځای کې، نو تاسو کولی شئ د خپل وکیل سره راشي. وکیل به ستاسو لپاره ودریږي او لفظي برید به ودروي، او په بشپړ ډول به یې په قانوني ډول ترسره کړي، او د ضایع شوي زین ځای به بیرته تاسو ته درکړي. د بېلګې په توګه مې څو ځله خپلې کورنۍ ته زنګ وواهه، قاضي په دې اړه ډېر دوستانه و، خو مخالف وکیل مې چیغې وهلې او چیغې یې وهلې، زه هم نه شوای کولای چې په څنډه کې یوه کلمه هم ووایم. په دې قضیو کې، د منځګړیتوب کارول زما لپاره غوره کار کوي. منځګړی دا ټول فشار ودروي چې تاسو ته په دوامداره جریان کې توییږي ، تاسو د زین اړین ځای ومومئ ، او پدې سره د خبرو کولو وړتیا بیرته راګرځي. دا د پوهې ټوله ساحه ده په کوم کې چې د مطالعې لپاره ډیر څه شتون لري، په خپل ځان کې د موندلو لپاره ډیر څه، او دا ټول د لوړې کچې ستراتیژیکو پریکړو بدلوي چې د مختلفو خلکو لپاره توپیر لري. ځینې ​​​​خلک هغه ستونزې نلري چې پورته بیان شوي؛ معمولا، هغه خلک چې مسلکي پلورونکي دي دوی نلري. دا ټول هغه خلک چې خپل ژوند د کلمو سره جوړوي - مشهور سندرغاړي، شاعران، مذهبي مشران او سیاستوال، دوی تل د ویلو لپاره یو څه لري. دوی داسې ستونزې نه لري، مګر زه یې لرم.

Андрей: دا ... ناڅاپي وه. ښه، موږ لا دمخه ډیرې خبرې کړې دي او دا وخت دی چې دا مرکه پای ته ورسوو. موږ به خامخا په کنفرانس کې سره وینو او دې خبرو ته به دوام ورکړو. په هایډرا کې به ګورو!

تاسو کولی شئ د Hydra 2019 کنفرانس کې د کلف سره خپلو خبرو ته دوام ورکړئ، کوم چې به د جولای په 11-12، 2019 کې په سینټ پیټرزبورګ کې ترسره شي. هغه به د راپور سره راشي "د Azul هارډویر لیږد یادداشت تجربه". ټکټونه اخیستل کیدی شي په رسمي ویب پا onه کې.

سرچینه: www.habr.com

Add a comment