ජාවා හි JIT සම්පාදනයේ පියා වන ක්ලිෆ් ක්ලික් සමඟ විශිෂ්ට සම්මුඛ සාකච්ඡාවක්

ජාවා හි JIT සම්පාදනයේ පියා වන ක්ලිෆ් ක්ලික් සමඟ විශිෂ්ට සම්මුඛ සාකච්ඡාවක්ක්ලිෆ් ක්ලික් කරන්න — CTO of Cratus (ක්‍රියාවලි වැඩිදියුණු කිරීම සඳහා IoT සංවේදක), සාර්ථක පිටවීම් කිහිපයක් සහිත ආරම්භක (Rocket Realtime School, Neurensic සහ H2O.ai ඇතුළුව) ආරම්භක සහ සම-නිර්මාතෘ. ක්ලිෆ් ඔහුගේ පළමු සම්පාදකය ලිව්වේ වයස අවුරුදු 15 දී (TRS Z-80 සඳහා පැස්කල්)! ඔහු වඩාත් ප්‍රසිද්ධ වන්නේ ජාවා හි C2 (නෝඩ්ස් IR මුහුද) හි ඔහුගේ වැඩ සඳහා ය. ජාවා ප්‍රධාන නවීන මෘදුකාංග වේදිකාවක් ලෙස මතුවීමට එක් සාධකයක් වූ උසස් තත්ත්වයේ කේතයක් JIT හට නිපදවිය හැකි බව මෙම සම්පාදකයා ලෝකයට පෙන්වා දුන්නේය. ඉන්පසුව Cliff Azul Systems හට පිරිසිදු ජාවා මෘදුකාංගයක් සහිත 864-core මේන්‍ෆ්‍රේම් එකක් සෑදීමට උදව් කළ අතර එය GC ගිගාබයිට් 500ක මිටි තත්ත්පර 10ක් තුළ විරාම සඳහා සහය විය. පොදුවේ ගත් කල, ක්ලිෆ් JVM හි සියලුම අංගයන් මත වැඩ කිරීමට සමත් විය.

 
මෙම habrapost ක්ලිෆ් සමඟ විශිෂ්ට සම්මුඛ සාකච්ඡාවකි. අපි පහත මාතෘකා ගැන කතා කරමු:

  • පහත් මට්ටමේ ප්‍රශස්තකරණයන් වෙත සංක්‍රමණය වීම
  • විශාල ප්‍රතිනිර්මාණයක් කරන්නේ කෙසේද
  • පිරිවැය ආකෘතිය
  • පහත් මට්ටමේ ප්‍රශස්තිකරණ පුහුණුව
  • කාර්ය සාධනය වැඩි දියුණු කිරීම සඳහා ප්රායෝගික උදාහරණ
  • ඔබේම ක්‍රමලේඛන භාෂාවක් නිර්මාණය කරන්නේ ඇයි?
  • කාර්ය සාධන ඉංජිනේරු වෘත්තිය
  • තාක්ෂණික අභියෝග
  • රෙජිස්ටර් වෙන් කිරීම සහ බහු-හරය ගැන ටිකක්
  • ජීවිතේ ලොකුම අභියෝගය

සම්මුඛ පරීක්ෂණ පවත්වනු ලබන්නේ:

  • ඇන්ඩ්රේ සැටරින් Amazon Web Services වෙතින්. ඔහුගේ වෘත්තිය තුළ, ඔහු සම්පූර්ණයෙන්ම වෙනස් ව්‍යාපෘතිවල වැඩ කිරීමට සමත් විය: ඔහු Yandex හි NewSQL බෙදා හරින ලද දත්ත ගබඩාව, Kaspersky Lab හි වලාකුළු හඳුනාගැනීමේ පද්ධතියක්, Mail.ru හි බහු ක්‍රීඩක ක්‍රීඩාවක් සහ ඩොයිෂ් බැංකුවේ විදේශ විනිමය මිල ගණන් ගණනය කිරීමේ සේවාවක් පරීක්ෂා කළේය. මහා පරිමාණ පසුපෙළ සහ බෙදා හරින ලද පද්ධති පරීක්ෂා කිරීමට උනන්දු වෙයි.
  • ව්ලැඩිමීර් සිට්නිකොව් Netcracker වෙතින්. ජාල සහ ජාල උපකරණ කළමනාකරණ ක්‍රියාවලීන් ස්වයංක්‍රීය කිරීමට ටෙලිකොම් ක්‍රියාකරුවන් විසින් භාවිතා කරන මෘදුකාංග වන NetCracker OS හි ක්‍රියාකාරිත්වය සහ පරිමාණය පිළිබඳ වසර දහයක වැඩ. Java සහ Oracle Database කාර්ය සාධන ගැටළු ගැන උනන්දුයි. නිල PostgreSQL JDBC ධාවක දුසිමකට වඩා කාර්ය සාධන වැඩිදියුණු කිරීම් වල කර්තෘ.

පහත් මට්ටමේ ප්‍රශස්තකරණයන් වෙත සංක්‍රමණය වීම

ඇන්ඩෲ: ඔබ JIT සම්පාදනය, ජාවා සහ පොදුවේ කාර්ය සාධනය පිළිබඳ ලෝකයේ විශාල නමක් නේද? 

ක්ලිෆ්ෆ්: එය ඒ වගේ දෙයක්!

ඇන්ඩෲ: කාර්ය සාධනය පිළිබඳ සාමාන්ය ප්රශ්න කිහිපයක් සමඟ ආරම්භ කරමු. CPU මට්ටමේ වැඩ කිරීම වැනි ඉහළ මට්ටමේ සහ පහළ මට්ටමේ ප්‍රශස්තකරණයන් අතර තේරීම ගැන ඔබ සිතන්නේ කුමක්ද?

ක්ලිෆ්ෆ්: ඔව්, මෙතන හැම දෙයක්ම සරලයි. වේගවත්ම කේතය කිසි විටෙකත් ක්‍රියාත්මක නොවන එකකි. එමනිසා, ඔබ සැමවිටම ඉහළ මට්ටමකින් ආරම්භ කළ යුතුය, ඇල්ගොරිතම මත වැඩ කරන්න. ප්‍රමාණවත් තරම් විශාල නියතයන් මැදිහත් නොවන්නේ නම් වඩා හොඳ O අංකනය නරක O අංකනය පරදවයි. පහත් මට්ටමේ දේවල් අවසන් වේ. සාමාන්‍යයෙන්, ඔබ ඔබේ තොගයේ ඉතිරි කොටස් ප්‍රමාණවත් ලෙස ප්‍රශස්ත කර ඇත්නම් සහ තවත් රසවත් දේවල් ඉතිරිව තිබේ නම්, එය අඩු මට්ටමකි. නමුත් ඉහළ මට්ටමකින් ආරම්භ කරන්නේ කෙසේද? ප්රමාණවත් තරම් ඉහළ මට්ටමේ වැඩ කර ඇති බව ඔබ දන්නේ කෙසේද? හොඳයි... කොහෙත්ම නැහැ. සූදානම් කළ වට්ටෝරු නොමැත. ඔබ ගැටලුව තේරුම් ගත යුතුය, ඔබ කුමක් කිරීමට යන්නේ දැයි තීරණය කළ යුතුය (ඉදිරියේදී අනවශ්‍ය පියවර නොගැනීම සඳහා) එවිට ඔබට ප්‍රයෝජනවත් දෙයක් පැවසිය හැකි පැතිකඩකරු අනාවරණය කර ගත හැකිය. යම් අවස්ථාවක දී, ඔබ අනවශ්‍ය දේවලින් මිදී ඇති බව ඔබටම වැටහෙන අතර පහත් මට්ටමේ සියුම් සුසර කිරීමක් කිරීමට කාලයයි. මෙය අනිවාර්යයෙන්ම විශේෂ කලාවකි. අනවශ්‍ය දේවල් කරන ගොඩක් අය ඉන්නවා, නමුත් ඵලදායිතාව ගැන කරදර වෙන්න වෙලාවක් නැති තරමට වේගයෙන් යනවා. නමුත් මෙය ප්‍රශ්නය කෙලින්ම මතු වන තුරු ය. සාමාන්‍යයෙන් 99% ක්ම මම කරන දේ කවුරුත් ගණන් ගන්නේ නැහැ, කවුරුත් ගණන් නොගන්නා තීරණාත්මක මාවතේ වැදගත් දෙයක් එන මොහොත දක්වා. තවද මෙහි දී සෑම කෙනෙකුම ඔබට වද හිංසා කිරීමට පටන් ගනී "එය ආරම්භයේ සිටම පරිපූර්ණව ක්‍රියා නොකළේ ඇයි?" සාමාන්යයෙන්, කාර්ය සාධනය වැඩිදියුණු කිරීමට සෑම විටම යමක් තිබේ. නමුත් 99% ක්ම ඔබට නායකත්වයක් නැත! ඔබ යමක් ක්‍රියාත්මක කිරීමට උත්සාහ කරන අතර එම ක්‍රියාවලියේදී ඔබ වැදගත් දේ සොයා ගනී. මෙම කෑල්ල පරිපූර්ණ විය යුතු බව ඔබට කිසි විටෙකත් කල්තියා දැනගත නොහැක, එබැවින්, ඇත්ත වශයෙන්ම, ඔබ සෑම දෙයකම පරිපූර්ණ විය යුතුය. නමුත් මෙය කළ නොහැකි අතර ඔබ එය නොකරන්න. සෑම විටම නිවැරදි කිරීමට බොහෝ දේ ඇත - එය සම්පූර්ණයෙන්ම සාමාන්ය දෙයක්.

විශාල ප්‍රතිනිර්මාණයක් කරන්නේ කෙසේද

ඇන්ඩෲ: ඔබ කාර්ය සාධනය මත වැඩ කරන්නේ කෙසේද? මෙය හරස් කැපීමේ ගැටලුවකි. උදාහරණයක් ලෙස, පවතින බොහෝ ක්‍රියාකාරීත්වයන් ඡේදනය වීමෙන් පැන නගින ගැටළු පිළිබඳව ඔබට කවදා හෝ වැඩ කිරීමට සිදු වී තිබේද?

ක්ලිෆ්ෆ්: මම එය වළක්වා ගැනීමට උත්සාහ කරමි. කාර්ය සාධනය ප්‍රශ්නයක් වනු ඇතැයි මම දන්නේ නම්, මම කේතනය කිරීම ආරම්භ කිරීමට පෙර ඒ ගැන සිතමි, විශේෂයෙන් දත්ත ව්‍යුහයන් සමඟ. නමුත් බොහෝ විට ඔබ මේ සියල්ල ඉතා පසුව සොයා ගනී. එවිට ඔබ ආන්තික පියවරයන් වෙත යා යුතු අතර මම "නැවත ලිවීම සහ ජයග්රහණය" ලෙස හඳුන්වන දේ කරන්න: ඔබ ප්රමාණවත් තරම් විශාල කෑල්ලක් අල්ලා ගත යුතුය. කාර්ය සාධන ගැටළු හෝ වෙනත් දෙයක් හේතුවෙන් සමහර කේතයන් තවමත් නැවත ලිවීමට සිදුවනු ඇත. කේතය නැවත ලිවීමට හේතුව කුමක් වුවත්, කුඩා කැබැල්ලකට වඩා විශාල කැබැල්ලක් නැවත ලිවීම සෑම විටම පාහේ වඩා හොඳය. මේ මොහොතේ, සෑම කෙනෙකුම බියෙන් වෙව්ලන්නට පටන් ගනී: "අනේ දෙවියනේ, ඔබට එතරම් කේතයක් ස්පර්ශ කළ නොහැක!" නමුත් ඇත්ත වශයෙන්ම, මෙම ප්රවේශය සෑම විටම පාහේ වඩා හොඳින් ක්රියා කරයි. ඔබ වහාම විශාල ගැටලුවක් භාර ගත යුතුය, එය වටා විශාල කවයක් අඳින්න සහ කියන්න: මම රවුම තුළ ඇති සියල්ල නැවත ලියන්නෙමි. මායිම ප්‍රතිස්ථාපනය කළ යුතු එහි ඇතුළත අන්තර්ගතයට වඩා ඉතා කුඩාය. එවැනි මායිම් නිරූපණය කිරීමෙන් ඔබට ඇතුළත වැඩ පරිපූර්ණ ලෙස කිරීමට ඉඩ සලසයි නම්, ඔබේ දෑත් නිදහස් ය, ඔබට අවශ්‍ය දේ කරන්න. ඔබ ගැටලුව තේරුම් ගත් පසු, නැවත ලිවීමේ ක්‍රියාවලිය වඩාත් පහසු වේ, එබැවින් විශාල බයිට් එකක් ගන්න!
ඒ අතරම, ඔබ විශාල නැවත ලිවීමක් සිදු කරන විට සහ කාර්ය සාධනය ගැටළුවක් වනු ඇති බව වටහා ගත් විට, ඔබට වහාම ඒ ගැන කරදර වීමට පටන් ගත හැකිය. මෙය සාමාන්‍යයෙන් "දත්ත පිටපත් නොකරන්න, හැකිතාක් සරලව දත්ත කළමනාකරණය කරන්න, කුඩා කරන්න" වැනි සරල දේවල් බවට හැරේ. විශාල නැවත ලිවීමේදී, කාර්ය සාධනය වැඩි දියුණු කිරීම සඳහා සම්මත ක්රම තිබේ. තවද ඒවා සෑම විටම පාහේ දත්ත වටා භ්‍රමණය වේ.

පිරිවැය ආකෘතිය

ඇන්ඩෲ: එක් පොඩ්කාස්ට් එකක ඔබ ඵලදායිතාවයේ සන්දර්භය තුළ පිරිවැය ආකෘති ගැන කතා කළා. ඔබ මෙයින් අදහස් කළේ කුමක්ද යන්න පැහැදිලි කළ හැකිද?

ක්ලිෆ්ෆ්: නිසැකවම. මම ඉපදුනේ ප්‍රොසෙසරයේ ක්‍රියාකාරිත්වය අතිශයින් වැදගත් වූ යුගයකයි. මෙම යුගය නැවත පැමිණේ - ඉරණම උත්ප්‍රාසයෙන් තොර නොවේ. මම බිට් අටක යන්ත්‍රවල ජීවත් වීමට පටන් ගත්තෙමි; මගේ පළමු පරිගණකය බයිට් 256 කින් ක්‍රියා කළේය. හරියටම බයිට්. සෑම දෙයක්ම ඉතා කුඩා විය. උපදෙස් ගණන් කළ යුතු අතර, අපි ක්‍රමලේඛන භාෂා තොගය ඉහළට ගෙන යාමට පටන් ගත් විට, භාෂා වැඩි වැඩියෙන් ලබා ගත්තේය. Assembler හිටියා, ඊට පස්සේ Basic, ඊට පස්සේ C, සහ C ගොඩක් විස්තර බලාගත්තා, රෙජිස්ටර් වෙන් කිරීම, උපදෙස් තේරීම වගේ. නමුත් එහි සෑම දෙයක්ම තරමක් පැහැදිලි වූ අතර, මම විචල්‍යයක අවස්ථාවක් වෙත යොමු කිරීමක් කළහොත්, මට බරක් ලැබෙනු ඇති අතර, මෙම උපදෙස් වල පිරිවැය දනී. දෘඩාංග නිශ්චිත යන්ත්‍ර චක්‍ර සංඛ්‍යාවක් නිපදවයි, එබැවින් ඔබ ක්‍රියාත්මක කිරීමට යන සියලුම උපදෙස් එකතු කිරීමෙන් විවිධ දේවල් ක්‍රියාත්මක කිරීමේ වේගය සරලව ගණනය කළ හැකිය. එක් එක් සංසන්දනය/පරීක්‍ෂණය/ශාඛාව/ඇමතුම/පූරණය/වෙළඳසැල එකතු කර මෙසේ පැවසිය හැකිය: එය ඔබට ක්‍රියාත්මක කිරීමේ කාලයයි. කාර්ය සාධනය වැඩි දියුණු කිරීම සඳහා වැඩ කරන විට, කුඩා උණුසුම් චක්රවලට අනුරූප වන සංඛ්යා මොනවාද යන්න පිළිබඳව ඔබ අනිවාර්යයෙන්ම අවධානය යොමු කරනු ඇත. 
නමුත් ඔබ ජාවා, පයිතන් සහ ඒ හා සමාන දේවල් වලට මාරු වූ වහාම, ඔබ ඉතා ඉක්මනින් පහත් මට්ටමේ දෘඩාංග වලින් ඉවත් වේ. Java හි ලබා ගන්නෙකු ඇමතීමට යන වියදම කොපමණද? HotSpot හි JIT නිවැරදි නම් පේළිගත, එය පූරණය වනු ඇත, නමුත් එය මෙය නොකළේ නම්, එය ක්රියාකාරී ඇමතුමක් වනු ඇත. ඇමතුම උණුසුම් ලූපයක ඇති බැවින්, එය එම ලූපයේ ඇති අනෙකුත් සියලුම ප්‍රශස්තකරණයන් අභිබවා යයි. එබැවින් සැබෑ පිරිවැය බෙහෙවින් වැඩි වනු ඇත. තවද ඔබට වහාම කේත කැබැල්ලක් දෙස බැලීමේ හැකියාව අහිමි වන අතර එය භාවිතා කරන ප්‍රොසෙසර ඔරලෝසුවේ වේගය, මතකය සහ හැඹිලිය අනුව එය ක්‍රියාත්මක කළ යුතු බව තේරුම් ගන්න. මේ සියල්ල සිත්ගන්නාසුළු වන්නේ ඔබ සැබවින්ම කාර්ය සාධනයට පිවිසෙන්නේ නම් පමණි.
දැන් අපි දශකයක් තිස්සේ ප්‍රොසෙසර වේගය කිසිසේත්ම වැඩි වී නැති තත්වයකට මුහුණ දී සිටිමු. පැරණි දින නැවත පැමිණ ඇත! ඔබට තවදුරටත් හොඳ තනි නූල් කාර්ය සාධනයක් මත ගණන් ගත නොහැක. නමුත් ඔබ හදිසියේම සමාන්තර පරිගණනයට පිවිසෙන්නේ නම්, එය ඇදහිය නොහැකි තරම් දුෂ්කර ය, හැමෝම ඔබ දෙස බලන්නේ ජේම්ස් බොන්ඩ් ලෙස ය. මෙහි දස ගුණයක ත්වරණය සාමාන්‍යයෙන් සිදුවන්නේ යමෙකු යමක් අවුල් කර ඇති ස්ථානවල ය. සමගාමීව වැඩ ගොඩක් අවශ්යයි. එම XNUMXx වේගය ලබා ගැනීමට, ඔබ පිරිවැය ආකෘතිය තේරුම් ගත යුතුය. එය කොපමණ සහ කොපමණ මුදලක් වැය වේද? මෙය සිදු කිරීම සඳහා, දිව යටින් පවතින දෘඩාංගයට ගැලපෙන ආකාරය ඔබ තේරුම් ගත යුතුය.
මාර්ටින් තොම්සන් ඔහුගේ බ්ලොග් අඩවිය සඳහා විශිෂ්ට වචනයක් තෝරා ගත්තේය යාන්ත්රික අනුකම්පාව! දෘඪාංගය කුමක් කිරීමට යන්නේද, එය හරියටම කරන්නේ කෙසේද සහ එය මුලින්ම කරන්නේ ඇයිද යන්න ඔබ තේරුම් ගත යුතුය. මෙය භාවිතා කිරීමෙන්, උපදෙස් ගණන් කිරීම ආරම්භ කිරීම සහ ක්රියාත්මක කිරීමේ වේලාව කොතැනට යන්නේදැයි සොයා බැලීම තරමක් පහසුය. ඔබට සුදුසු පුහුණුවක් නොමැති නම්, ඔබ අඳුරු කාමරයක කළු බළලෙකු සොයයි. මම දකිනවා තමන් කරන මගුල මොකක්ද කියලා කිසිම අදහසක් නැති අය හැම වෙලාවෙම කාර්ය සාධනය ප්‍රශස්ත කරනවා. ඔවුන් බොහෝ දුක් විඳින අතර වැඩි දියුණුවක් නොලැබේ. මම එකම කේතයක් ගත් විට, කුඩා හැක් කිහිපයක් ලිස්සා ගොස් පස් ගුණයකින් හෝ දස ගුණයකින් වේගයක් ලබා ගන්නා විට, ඒවා මෙවන් ය: හොඳයි, එය සාධාරණ නැත, ඔබ වඩා හොඳ බව අපි දැනටමත් දැන සිටියෙමු. අරුම පුදුම. මම කතා කරන්නේ කුමක් ගැනද ... පිරිවැය ආකෘතිය යනු ඔබ ලියන්නේ කුමන ආකාරයේ කේතයක් සහ විශාල පින්තූරයේ සාමාන්‍යයෙන් එය කෙතරම් වේගයෙන් ධාවනය වේද යන්නයි.

ඇන්ඩෲ: සහ ඔබේ හිසෙහි එවැනි පරිමාවක් තබා ගත හැක්කේ කෙසේද? මෙය සාක්ෂාත් කරගනු ලබන්නේ වැඩි පළපුරුද්දකින්ද, නැතහොත්? එවැනි අත්දැකීමක් පැමිණෙන්නේ කොහෙන්ද?

ක්ලිෆ්ෆ්: හොඳයි, මම මගේ අත්දැකීම් පහසුම ආකාරයෙන් ලබා ගත්තේ නැත. ඔබට සෑම උපදෙසක්ම තේරුම් ගත හැකි දිනවල මම එකලස් කිරීමේදී වැඩසටහන්ගත කළෙමි. එය මෝඩ බවක් පෙනේ, නමුත් එතැන් සිට Z80 උපදෙස් කට්ටලය සැමවිටම මගේ හිසෙහි, මගේ මතකයේ පවතී. කතා කර විනාඩියක් ඇතුළත මිනිසුන්ගේ නම් මතක නැත, නමුත් වසර 40 කට පෙර ලියූ කේතය මට මතකයි. එය විහිළුවක්, එය සින්ඩ්‍රෝමය මෙන් පෙනේ "මෝඩ විද්යාඥයා".

පහත් මට්ටමේ ප්‍රශස්තිකරණ පුහුණුව

ඇන්ඩෲ: ඇතුල් වීමට පහසු මාර්ගයක් තිබේද?

ක්ලිෆ්ෆ්: ඔව් සහ නැහැ. අපි හැමෝම භාවිතා කරන දෘඩාංග කාලයත් සමඟම වෙනස් වී නැත. Arm ස්මාර්ට්ෆෝන් හැර සෑම කෙනෙකුම x86 භාවිතා කරයි. ඔබ යම් ආකාරයක Hardcore embedding කරන්නේ නැතිනම්, ඔබ කරන්නේ එකම දෙයයි. හරි, ඉදිරියට යන්න. උපදෙස් ද සියවස් ගණනාවක් තිස්සේ වෙනස් වී නැත. ගිහින් Assemble එකේ මොනවා හරි ලියන්න ඕනේ. බොහෝ නොවේ, නමුත් තේරුම් ගැනීමට පටන් ගැනීමට ප්රමාණවත්ය. ඔබ සිනාසෙයි, නමුත් මම සම්පූර්ණයෙන්ම බැරෑරුම් ලෙස කතා කරමි. ඔබ භාෂාව සහ දෘඪාංග අතර ලිපි හුවමාරුව තේරුම් ගත යුතුය. ඊට පස්සේ පොඩ්ඩක් ලියන්න ගිහින් පොඩි ටොයි ලැන්වේජ් එකකට පොඩි ටොයි කම්පයිලර් එකක් හදන්න ඕන. සෙල්ලම් බඩු වගේ කියන්නේ සාධාරණ කාලයකින් හදන්න ඕන. එය ඉතා සරල විය හැකි නමුත් එය උපදෙස් ජනනය කළ යුතුය. උපදෙසක් උත්පාදනය කිරීමේ ක්‍රියාව, සෑම කෙනෙකුම ලියන ඉහළ මට්ටමේ කේතය සහ දෘඪාංග මත ක්‍රියාත්මක වන යන්ත්‍ර කේතය අතර පාලම සඳහා වන පිරිවැය ආකෘතිය තේරුම් ගැනීමට උපකාරී වේ. සම්පාදකය ලියන අවස්ථාවේදී මෙම ලිපි හුවමාරුව මොළයට පුළුස්සා දමනු ඇත. සරලම සම්පාදකය පවා. ඊට පසු, ඔබට ජාවා දෙස බැලීමට පටන් ගත හැකි අතර එහි අර්ථකථන අගාධය වඩා ගැඹුරු වන අතර එය මත පාලම් තැනීම වඩා දුෂ්කර ය. ජාවා වලදී, අපගේ පාලම හොඳද නරකද, එය කඩා වැටීමට හේතුව කුමක්ද සහ නොවන්නේ කුමක්ද යන්න තේරුම් ගැනීම වඩා දුෂ්කර ය. නමුත් ඔබට යම් ආකාරයක ආරම්භක ලක්ෂ්‍යයක් අවශ්‍ය වන අතර එහිදී ඔබ කේතය දෙස බලා තේරුම් ගත යුතුය: "ඔව්, මෙම ලබන්නා සෑම විටම පේළිගත විය යුතුය." ක්‍රමය ඉතා විශාල වන අවස්ථාව හැරුණු විට සමහර විට මෙය සිදු වන බව පෙනේ, සහ JIT සෑම දෙයක්ම ඇතුළත් කිරීමට පටන් ගනී. එවැනි ස්ථානවල කාර්ය සාධනය ක්ෂණිකව පුරෝකථනය කළ හැකිය. සාමාන්‍යයෙන් ලබා ගන්නන් හොඳින් ක්‍රියා කරයි, නමුත් පසුව ඔබ විශාල උණුසුම් ලූප දෙස බලා ඔවුන් කරන්නේ කුමක්දැයි නොදන්නා ක්‍රියාකාරී ඇමතුම් කිහිපයක් එහි පාවෙන බව වටහා ගනී. ලබා ගන්නන් බහුලව භාවිතා කිරීමේ ගැටලුව මෙයයි, ඔවුන් ඉන්ලයින් නොවීමට හේතුව ඔවුන් ලබා ගන්නෙකු දැයි පැහැදිලි නැති වීමයි. ඔබට සුපිරි කුඩා කේත පදනමක් තිබේ නම්, ඔබට එය සරලව මතක තබා ගත හැකිය: මෙය ලබා ගන්නෙකු වන අතර මෙය සකසන්නෙකු වේ. විශාල කේත පදනමක් තුළ, සෑම ශ්‍රිතයක්ම තමන්ගේම ඉතිහාසයක් ගත කරයි, එය සාමාන්‍යයෙන් කිසිවෙකු නොදනී. ප්‍රොෆයිලර් කියනව සමහර ලූප් එකකින් අපිට 24%ක් නැති වෙලා මේ ලූප් කරන දේ තේරුම් ගන්න අපි ඇතුලේ එක එක ෆන්ක්ෂන් ටික බලන්න ඕන. ශ්‍රිතය අධ්‍යයනය නොකර මෙය තේරුම් ගත නොහැකි අතර, මෙය තේරුම් ගැනීමේ ක්‍රියාවලිය බරපතල ලෙස මන්දගාමී කරයි. ඒකයි මම getters සහ setters පාවිච්චි කරන්නේ නැහැ, මම අලුත් මට්ටමකට ඇවිත් තියෙනවා!
පිරිවැය ආකෘතිය ලබා ගන්නේ කොහෙන්ද? හොඳයි, ඔබට යමක් කියවිය හැකිය, ඇත්තෙන්ම ... නමුත් මම හිතන්නේ හොඳම ක්‍රමය ක්‍රියා කිරීමයි. කුඩා සම්පාදකයක් සෑදීම පිරිවැය ආකෘතිය තේරුම් ගැනීමට සහ ඔබේම හිසට ගැලපෙන හොඳම ක්රමය වනු ඇත. මයික්‍රෝවේව් උදුනක් ක්‍රමලේඛනය කිරීමට සුදුසු කුඩා සම්පාදකයක් ආරම්භකයකු සඳහා කාර්යයකි. හොඳයි, මම කියන්නේ, ඔබට දැනටමත් වැඩසටහන්කරණ කුසලතා තිබේ නම්, එය ප්රමාණවත් විය යුතුය. යම් ආකාරයක වීජීය ප්‍රකාශනයක් ලෙස ඔබ සතුව ඇති තන්තුවක් විග්‍රහ කිරීම, එතැන් සිට ගණිතමය මෙහෙයුම් සඳහා උපදෙස් නිවැරදි පිළිවෙලට උපුටා ගැනීම, රෙජිස්ටර් වලින් නිවැරදි අගයන් ගැනීම වැනි මේ සියල්ල එකවර සිදු කෙරේ. ඔබ එය කරන විට, එය ඔබේ මොළයේ තැන්පත් වනු ඇත. මම හිතන්නේ compiler එකකින් කරන දේ හැමෝම දන්නවා ඇති. තවද මෙය පිරිවැය ආකෘතිය පිළිබඳ අවබෝධයක් ලබා දෙනු ඇත.

කාර්ය සාධනය වැඩි දියුණු කිරීම සඳහා ප්රායෝගික උදාහරණ

ඇන්ඩෲ: ඵලදායිතාව මත වැඩ කිරීමේදී ඔබ අවධානය යොමු කළ යුතු තවත් මොනවාද?

ක්ලිෆ්ෆ්: දත්ත ව්යුහයන්. මාර්ගය වන විට, ඔව්, මම මෙම පන්ති දිගු කලක් ඉගැන්වූයේ නැත ... රොකට් පාසල. එය විනෝදජනක විය, නමුත් එයට විශාල උත්සාහයක් අවශ්‍ය විය, මටත් ජීවිතයක් තිබේ! හරි. එබැවින්, විශාල හා සිත්ගන්නාසුලු පන්ති වලින් එකක, "ඔබේ කාර්ය සාධනය කොහෙද යන්නේ", මම සිසුන්ට උදාහරණයක් දුන්නා: ෆින්ටෙක් දත්ත ගිගාබයිට් දෙකහමාරක් CSV ගොනුවකින් කියවන ලද අතර පසුව ඔවුන් අලෙවි කරන නිෂ්පාදන ගණන ගණනය කිරීමට සිදු විය. . නිතිපතා ටික් වෙළඳපල දත්ත. 70 ගණන්වල සිට UDP පැකට් පෙළ ආකෘතියට පරිවර්තනය කර ඇත. Chicago Mercantile Exchange - බටර්, බඩ ඉරිඟු, සෝයා බෝංචි, ඒ වගේ දේවල්. මෙම නිෂ්පාදන, ගනුදෙනු ගණන, අරමුදල් සහ භාණ්ඩවල චලනයේ සාමාන්ය පරිමාව ආදිය ගණනය කිරීම අවශ්ය විය. එය ඉතා සරල වෙළඳ ගණිතයකි: නිෂ්පාදන කේතය සොයා ගන්න (එය හැෂ් වගුවේ අක්ෂර 1-2), මුදල ලබා ගන්න, එය වෙළඳ කට්ටලවලින් එකකට එකතු කරන්න, පරිමාව එකතු කරන්න, අගය එකතු කරන්න, සහ තවත් දේවල් කිහිපයක්. ඉතා සරල ගණිතය. සෙල්ලම් බඩු ක්‍රියාත්මක කිරීම ඉතා සරල විය: සෑම දෙයක්ම ගොනුවක ඇත, මම ගොනුව කියවා එය හරහා ගමන් කරමි, තනි වාර්තා ජාවා නූල් වලට බෙදා, ඒවායේ අවශ්‍ය දේවල් සොයමින් සහ ඉහත විස්තර කර ඇති ගණිතයට අනුව ඒවා එකතු කරමි. ඒ වගේම එය අඩු වේගයකින් ක්‍රියා කරයි.

මෙම ප්‍රවේශය සමඟ, සිදුවන්නේ කුමක්ද යන්න පැහැදිලිය, සමාන්තර පරිගණනය උදව් නොවනු ඇත, හරිද? නිවැරදි දත්ත ව්‍යුහයන් තෝරා ගැනීමෙන් කාර්ය සාධනයේ පස් ගුණයක වැඩිවීමක් ලබා ගත හැකි බව පෙනී යයි. මෙය පළපුරුදු ක්‍රමලේඛකයින් පවා පුදුමයට පත් කරයි! මගේ විශේෂිත අවස්ථාවෙහිදී, උපක්‍රමය වූයේ ඔබ උණුසුම් ලූපයක් තුළ මතක වෙන් කිරීම් සිදු නොකළ යුතු බවයි. හොඳයි, මෙය සම්පූර්ණ සත්‍යය නොවේ, නමුත් පොදුවේ - X ප්‍රමාණවත් තරම් විශාල වන විට ඔබ “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 වේ, එබැවින් මෙම දෙයෙහි පිටපතක් සෑදීම ඉතා නුසුදුසු ය - ඔබට එය වහාම ජාල බයිට් බෆරයෙන් පූරණය කිරීමට අවශ්‍ය වේ. පේළියට පස් වතාවක් එහාට මෙහාට කියවීමට-ලිවීම නොකිරීමට, ලේඛන තුළට. අවාසනාවකට, Java ඔබට පෙරනිමියෙන් JDK හි කොටසක් ලෙස එවැනි පුස්තකාලයක් ලබා නොදේ. නමුත් මේක සුළු දෙයක් නේද? අත්‍යවශ්‍යයෙන්ම, මේවා 5-10 කේත රේඛා වන අතර ඒවා ඔබගේම ස්වාරක්ෂක තන්තු පූරණය ක්‍රියාත්මක කිරීමට භාවිතා කරනු ඇත, එය තන්තු පන්තියේ හැසිරීම පුනරුච්චාරණය කරයි, යටින් පවතින බයිට් බෆරය වටා එතීමකි. එහි ප්‍රතිඵලයක් වශයෙන්, ඔබ තන්තු සමඟ මෙන් ක්‍රියා කරන බව පෙනේ, නමුත් ඇත්ත වශයෙන්ම බෆරයට පොයින්ටර් එහි ගමන් කරන අතර, අමු බයිට් කොතැනකවත් පිටපත් නොකෙරේ, එබැවින් එකම බෆර නැවත නැවතත් භාවිතා වේ, සහ මෙම බයිට් බෆරවල සැඟවුණු ද්විත්ව බෆරය වැනි, එය නිර්මාණය කර ඇති දේවල් ඔබම භාර ගැනීමට මෙහෙයුම් පද්ධතිය සතුටු වන අතර, ඔබ තවදුරටත් අනවශ්‍ය දත්ත ප්‍රවාහයක් හරහා ඇඹරෙන්නේ නැත. මාර්ගය වන විට, GC සමඟ වැඩ කරන විට, අවසාන GC චක්‍රයෙන් පසු එක් එක් මතක වෙන් කිරීම් ප්‍රොසෙසරයට නොපෙනෙන බවට සහතික වන බව ඔබට වැටහෙනවාද? එමනිසා, මේ සියල්ල හැඹිලියේ තිබිය නොහැක, එවිට 100% සහතික කළ මග හැරීමක් සිදු වේ. පොයින්ටරයක් ​​සමඟ වැඩ කරන විට, x86 මත, මතකයෙන් ලේඛනයක් අඩු කිරීම සඳහා ඔරලෝසු චක්‍ර 1-2 ක් ගත වන අතර, මෙය සිදු වූ වහාම, ඔබ ගෙවන්න, ගෙවන්න, ගෙවන්න, මන්ද මතකය ක්‍රියාත්මකයි. හැඹිලි නවයක් - සහ මෙය මතකය වෙන් කිරීමේ පිරිවැයයි. සැබෑ වටිනාකම.

වෙනත් වචන වලින් කිවහොත්, දත්ත ව්‍යුහයන් වෙනස් කිරීමට අපහසුම දෙයයි. ඔබ පසුකාලීනව කාර්ය සාධනය විනාශ කරන වැරදි දත්ත ව්‍යුහයක් තෝරාගෙන ඇති බව ඔබට වැටහුණු පසු, සාමාන්‍යයෙන් කිරීමට බොහෝ වැඩ ඇත, නමුත් ඔබ එසේ නොකළහොත්, දේවල් වඩාත් නරක අතට හැරෙනු ඇත. මුලින්ම, ඔබ දත්ත ව්යුහයන් ගැන සිතා බැලිය යුතුය, මෙය වැදගත් වේ. මෙහි ප්‍රධාන පිරිවැය වැටෙන්නේ මේද දත්ත ව්‍යුහයන් මත වන අතර ඒවා "මම Y හි හැඩයට වඩා කැමති නිසා මම දත්ත ව්‍යුහය X දත්ත ව්‍යුහය Y වෙත පිටපත් කළෙමි" යන විලාසයෙන් භාවිතා කිරීමට පටන් ගෙන ඇත. නමුත් පිටපත් කිරීමේ මෙහෙයුම (ලාභ බව පෙනේ) ඇත්ත වශයෙන්ම මතක කලාප පළල නාස්ති කරන අතර අපතේ යන සියලුම ක්‍රියාත්මක කිරීමේ කාලය වළලනු ලැබේ. මා සතුව යෝධ JSON තන්තුවක් තිබේ නම් සහ මට එය POJO වල ව්‍යුහගත DOM ගසක් බවට පත් කිරීමට අවශ්‍ය නම්, එම තන්තුව විග්‍රහ කර POJO ගොඩනැගීමේ ක්‍රියාකාරිත්වය සහ පසුව නැවත POJO වෙත ප්‍රවේශ වීම අනවශ්‍ය පිරිවැයක් ඇති කරයි - එය ලාභ නොවේ. ඔබ නූලක් වටා දුවනවාට වඩා බොහෝ විට POJOs වටා දුවන්නේ නම් හැර. Offhand, ඒ වෙනුවට ඔබට තන්තුව විකේතනය කිරීමට උත්සාහ කළ හැකි අතර එය කිසිදු POJO එකක් බවට පත් නොකර ඔබට අවශ්‍ය දේ පමණක් එතැනින් උපුටා ගන්න. මේ සියල්ල සිදුවන්නේ උපරිම කාර්ය සාධනයක් අවශ්‍ය වන මාර්ගයක නම්, ඔබ සඳහා POJOs නැත, ඔබ කෙසේ හෝ කෙලින්ම රේඛාව හාරා ගත යුතුය.

ඔබේම ක්‍රමලේඛන භාෂාවක් නිර්මාණය කරන්නේ ඇයි?

ඇන්ඩෲ: ඔබ කිව්වා පිරිවැය ආකෘතිය තේරුම් ගැනීමට, ඔබ ඔබේම කුඩා භාෂාවක් ලිවිය යුතු බව ...

ක්ලිෆ්ෆ්: භාෂාවක් නොව, සම්පාදකයකි. භාෂාවක් සහ සම්පාදකයක් යනු වෙනස් කරුණු දෙකකි. වැදගත්ම වෙනස ඔබේ හිසෙහි ය. 

ඇන්ඩෲ: මාර්ගය වන විට, මා දන්නා පරිදි, ඔබ ඔබේම භාෂාවක් නිර්මාණය කිරීමට අත්හදා බලයි. කුමක් සඳහා ද?

ක්ලිෆ්ෆ්: මට පුළුවන් නිසා! මම අර්ධ විශ්‍රාමිකයි, එබැවින් මෙය මගේ විනෝදාංශයයි. මම මගේ ජීවිත කාලය පුරාම අන් අයගේ භාෂා ක්‍රියාත්මක කරමින් සිටිමි. මම මගේ කේතීකරණ ශෛලියටත් ගොඩක් වැඩ කළා. ඒ වගේම මම වෙනත් භාෂාවලින් ගැටලු දකින නිසා. හුරුපුරුදු දේවල් කිරීමට වඩා හොඳ ක්‍රම ඇති බව මම දකිමි. ඒ වගේම මම ඒවා භාවිතා කරන්නම්. ජාවා වල, පයිතන් වල, වෙනත් ඕනෑම භාෂාවක ගැටළු මා තුළ දැකීමෙන් මට එපා වී ඇත. මම දැන් React Native, JavaScript සහ Elm හි ලියන්නේ විශ්‍රාම ගැනීම ගැන නොව ක්‍රියාකාරී වැඩ ගැන විනෝදාංශයක් ලෙස ය. මම Python හි ද ලියන අතර, බොහෝ දුරට, Java backends සඳහා යන්ත්‍ර ඉගෙනීමේ කටයුතු දිගටම කරගෙන යනු ඇත. බොහෝ ජනප්‍රිය භාෂා ඇති අතර ඒවා සියල්ලම සිත්ගන්නාසුලු ලක්ෂණ ඇත. සෑම කෙනෙකුම තමන්ගේම ආකාරයෙන් හොඳ වන අතර ඔබට මෙම සියලු විශේෂාංග එකට ගෙන ඒමට උත්සාහ කළ හැකිය. ඉතින්, මම මට උනන්දුවක් දක්වන දේවල්, භාෂාවේ හැසිරීම, සාධාරණ අර්ථකථන ඉදිරිපත් කිරීමට උත්සාහ කරමි. සහ මෙතෙක් මම සාර්ථකයි! මේ මොහොතේ මම මතක අර්ථ ශාස්ත්‍රය සමඟ පොරබදමින් සිටිමි, මන්ද මට එය C සහ ජාවා වල මෙන් තිබීමට අවශ්‍ය වන අතර බර සහ ගබඩා සඳහා ශක්තිමත් මතක ආකෘතියක් සහ මතක අර්ථකථනයක් ලබා ගැනීමට අවශ්‍යය. ඒ සමගම, Haskell හි මෙන් ස්වයංක්‍රීය ආකාරයේ අනුමානයක් ඇත. මෙන්න, මම C සහ Java දෙකෙහිම මතක ක්‍රියාකාරිත්වය සමඟ Haskell-like ආකාරයේ අනුමානය මිශ්‍ර කිරීමට උත්සාහ කරමි. උදාහරණයක් ලෙස පසුගිය මාස 2-3 තුළ මම කරන්නේ මෙයයි.

ඇන්ඩෲ: ඔබ වෙනත් භාෂාවලින් වඩා හොඳ පැති ගන්නා භාෂාවක් ගොඩනඟන්නේ නම්, යමෙකු ඊට ප්‍රතිවිරුද්ධ දේ කරනු ඇතැයි ඔබ සිතනවාද: ඔබේ අදහස් ගෙන ඒවා භාවිතා කරන්න?

ක්ලිෆ්ෆ්: නව භාෂා දිස්වන ආකාරය මෙයයි! ජාවා C වලට සමාන වන්නේ ඇයි? මොකද C ට හැමෝටම තේරෙන හොද syntax එකක් තිබුනා වගේම Java මේ syntax එකෙන් ආභාෂය ලබලා Type security, array bounds checking, GC එකතු කරලා C එකෙන් සමහර දේවල් වැඩි දියුණු කරලා එයාලගේ ඒවා එකතු කරගත්තා. නමුත් ඔවුන් බොහෝ ආභාෂය ලැබුවා, හරිද? සෑම කෙනෙකුම ඔබට පෙර පැමිණි යෝධයින්ගේ උරහිස් මත නැගී සිටියි - දියුණුව ඇති වන්නේ එලෙස ය.

ඇන්ඩෲ: මම තේරුම් ගත් පරිදි, ඔබේ භාෂාව මතක සුරක්ෂිත වනු ඇත. රස්ට් වෙතින් ණය පරීක්‍ෂකයක් වැනි දෙයක් ක්‍රියාත්මක කිරීම ගැන ඔබ සිතුවාද? ඔබ ඔහු දෙස බැලුවද, ඔබ ඔහු ගැන සිතන්නේ කුමක්ද?

ක්ලිෆ්ෆ්: හොඳයි, මම මේ සියලු malloc සහ නොමිලේ, සහ අතින් ජීවිත කාලය කළමනාකරණය කරමින්, වසර ගණනාවක් තිස්සේ C ලියමින් සිටිමි. ඔබ දන්නවා, අතින් පාලනය වන ජීවිත කාලයෙන් 90-95% එකම ව්යුහයක් ඇත. ඒ වගේම අතින් කරන එක හරිම වේදනාකාරීයි. සම්පාදකයා ඔබට එහි සිදුවන්නේ කුමක්ද සහ ඔබේ ක්‍රියාවෙන් ඔබ අත්කර ගත් දේ සරලව පැවසීමට මම කැමතියි. සමහර දේවල් සඳහා, ණය පරීක්ෂක මෙය කොටුවෙන් පිටත කරයි. එය ස්වයංක්‍රීයව තොරතුරු පෙන්විය යුතුය, සියල්ල තේරුම් ගත යුතුය, සහ මෙම අවබෝධය ඉදිරිපත් කිරීමට මට බරක් නොවිය යුතුය. එය අවම වශයෙන් දේශීය ගැලවීමේ විශ්ලේෂණයක් කළ යුතු අතර, එය අසාර්ථක වුවහොත් පමණක්, ජීවිත කාලය විස්තර කරන ආකාරයේ විවරණ එක් කිරීමට අවශ්‍ය වේ - සහ එවැනි යෝජනා ක්‍රමයක් ණය පරීක්ෂකයෙකුට හෝ ඇත්ත වශයෙන්ම පවතින ඕනෑම මතක පරීක්ෂකයකට වඩා සංකීර්ණ වේ. "සියල්ල හොඳින්" සහ "මට කිසිවක් තේරෙන්නේ නැත" අතර තේරීම - නැත, වඩා හොඳ දෙයක් තිබිය යුතුය. 
ඉතින් C වලින් ගොඩක් code ලියපු කෙනෙක් විදියට මම හිතන්නේ automatic lifetime control වලට support එක තියෙන එක තමයි වැදගත්ම දේ කියලා. ජාවා මතකය කොපමණ ප්‍රමාණයක් භාවිතා කරනවාද යන්න මටත් එපා වී ඇති අතර ප්‍රධාන පැමිණිල්ල වන්නේ GC ය. ඔබ Java හි මතකය වෙන් කරන විට, ඔබට පසුගිය GC චක්‍රයේ දේශීයව තිබූ මතකය ඔබට නැවත නොලැබේ. වඩාත් නිවැරදි මතක කළමනාකරණයක් ඇති භාෂා වල මෙය එසේ නොවේ. ඔබ malloc ඇමතුවහොත්, ඔබ සාමාන්‍යයෙන් භාවිතා කළ මතකය වහාම ලබා ගනී. සාමාන්‍යයෙන් ඔබ මතකය සමඟ යම් තාවකාලික දේවල් සිදු කර වහාම එය ආපසු ලබා දෙන්න. එය වහාම malloc සංචිතය වෙත ආපසු පැමිණෙන අතර, ඊළඟ malloc චක්රය එය නැවත පිටතට ඇද දමයි. එබැවින්, සැබෑ මතක භාවිතය යම් අවස්ථාවක දී ජීවමාන වස්තු කුලකයට අඩු වන අතර කාන්දුවීම් ද සිදු වේ. තවද සෑම දෙයක්ම සම්පූර්ණයෙන්ම අශෝභන ආකාරයෙන් කාන්දු නොවන්නේ නම්, බොහෝ මතකය හැඹිලි සහ ප්රොසෙසරය තුළ අවසන් වන අතර එය ඉක්මනින් ක්රියා කරයි. නමුත් malloc සමඟ අත්පොත මතක කළමනාකරණය ගොඩක් අවශ්‍ය වන අතර නියම පිළිවෙළට, නියම ස්ථානයේ නොමිලේ කැඳවනු ලැබේ. මලකඩ හට මෙය නිවැරදිව හැසිරවිය හැකි අතර, බොහෝ අවස්ථාවලදී ඊටත් වඩා හොඳ කාර්ය සාධනයක් ලබා දෙයි, මන්ද මතක පරිභෝජනය වත්මන් ගණනය කිරීම් වලට පමණක් සීමා වී ඇත - මීළඟ GC චක්‍රය මතකය නිදහස් වන තෙක් බලා සිටීමට ප්‍රතිවිරුද්ධව. එහි ප්රතිඵලයක් වශයෙන්, කාර්ය සාධනය වැඩිදියුණු කිරීම සඳහා ඉතා රසවත් ක්රමයක් අපට ලැබුණි. සහ තරමක් බලවත් - මම අදහස් කළේ, ෆින්ටෙක් සඳහා දත්ත සැකසීමේදී මම එවැනි දේවල් කළ අතර, මෙය මට පස් ගුණයක වේගයක් ලබා ගැනීමට ඉඩ සලසයි. එය ඉතා විශාල තල්ලුවක්, විශේෂයෙන් ප්‍රොසෙසර වේගවත් නොවන සහ අපි තවමත් වැඩිදියුණු කිරීම් සඳහා බලා සිටින ලෝකයක.

කාර්ය සාධන ඉංජිනේරු වෘත්තිය

ඇන්ඩෲ: මම සාමාන්‍ය වෘත්තීන් ගැනත් අහන්න කැමතියි. ඔබ HotSpot හි ඔබේ JIT කාර්යය සමඟ ප්‍රසිද්ධියට පත් වූ අතර පසුව JVM සමාගමක් වන Azul වෙත මාරු විය. නමුත් අපි දැනටමත් මෘදුකාංග වලට වඩා දෘඪාංග මත වැඩ කරමින් සිටියෙමු. ඉන්පසු ඔවුන් හදිසියේම Big Data සහ Machine Learning වෙත මාරු වූ අතර පසුව වංචා හඳුනාගැනීම් වෙත මාරු විය. මෙය සිදුවූයේ කෙසේ? මේවා ඉතා වෙනස් සංවර්ධන ක්ෂේත්‍ර වේ.

ක්ලිෆ්ෆ්: මම සෑහෙන කාලයක් තිස්සේ වැඩසටහන්කරණයේ යෙදී සිටි අතර විවිධ පන්ති රාශියක් ගැනීමට සමත් වී ඇත. “අනේ, ඔයා තමයි ජාවා සඳහා JIT කළේ!” යැයි මිනිසුන් පවසන විට, එය සැමවිටම විහිළුවකි. නමුත් ඊට පෙර, මම Apple විසින් එහි ලේසර් මුද්‍රණ යන්ත්‍ර සඳහා වරක් භාවිතා කළ PostScript හි ක්ලෝනයක් මත වැඩ කරමින් සිටියෙමි. ඊට කලින් මම Forth language එක ක්‍රියාත්මක කිරීමක් කළා. මම හිතන්නේ මට පොදු තේමාව මෙවලම් සංවර්ධනයයි. මගේ ජීවිත කාලය පුරාම මම වෙනත් පුද්ගලයින් ඔවුන්ගේ සිසිල් වැඩසටහන් ලියන මෙවලම් සාදා ඇත. නමුත් මම මෙහෙයුම් පද්ධති, ධාවක, කර්නල් මට්ටමේ නිදොස්කරණයන්, මෙහෙයුම් පද්ධතිය සංවර්ධනය සඳහා භාෂා සංවර්ධනය කිරීම සඳහා ද සම්බන්ධ වී සිටි අතර එය සුළු වශයෙන් ආරම්භ වූ නමුත් කාලයත් සමඟ වඩ වඩාත් සංකීර්ණ විය. නමුත් ප්රධාන මාතෘකාව තවමත් මෙවලම් සංවර්ධනයයි. මගේ ජීවිතයේ විශාල කොටසක් අසුල් සහ සන් අතර ගත වූ අතර එය ජාවා ගැන විය. නමුත් මම Big Data සහ Machine Learning වෙත පිවිසි විට, මම මගේ විසිතුරු තොප්පිය නැවත දමා, “අනේ, දැන් අපට සුළු නොවන ප්‍රශ්නයක් තිබේ, සහ සිත්ගන්නාසුලු දේවල් රාශියක් සිදුවෙමින් පවතින අතර මිනිසුන් දේවල් කරමින් සිටී.” මෙය යා යුතු විශාල සංවර්ධන මාවතකි.

ඔව්, මම ඇත්තටම බෙදා හරින ලද පරිගණනයට කැමතියි. මගේ පළමු රැකියාව වූයේ C හි ශිෂ්‍යයෙකු ලෙස වෙළඳ ප්‍රචාරණ ව්‍යාපෘතියක ය. මෙය සැබෑ ඇනලොග් විශ්ලේෂකයක් මගින් නිෂ්පාදනය කරන ලද ඇනලොග් OCR සඳහා දත්ත රැස් කරන Zilog Z80 චිප් මත පරිගණක බෙදා හරින ලදී. එය සිසිල් සහ සම්පූර්ණයෙන්ම පිස්සු මාතෘකාවක් විය. නමුත් ගැටළු ඇති විය, සමහර කොටසක් නිවැරදිව හඳුනාගෙන නැත, එබැවින් ඔබට පින්තූරයක් ගෙන එය දැනටමත් ඇස්වලින් කියවා එය කියන දේ වාර්තා කළ හැකි පුද්ගලයෙකුට පෙන්විය යුතු විය, එබැවින් දත්ත සහිත රැකියා සහ මෙම රැකියා තිබුණි. ඔවුන්ගේම භාෂාවක් තිබුණා. මේ සියල්ල සැකසූ පසුපෙළක් තිබුණි - Z80s ධාවනය වන vt100 පර්යන්ත සමඟ සමාන්තරව ධාවනය වේ - එක් පුද්ගලයෙකුට එකක්, සහ Z80 හි සමාන්තර ක්‍රමලේඛන ආකෘතියක් තිබුණි. තරු වින්‍යාසයක් තුළ සියලුම Z80s විසින් බෙදාගත් සමහර පොදු මතක කොටස්; පසුතලය ද බෙදා ගත් අතර, RAM වලින් අඩක් ජාලය තුළ බෙදා ගන්නා ලදී, තවත් අඩක් පුද්ගලික හෝ වෙනත් දෙයකට ගියේය. හවුල්... අර්ධ-බෙදාගත් මතකය සහිත අර්ථාන්විත සංකීර්ණ සමාන්තර බෙදාහැරීමේ පද්ධතියක්. මේක කවදාද... මට මතකත් නැහැ, 80 දශකයේ මැද භාගයේ කොහේ හරි. සෑහෙන කාලෙකට කලින්. 
ඔව්, අපි හිතමු අවුරුදු 30ක් කියන්නේ සෑහෙන කාලෙකට කලින් කියලා.බෙදාහැරුණු පරිගණනය සම්බන්ධ ගැටලු සෑහෙන කාලයක් තිස්සෙ තියෙනවා; මිනිස්සු දිගු කලක් තිස්සේ යුද්ධ කළා. Beowulf නම්- පොකුරු. එවැනි පොකුරු පෙනෙන්නේ... උදාහරණයක් ලෙස: ඊතර්නෙට් ඇති අතර ඔබේ වේගවත් x86 මෙම ඊතර්නෙට් සමඟ සම්බන්ධ වී ඇති අතර, දැන් ඔබට ව්‍යාජ හවුල් මතකයක් ලබා ගැනීමට අවශ්‍ය වේ, එවිට කිසිවෙකුට බෙදා හරින ලද පරිගණක කේතීකරණය කළ නොහැකි වූ නිසා, එය ඉතා අපහසු විය, එබැවින් එහි x86 හි ආරක්‍ෂිත මතක පිටු සමඟ ව්‍යාජ බෙදාගත් මතකයක් වූ අතර, ඔබ මෙම පිටුවට ලිව්වේ නම්, අපි අනෙකුත් ප්‍රොසෙසරකරුවන්ට ඔවුන් එකම හවුල් මතකයට ප්‍රවේශ වන්නේ නම්, එය ඔබෙන් පූරණය කළ යුතු බවත්, ඒ අනුව සහය දැක්වීම සඳහා ප්‍රොටෝකෝලයක් වැනි දෙයක් බවත් පැවසුවෙමු. cache coherence දර්ශනය වූ අතර මේ සඳහා මෘදුකාංගය. සිත්ගන්නා සංකල්පය. ඇත්ත වශයෙන්ම, සැබෑ ගැටළුව වූයේ වෙනත් දෙයකි. මේ සියල්ල ක්‍රියාත්මක විය, නමුත් ඔබට ඉක්මනින් කාර්ය සාධන ගැටළු ඇති විය, මන්ද කිසිවෙකු ප්‍රමාණවත් තරම් හොඳ මට්ටමකින් කාර්ය සාධන ආකෘති තේරුම් නොගත් බැවිනි - එහි තිබූ මතක ප්‍රවේශ රටා මොනවාද, නෝඩ් නිමක් නැතිව එකිනෙකා පිං නොකරන බවට වග බලා ගන්නේ කෙසේද සහ යනාදිය.

H2O හි මා ඉදිරිපත් කළ දෙය නම්, සමාන්තරකරණය සැඟවී ඇත්තේ කොතැනද සහ එය නොමැති තැන තීරණය කිරීම සඳහා වගකිව යුත්තේ සංවර්ධකයින්ම බවයි. මම ඉහළ කාර්ය සාධන කේතයක් ලිවීම පහසු සහ සරල කරන ලද කේතීකරණ ආකෘතියක් ඉදිරිපත් කළෙමි. නමුත් සෙමින් ධාවනය වන කේතය ලිවීම අපහසුය, එය නරක ලෙස පෙනෙනු ඇත. ඔබ මන්දගාමී කේතය ලිවීමට බැරෑරුම් ලෙස උත්සාහ කළ යුතුය, ඔබට සම්මත නොවන ක්රම භාවිතා කිරීමට සිදුවනු ඇත. තිරිංග කේතය මුලින්ම බැලූ බැල්මට පෙනේ. එහි ප්‍රතිඵලයක් වශයෙන්, ඔබ සාමාන්‍යයෙන් වේගයෙන් ක්‍රියාත්මක වන කේතයක් ලියන නමුත්, හවුල් මතකය සම්බන්ධයෙන් කුමක් කළ යුතු දැයි ඔබ සොයා බැලිය යුතුය. මේ සියල්ල විශාල අරාවන් හා බැඳී ඇති අතර එහි හැසිරීම සමාන්තර ජාවා හි වාෂ්පශීලී නොවන විශාල අරාවන්ට සමාන වේ. මම අදහස් කරන්නේ, නූල් දෙකක් සමාන්තර අරාවකට ලියා ඇති බවත්, ඉන් එකක් ජය ගන්නා බවත්, අනෙක, ඒ අනුව, පරාජය වන බවත්, කුමන එකක් දැයි ඔබ නොදනී. ඒවා වාෂ්පශීලී නොවේ නම්, ඇණවුම ඔබට අවශ්‍ය ඕනෑම දෙයක් විය හැකිය - මෙය ඉතා හොඳින් ක්‍රියාත්මක වේ. මිනිසුන් මෙහෙයුම් අනුපිළිවෙල ගැන සැබවින්ම සැලකිලිමත් වන අතර, ඔවුන් නිවැරදි ස්ථානවල වාෂ්පශීලී තබයි, සහ නිවැරදි ස්ථානවල මතකය සම්බන්ධ කාර්ය සාධන ගැටළු අපේක්ෂා කරයි. එසේ නොමැති නම්, ඔවුන් සරලවම 1 සිට N දක්වා ලූප ආකාරයෙන් කේතය ලියා ඇත, එහිදී N යනු ට්‍රිලියන කිහිපයක්, සියලු සංකීර්ණ අවස්ථා ස්වයංක්‍රීයව සමාන්තර වේ යැයි බලාපොරොත්තුවෙන් - එය එහි ක්‍රියා නොකරයි. නමුත් H2O හි මෙය Java හෝ Scala නොවේ; ඔබට අවශ්‍ය නම් එය "Java minus minus" ලෙස සැලකිය හැක. මෙය ඉතා පැහැදිලි ක්‍රමලේඛන විලාසයක් වන අතර ලූප සහ අරා සමඟ සරල C හෝ Java කේතය ලිවීමට සමාන වේ. නමුත් ඒ සමගම මතකය ටෙරාබයිට් වලින් සැකසිය හැක. මම තාම H2O පාවිච්චි කරනවා. මම එය වරින් වර විවිධ ව්‍යාපෘතිවල භාවිතා කරමි - එය තවමත් වේගවත්ම දෙයයි, එහි තරඟකරුවන්ට වඩා දුසිම් ගුණයකින් වේගවත්. ඔබ තීරු දත්ත සමඟ Big Data කරන්නේ නම්, H2O පරාජය කිරීම ඉතා අපහසුය.

තාක්ෂණික අභියෝග

ඇන්ඩෲ: ඔබේ මුළු වෘත්තීය ජීවිතය තුළ ඔබට ඇති ලොකුම අභියෝගය කුමක්ද?

ක්ලිෆ්ෆ්: අපි සාකච්ඡා කරන්නේ ගැටලුවේ තාක්ෂණික හෝ තාක්ෂණික නොවන කොටස ගැනද? මම කියන්නේ ලොකුම අභියෝග තාක්ෂණික අභියෝග නොවේ. 
තාක්ෂණික අභියෝග සම්බන්ධයෙන්. මම සරලවම ඔවුන්ව පරාජය කළා. ලොකුම එක මොකක්ද කියලා මමවත් දන්නේ නැහැ, නමුත් ටිකක් වෙලාවක් ගත කරන ලස්සන රසවත් ඒවා තිබුණා, මානසික අරගලය. මම සන් එකට ගියාම ෆාස්ට් කොම්පයිලර් එකක් හදනවා කියලා ෂුවර් එකටම සීනියර්ස්ලා රොත්තක් ප්‍රතිචාර වශයෙන් කිව්වේ මම කවදාවත් සාර්ථක වෙන්නේ නැහැ කියලා. නමුත් මම මෙම මාර්ගය අනුගමනය කළෙමි, රෙජිස්ටර් වෙන් කරන්නා වෙත සම්පාදකයක් ලිවීය, එය තරමක් වේගවත් විය. එය නවීන C1 තරම් වේගවත් විය, නමුත් විබෙදුම ඒ වන විට බෙහෙවින් මන්දගාමී වූ අතර පසුකාලීනව එය විශාල දත්ත ව්‍යුහයේ ගැටලුවක් විය. චිත්‍රක රෙජිස්ටර් විබෙදුමක් ලිවීමට මට එය අවශ්‍ය වූ අතර එම යුගයේ පැවති සහ ඉතා වැදගත් වූ කේත ප්‍රකාශනය සහ වේගය අතර උභතෝකෝටිකය මට නොතේරුණි. දත්ත ව්‍යුහය සාමාන්‍යයෙන් එකල x86s හි හැඹිලි ප්‍රමාණය ඉක්මවන බව පෙනී ගිය අතර, එබැවින්, ලියාපදිංචි විබෙදුම්කරු මුළු ජ්වලිත කාලයෙන් සියයට 5-10 ක් ක්‍රියා කරනු ඇතැයි මම මුලින් උපකල්පනය කළේ නම්, යථාර්ථයේ දී එය එසේ විය. සියයට 50 කි.

කාලය ගෙවී යත්ම, සම්පාදකය පිරිසිදු හා කාර්යක්ෂම විය, තවත් අවස්ථා වලදී බිහිසුණු කේත උත්පාදනය නතර විය, සහ කාර්ය සාධනය වැඩි වැඩියෙන් C සම්පාදකයක් නිපදවන දෙයට සමාන වීමට පටන් ගත්තේය.ඇත්ත වශයෙන්ම, ඔබ C පවා වේගවත් නොවන ජරාවක් ලියන්නේ නම් මිස. . ඔබ C වැනි කේතයක් ලියන්නේ නම්, ඔබට තවත් අවස්ථා වලදී C වැනි කාර්ය සාධනයක් ලැබෙනු ඇත. ඔබ තව දුරටත් ඉදිරියට යන විට, ඔබට බොහෝ විට C මට්ටම සමඟ අසමමිතිකව සමපාත වන කේතයක් ලැබෙන විට, රෙජිස්ටර් විබෙදුම සම්පූර්ණ දෙයක් ලෙස පෙනෙන්නට පටන් ගත්තේය... ඔබේ කේතය වේගයෙන් හෝ මන්දගාමීව ක්‍රියා කරයිද යන්න නොසලකා. වඩා හොඳ තෝරා ගැනීම් සිදු කිරීම සඳහා මම වෙන් කරන්නා මත දිගටම වැඩ කළෙමි. ඔහු මන්දගාමී හා මන්දගාමී විය, නමුත් වෙනත් කිසිවෙකුට මුහුණ දිය නොහැකි අවස්ථාවන්හිදී ඔහු වඩා හොඳ සහ වඩා හොඳ කාර්ය සාධනයක් ලබා දුන්නේය. මට රෙජිස්ටර් වෙන්කරන්නෙකුට කිමිදෙන්න පුළුවන්, එහි මාසයක් වැඩ වළලන්න, හදිසියේම මුළු කේතයම 5% වේගයෙන් ක්‍රියාත්මක වීමට පටන් ගන්නවා. මෙය කාලයෙන් කාලයට සිදු වූ අතර රෙජිස්ටර් වෙන් කරන්නා කලා කෘතියක් බවට පත් විය - සෑම කෙනෙකුම එයට ආදරය කළේය හෝ එයට වෛර කළේය, සහ ඇකඩමියේ අය “සියල්ල මේ ආකාරයෙන් කරන්නේ ඇයි” යන මාතෘකාව පිළිබඳ ප්‍රශ්න ඇසුවේය. රේඛා ස්කෑන්, සහ වෙනස කුමක්ද. පිළිතුර තවමත් එසේමය: ප්‍රස්ථාර වර්ණ ගැන්වීම සහ බෆර කේතය සමඟ ඉතා ප්‍රවේශමෙන් වැඩ කිරීම මත පදනම් වූ වෙන් කරන්නෙකු ජයග්‍රාහී ආයුධයකට සමාන වේ, කිසිවෙකුට පරාජය කළ නොහැකි හොඳම සංයෝජනය. තවද මෙය තරමක් නොපැහැදිලි දෙයකි. සම්පාදනය කරන්නා කරන අනෙක් සියල්ල තරමක් හොඳින් අධ්‍යයනය කර ඇති දේවල්, ඒවා ද කලා මට්ටමට ගෙන ඇත. මම හැමවිටම කළේ සම්පාදකය කලා කෘතියක් බවට පත් කළ යුතු දේවල්. නමුත් මේ කිසිවක් අසාමාන්‍ය දෙයක් නොවීය - රෙජිස්ටර් වෙන් කරන්නා හැර. උපක්‍රමය නම් පරිස්සම් වීමයි කපා බරක් යටතේ සහ, මෙය සිදු වුවහොත් (ආසාවක් ඇත්නම් මට වඩාත් විස්තරාත්මකව පැහැදිලි කළ හැකිය), මෙයින් අදහස් කරන්නේ ඔබට කාර්ය සාධන කාලසටහනේ තුවාළ වැටීමේ අවදානමකින් තොරව වඩාත් ආක්‍රමණශීලී ලෙස සම්බන්ධ විය හැකි බවයි. ඒ දවස්වල රෙජිස්ටර් ඇලෝකේටර් තිබ්බට බාබල්, විස්ල් එල්ලපු, ෆුල් ස්කේල් කොම්පයිලර් ගොන්නක් තිබ්බා, ඒත් වෙන කාටවත් කරන්න බෑ.

ගැටළුව නම්, ඔබ ඉන්ලයිනිං ප්‍රදේශය වැඩි කිරීමට සහ වැඩි කිරීමට යටත් වන ක්‍රම එකතු කරන්නේ නම්, භාවිතා කළ අගයන් සමූහය ක්ෂණිකව රෙජිස්ටර් ගණන ඉක්මවා යන අතර ඔබට ඒවා කපා දැමිය යුතුය. තීරනාත්මක මට්ටම සාමාන්‍යයෙන් පැමිණෙන්නේ වෙන්කරන්නා අතහැර දැමූ විට වන අතර, කාන්දුවක් සඳහා හොඳ අපේක්ෂකයෙකු තවත් අයෙකුට වටිනවා, ඔබ සාමාන්‍යයෙන් වල් දේවල් විකුණනු ඇත. මෙහි ඇතුළත් කිරීමේ වටිනාකම නම්, ඔබට ඇමතීමට සහ සුරැකීමට උඩිස් කොටසේ කොටසක් අහිමි වීමයි, ඔබට ඇතුළත අගයන් දැක ගත හැකි අතර ඒවා තවදුරටත් ප්‍රශස්ත කළ හැකිය. ඇතුල් කිරීමේ පිරිවැය නම් සජීවී අගයන් විශාල ප්‍රමාණයක් සෑදී ඇති අතර, ඔබේ රෙජිස්ටර් වෙන් කරන්නා අවශ්‍ය ප්‍රමාණයට වඩා දැවී ගියහොත්, ඔබට වහාම අහිමි වේ. එමනිසා, බොහෝ විබෙදුම්කරුවන්ට ගැටලුවක් තිබේ: ඉන්ලයිනිං යම් රේඛාවක් තරණය කරන විට, ලෝකයේ සෑම දෙයක්ම කපා හැරීමට පටන් ගන්නා අතර ඵලදායිතාව වැසිකිළියෙන් බැස ගත හැකිය. සම්පාදකය ක්‍රියාවට නංවන අය සමහර හීරිස්ටික් එකතු කරයි: නිදසුනක් ලෙස, ප්‍රමාණවත් තරම් විශාල ප්‍රමාණයකින් ආරම්භ කිරීම, ප්‍රතිපාදන සියල්ල විනාශ කරන බැවින්, ඉන්ලයිනිං නැවැත්වීමට. කාර්ය සාධන ප්‍රස්ථාරයේ කිංක් සෑදෙන්නේ එලෙසයි - ඔබ පේළිගතව, පේළිගතව, කාර්ය සාධනය සෙමින් වර්ධනය වේ - ඉන්පසු උත්පාතය! - ඔබ ඕනෑවට වඩා පෙලගැසී ඇති නිසා එය වේගවත් ජැක් එකක් මෙන් වැටේ. ජාවා පැමිණීමට පෙර සියල්ල ක්‍රියාත්මක වූයේ එලෙසය. Java හට තවත් බොහෝ inlining අවශ්‍ය වේ, එබැවින් මට මගේ විබෙදන්නා වඩාත් ආක්‍රමණශීලී කිරීමට සිදු වූ අතර එමඟින් එය බිඳ වැටීමට වඩා මට්ටම් ඉවත් වන අතර ඔබ ඕනෑවට වඩා ඇතුළත් කළහොත් එය කාන්දු වීමට පටන් ගනී, නමුත් “තවත් කාන්දු නොවේ” මොහොත තවමත් පැමිණේ. මෙය සිත්ගන්නාසුලු නිරීක්ෂණයක් වන අතර එය මා වෙත පැමිණියේ කොතැනකවත් නොවේ, පැහැදිලි නැත, නමුත් එය හොඳින් ගෙවී ගියේය. මම ආක්‍රමණශීලී ඉන්ලයිනිං භාරගත් අතර එය මාව ජාවා සහ සී ක්‍රියාකාරීත්වය එක පැත්තකින් ක්‍රියා කරන ස්ථාන වෙත ගෙන ගියේය. ඔවුන් ඇත්තටම සමීපයි - මට C කේතයට වඩා සැලකිය යුතු තරම් වේගවත් ජාවා කේතයක් ලිවිය හැකිය සහ ඒ වගේ දේවල්, නමුත් සාමාන්‍යයෙන්, දේවල්වල විශාල පින්තූරයේ, ඒවා දළ වශයෙන් සැසඳිය හැකිය. මම හිතන්නේ මෙම කුසලතාවේ කොටසක් මට හැකි තරම් මෝඩ ලෙස පේළිගත කිරීමට ඉඩ සලසන රෙජිස්ටර් වෙන් කරන්නා වේ. මම දකින හැම දෙයක්ම පේළිගත කරනවා. මෙහි ප්‍රශ්නය වන්නේ විබෙදන්නා හොඳින් ක්‍රියා කරන්නේද, ප්‍රතිඵලය බුද්ධිමත් ලෙස ක්‍රියා කරන කේතයද යන්නයි. මෙය විශාල අභියෝගයක් විය: මේ සියල්ල තේරුම් ගෙන එය ක්‍රියාත්මක කිරීම.

රෙජිස්ටර් වෙන් කිරීම සහ බහු-හරය ගැන ටිකක්

ව්ලැඩිමීර්: රෙජිස්ටර් වෙන් කිරීම වැනි ගැටළු යම් ආකාරයක සදාකාලික, නිමක් නැති මාතෘකාවක් ලෙස පෙනේ. මම කල්පනා කරන්නේ බලාපොරොත්තු සහගත ලෙස පෙනෙන සහ පසුව ප්‍රායෝගිකව අසාර්ථක වූ අදහසක් කවදා හෝ තිබේද?

ක්ලිෆ්ෆ්: නිසැකවම! රෙජිස්ටර් වෙන් කිරීම යනු ඔබ NP-සම්පූර්ණ ගැටලුවක් විසඳීමට යම් හෙයුරිස්ටික් සොයා ගැනීමට උත්සාහ කරන ප්‍රදේශයකි. ඔබට කිසි විටෙකත් පරිපූර්ණ විසඳුමක් ලබා ගත නොහැක, හරිද? මෙය සරලවම කළ නොහැක්කකි. බලන්න, කාලය සම්පාදනය කිරීමට පෙර - එය ද දුර්වල ලෙස ක්‍රියා කරයි. මෙහි සංවාදය සාමාන්‍ය අවස්ථා කිහිපයක් ගැන ය. සාමාන්‍ය කාර්ය සාධනය ගැන, එබැවින් ඔබට හොඳ සාමාන්‍ය කාර්ය සාධනයක් යැයි ඔබ සිතන දෙයක් මැනිය හැකිය - සියල්ලට පසු, ඔබ එය වැඩිදියුණු කිරීමට ක්‍රියා කරයි! රෙජිස්ටර් වෙන් කිරීම කාර්ය සාධනය පිළිබඳ මාතෘකාවකි. ඔබ පළමු මූලාකෘතිය ලබා ගත් පසු, එය ක්රියා කරන අතර අවශ්ය දේ තීන්ත ආලේප කරයි, කාර්ය සාධනය වැඩ ආරම්භ වේ. ඔබ හොඳින් මැනීමට ඉගෙන ගත යුතුය. එය වැදගත් වන්නේ ඇයි? ඔබට පැහැදිලි දත්ත තිබේ නම්, ඔබට විවිධ ප්‍රදේශ දෙස බලා බලන්න: ඔව්, එය මෙහි උදව් විය, නමුත් සියල්ල කැඩී ගිය තැන එයයි! සමහර හොඳ අදහස් එනවා, ඔබ නව හූරිස්ටික් එකතු කරන අතර හදිසියේම සෑම දෙයක්ම සාමාන්යයෙන් ටිකක් හොඳින් වැඩ කිරීමට පටන් ගනී. නැත්නම් පටන් ගන්නේ නැහැ. අපේ සංවර්ධනය කලින් වෙන්කරපු ප්‍රමාණයට වඩා වෙනස් කළ සියයට පහේ කාර්ය සාධනය සඳහා අපි සටන් කළ අවස්ථා රාශියක් මට තිබුණා. එය පෙනෙන සෑම අවස්ථාවකම: ඔබ දිනන්නේ කොහේ හරි, කොතැනක හෝ ඔබ පරාජය වේ. ඔබට හොඳ කාර්ය සාධන විශ්ලේෂණ මෙවලම් තිබේ නම්, ඔබට අහිමි වූ අදහස් සොයා ගත හැකි අතර ඒවා අසාර්ථක වන්නේ මන්දැයි තේරුම් ගත හැකිය. සමහර විට සෑම දෙයක්ම එලෙසම තැබීම වටී, නැතහොත් සියුම් සුසර කිරීම සඳහා වඩාත් බැරෑරුම් ප්‍රවේශයක් ගැනීම හෝ පිටතට ගොස් වෙනත් දෙයක් නිවැරදි කිරීම වටී. එය සම්පූර්ණ දේවල් සමූහයකි! මම මේ අපූරු හැක් කළා, නමුත් මට මෙයත් අවශ්‍යයි, සහ මෙයයි, මෙයයි - සහ ඔවුන්ගේ සම්පූර්ණ සංයෝජනය යම් වැඩිදියුණු කිරීම් ලබා දෙයි. ඒ වගේම හුදකලා අයට අසාර්ථක වෙන්න පුළුවන්. NP-සම්පූර්ණ ගැටළු මත කාර්ය සාධන කාර්යයේ ස්වභාවය මෙයයි.

ව්ලැඩිමීර්: විභේදන යන්ත්‍රවල පින්තාරු කිරීම වැනි දේවල් දැනටමත් විසඳා ඇති ගැටලුවක් බව කෙනෙකුට හැඟීමක් ඇති වේ. හොඳයි, එය ඔබ වෙනුවෙන් තීරණය කර ඇත, ඔබ පවසන දේ අනුව විනිශ්චය කිරීම, එසේ නම් එය වටිනවාද ...

ක්ලිෆ්ෆ්: එය එසේ විසඳා නැත. එය "විසඳුනු" බවට පත් කළ යුත්තේ ඔබයි. දුෂ්කර ගැටළු ඇති අතර ඒවා විසඳිය යුතුය. මෙය සිදු කළ පසු, ඵලදායිතාව මත වැඩ කිරීමට කාලයයි. ඔබ ඒ අනුව මෙම කාර්යයට ප්‍රවේශ විය යුතුය - මිණුම් සලකුණු කරන්න, ප්‍රමිතික එකතු කරන්න, ඔබ පෙර අනුවාදයකට ආපසු ගිය විට, ඔබේ පැරණි හැක් නැවත ක්‍රියා කිරීමට පටන් ගත් විට (හෝ අනෙක් අතට, නතර වූ විට) තත්වයන් පැහැදිලි කරන්න. තවද ඔබ යමක් අත්කර ගන්නා තුරු අත් නොහරින්න. මම දැනටමත් පවසා ඇති පරිදි, වැඩ නොකළ සිසිල් අදහස් තිබේ නම්, නමුත් අදහස් ලේඛන වෙන් කිරීමේ ක්ෂේත්රයේ එය ආසන්න වශයෙන් නිමක් නැත. නිදසුනක් වශයෙන්, ඔබට විද්යාත්මක ප්රකාශන කියවිය හැකිය. දැන් මෙම ප්‍රදේශය ඉතා සෙමින් ගමන් කිරීමට පටන් ගෙන ඇති අතර එහි තරුණ කාලයට වඩා පැහැදිලි වී ඇත. කෙසේ වෙතත්, මෙම ක්ෂේත්රයේ වැඩ කරන අසංඛ්යාත පුද්ගලයින් සිටින අතර ඔවුන්ගේ සියලු අදහස් උත්සාහ කිරීම වටී, ඔවුන් සියල්ලෝම පියාපත් තුළ බලා සිටිති. ඔබ ඒවා උත්සාහ නොකළහොත් ඒවා කොතරම් හොඳදැයි ඔබට කිව නොහැක. විබෙදන්නා බොහෝ දේ කරන නිසාත්, සමහර අදහස් ඔබේ විශේෂිත විබෙදන්නා තුළ ක්‍රියා නොකරනු ඇති නිසාත්, වෙනත් විබෙදන්නාක දී ඒවා පහසුවෙන් ක්‍රියා කරන නිසාත්, ඔබේ විබෙදුම්කරු තුළ ඇති අනෙක් සියල්ල සමඟ ඔවුන් කෙතරම් හොඳින් ඒකාබද්ධ වන්නේද යන්නයි. වෙන් කරන්නා සඳහා ජයග්‍රහණය කිරීමට ඇති ප්‍රධාන මාර්ගය වන්නේ ප්‍රධාන මාර්ගයෙන් පිටත මන්දගාමී දේවල් ඇදගෙන එය මන්දගාමී මාර්ගවල මායිම් දිගේ බෙදීමට බල කිරීමයි. එබැවින් ඔබට GC එකක් ධාවනය කිරීමට අවශ්‍ය නම්, මන්දගාමී මාර්ගයක් ගන්න, deoptimize, ව්‍යතිරේකයක් විසි කරන්න, ඒ සියල්ල - මේ දේවල් සාපේක්ෂව දුර්ලභ බව ඔබ දන්නවා. ඔවුන් ඇත්තටම දුර්ලභයි, මම පරීක්ෂා කළා. ඔබ අමතර කාර්යයක් කරන අතර එය මෙම මන්දගාමී මාර්ගවල බොහෝ සීමාවන් ඉවත් කරයි, නමුත් ඒවා මන්දගාමී වන අතර කලාතුරකින් ගමන් කරන බැවින් එය ඇත්ත වශයෙන්ම වැදගත් නොවේ. උදාහරණයක් ලෙස, ශුන්‍ය දර්ශකයක් - එය කිසි විටෙකත් සිදු නොවේ, හරිද? විවිධ දේවල් සඳහා ඔබට මාර්ග කිහිපයක් තිබිය යුතුය, නමුත් ඒවා ප්රධාන එකට බාධා නොකළ යුතුය. 

ව්ලැඩිමීර්: එකවර හර දහස් ගණනක් ඇති විට බහු-හරය ගැන ඔබ සිතන්නේ කුමක්ද? මෙය ප්රයෝජනවත් දෙයක්ද?

ක්ලිෆ්ෆ්: GPU හි සාර්ථකත්වය පෙන්නුම් කරන්නේ එය බෙහෙවින් ප්‍රයෝජනවත් බවයි!

ව්ලැඩිමීර්: ඒවා තරමක් විශේෂිතයි. පොදු කාර්ය සකසනයන් ගැන කුමක් කිව හැකිද?

ක්ලිෆ්ෆ්: හොඳයි, ඒක තමයි අසුල්ගේ ව්‍යාපාරික ආකෘතිය. පුරෝකථනය කළ හැකි කාර්ය සාධනයට මිනිසුන් සැබවින්ම ප්‍රිය කළ යුගයක පිළිතුර නැවත පැමිණියේය. එකල සමාන්තර කේතය ලිවීම දුෂ්කර විය. H2O කේතීකරණ ආකෘතිය ඉතා පරිමාණය කළ හැකි නමුත් එය පොදු කාර්ය ආකෘතියක් නොවේ. සමහර විට GPU භාවිතා කරන විට වඩා ටිකක් සාමාන්යයි. අපි කතා කරන්නේ එවැනි දෙයක් වර්ධනය කිරීමේ සංකීර්ණත්වය හෝ එය භාවිතා කිරීමේ සංකීර්ණත්වය ගැනද? උදාහරණයක් ලෙස, Azul මට රසවත් පාඩමක් ඉගැන්නුවා, තරමක් නොපැහැදිලි එකක්: කුඩා හැඹිලි සාමාන්යයි. 

ජීවිතේ ලොකුම අභියෝගය

ව්ලැඩිමීර්: තාක්ෂණික නොවන අභියෝග ගැන කුමක් කිව හැකිද?

ක්ලිෆ්ෆ්: ලොකුම අභියෝගය වූයේ මිනිසුන්ට කරුණාවන්ත හා යහපත් නොවීමයි. එහි ප්‍රතිඵලයක් වශයෙන්, මම නිරන්තරයෙන්ම අතිශය ගැටුම්කාරී තත්ත්වයන්ට මුහුණ පෑවෙමි. දේවල් වැරදී යන බව මම දැන සිටියත්, එම ප්‍රශ්න සමඟ ඉදිරියට යා යුතු ආකාරය නොදැන ඒවා සමඟ කටයුතු කිරීමට නොහැකි වූ අය. දශක ගණනාවක් තිස්සේ පවතින දිගුකාලීන ගැටලු රාශියක් මේ ආකාරයෙන් මතු විය. Java සතුව C1 සහ C2 සම්පාදක තිබීම මෙහි සෘජු ප්‍රතිඵලයකි. වසර දහයක් එක දිගට ජාවා හි බහු මට්ටමේ සම්පාදනයක් නොතිබීමද සෘජු ප්‍රතිඵලයකි. අපට එවැනි ක්‍රමයක් අවශ්‍ය බව පැහැදිලිය, නමුත් එය නොතිබුණේ මන්දැයි පැහැදිලි නැත. මට ප්‍රශ්න තිබ්බේ එක ඉංජිනේරුවෙක් එක්ක... එහෙමත් නැත්නම් ඉංජිනේරුවන් පිරිසක් එක්ක. මම සන් එකේ වැඩ කරන්න පටන් ගත්ත කාලෙක මම... හරි, එතකොට විතරක් නෙවෙයි, මට සාමාන්‍යයෙන් හැමදේටම මගේම මතයක් තියෙනවා. ඒ වගේම මම හිතුවා ඔයාට ඔයාගේ මේ ඇත්ත අරගෙන ඒක ඔලුවෙන් කියන්න පුළුවන් කියලා ඒක ඇත්ත කියලා. විශේෂයෙන්ම මම බොහෝ විට කම්පන සහගත ලෙස නිවැරදි වූ නිසා. තවද ඔබ මෙම ප්රවේශයට අකමැති නම් ... විශේෂයෙන් ඔබ පැහැදිලිවම වැරදි සහ විකාරයක් කරන්නේ නම් ... සාමාන්යයෙන්, ස්වල්ප දෙනෙකුට මෙම ආකාරයේ සන්නිවේදනය ඉවසා සිටිය හැකිය. සමහරුන්ට පුළුවන් වුණත් මම වගේ. මම මගේ මුළු ජීවිතයම ගොඩනඟා ගත්තේ කුසල් ප්‍රතිපත්ති මතයි. ඔබ මට වැරදි දෙයක් පෙන්වුවහොත්, මම වහාම හැරී මෙසේ කියමි: ඔබ විකාරයක් කීවේය. ඒ සමගම, ඇත්ත වශයෙන්ම, මම සමාව අයැද සිටින අතර, ඒ සියල්ල, මම කුසල් තිබේ නම් සටහන් කර වෙනත් නිවැරදි ක්‍රියාමාර්ග ගන්නෙමි. අනෙක් අතට, මුළු කාලයෙන් කම්පන සහගත විශාල ප්‍රතිශතයක් ගැන මම කම්පන සහගත ලෙස නිවැරදිය. ඒවගේම මිනිස්සු එක්ක තියෙන සම්බන්දතා වලදි ඒක හොදට වැඩ කරන්නේ නෑ. මම හොඳ වෙන්න උත්සාහ කරන්නේ නැහැ, නමුත් මම ප්‍රශ්නය කෙළින්ම අහනවා. "මෙය කිසි විටෙකත් ක්‍රියා නොකරනු ඇත, මන්ද එක, දෙක සහ තුන." ඔවුන් "අනේ!" නොසලකා හැරීමට වඩා හොඳ වෙනත් ප්‍රතිවිපාක තිබුණි: නිදසුනක් වශයෙන්, මගේ බිරිඳගෙන් දික්කසාද වීමට සහ ඉන් පසු වසර දහයක මානසික අවපීඩනයට හේතු වූ ඒවා.

අභියෝගය යනු ඔබට කළ හැකි හෝ කළ නොහැකි දේ, වැදගත් සහ නොකළ යුතු දේ පිළිබඳ ඔවුන්ගේ අවබෝධය සමඟ මිනිසුන් සමඟ අරගලයකි. කේතීකරණ විලාසය සම්බන්ධයෙන් බොහෝ අභියෝග ඇති විය. මම තවමත් බොහෝ කේත ලියන අතර, ඒ දිනවල මට එකකට අවධානය යොමු නොකර බොහෝ සමාන්තර කාර්යයන් සහ ඒවා දුර්වල ලෙස කිරීම නිසා මට වේගය අඩු කිරීමට පවා සිදුවිය. ආපසු හැරී බලන විට, මම Java JIT විධානය, C2 විධානය සඳහා කේතයෙන් අඩක් ලිවීය. ඊළඟ වේගවත්ම කෝඩරය අඩක් මන්දගාමී ලෙසත්, ඊළඟ භාගය මන්දගාමී ලෙසත් ලියා ඇති අතර එය ඝාතීය පරිහානියකි. මෙම පේළියේ හත්වන පුද්ගලයා ඉතා මන්දගාමී විය - එය සැමවිටම සිදු වේ! මම කේත ගොඩක් ස්පර්ශ කළා. ව්‍යතිරේකයකින් තොරව මම ලිව්වේ කවුදැයි මම බැලුවෙමි, මම ඔවුන්ගේ කේතය දෙස බලා සිටියෙමි, ඒ සෑම එකක්ම සමාලෝචනය කළෙමි, සහ තවමත් ඔවුන් සියල්ලන්ට වඩා මා විසින්ම ලිවීම දිගටම කරගෙන ගියෙමි. මෙම ප්රවේශය මිනිසුන් සමඟ එතරම් හොඳින් ක්රියා නොකරයි. සමහර අය මේකට කැමති නැහැ. ඔවුන්ට එය දරාගත නොහැකි වූ විට, සියලු ආකාරයේ පැමිණිලි ආරම්භ වේ. උදාහරණයක් ලෙස, මම කේතය ඕනෑවට වඩා ලිවීම නිසා සහ එය කණ්ඩායම අනතුරට පත් කරන නිසා කේත කිරීම නවත්වන ලෙස මට වරක් කීවා, ඒ සියල්ල මට විහිළුවක් මෙන් විය: මචන්, කණ්ඩායමේ සෙසු අය අතුරුදහන් වී මම දිගටම කේතය ලියන්නේ නම්, ඔබ අර්ධ කණ්ඩායම් පමණක් අහිමි වනු ඇත. අනෙක් අතට, මම දිගටම කේතය ලිවීමෙන් ඔබට කණ්ඩායමෙන් අඩක් අහිමි වුවහොත්, එය ඉතා නරක කළමනාකරණයක් ලෙස පෙනේ. මම කවදාවත් ඒ ගැන ඇත්තටම හිතුවේ නැහැ, ඒ ගැන කතා කළේ නැහැ, නමුත් එය තවමත් මගේ ඔළුවේ කොහේ හරි තිබුණා. සිතුවිල්ල මගේ මනසෙහි කැරකෙමින් තිබුණි: "ඔයාලා හැමෝම මට විහිළු කරනවාද?" ඉතින්, ලොකුම ප්‍රශ්නය වුණේ මම සහ මිනිසුන් සමඟ මගේ සබඳතාවය. දැන් මට මාව වඩා හොඳින් තේරෙනවා, මම දිගු කලක් ක්‍රමලේඛකයින් සඳහා කණ්ඩායම් නායකයෙකු වූ අතර දැන් මම කෙලින්ම මිනිසුන්ට කියමි: ඔබ දන්නවා, මම මම වන අතර ඔබට මා සමඟ ගනුදෙනු කිරීමට සිදුවනු ඇත - මම සිටගෙන සිටියහොත් කමක් නැද්ද? මෙතන? ඔවුන් එය සමඟ කටයුතු කිරීමට පටන් ගත් විට, සියල්ල සාර්ථක විය. ඇත්ත වශයෙන්ම, මම නරක හෝ හොඳ නැත, මට නරක චේතනා හෝ ආත්මාර්ථකාමී අභිලාෂයන් නැත, එය මගේ සාරය පමණි, මට කෙසේ හෝ එය සමඟ ජීවත් විය යුතුය.

ඇන්ඩෲ: මෑතක දී හැමෝම අභ්‍යන්තරිකයින් සඳහා ස්වයං දැනුවත්භාවය සහ පොදුවේ මෘදු කුසලතා ගැන කතා කිරීමට පටන් ගත්හ. මේ ගැන ඔබට කුමක් කිව හැකිද?

ක්ලිෆ්ෆ්: ඔව්, මගේ බිරිඳගෙන් දික්කසාද වීමෙන් මම ඉගෙන ගත් තීක්ෂ්ණ බුද්ධිය සහ පාඩම එයයි. දික්කසාදයෙන් මම ඉගෙන ගත්තේ මාවම තේරුම් ගැනීමයි. මම අනිත් අයව තේරුම් ගන්න පටන් ගත්තෙ එහෙමයි. මෙම අන්තර්ක්‍රියා ක්‍රියා කරන ආකාරය තේරුම් ගන්න. මෙය එකින් එක සොයාගැනීම් වලට තුඩු දුන්නේය. මම කවුද සහ මම නියෝජනය කරන්නේ කුමක්ද යන්න පිළිබඳව දැනුවත්භාවයක් ඇති විය. මා කරන්නේ කුමක්ද: එක්කෝ මම කාර්යයේ නියැලී සිටිමි, නැතහොත් මම ගැටුමෙන් වැළකී සිටිමි, නැතහොත් වෙනත් දෙයක් - සහ මෙම මට්ටමේ ස්වයං දැනුවත්භාවය සැබවින්ම මා පාලනය කර ගැනීමට උපකාරී වේ. මෙයින් පසු, සෑම දෙයක්ම වඩා පහසු වනු ඇත. මා තුළ පමණක් නොව අනෙකුත් ක්‍රමලේඛකයින් තුළද මා සොයාගත් එක් දෙයක් නම්, ඔබ චිත්තවේගීය ආතතියෙන් පෙළෙන විට සිතුවිලි වාචිකව ප්‍රකාශ කිරීමට ඇති නොහැකියාවයි. නිදසුනක් වශයෙන්, ඔබ එහි වාඩි වී කේතීකරණය කරමින්, ගලා යන තත්වයක සිටින අතර, පසුව ඔවුන් ඔබ වෙත දුවගෙන පැමිණ යමක් කැඩී ඇති බවට හිස්ටරිකයෙන් කෑගැසීමට පටන් ගන්නා අතර දැන් ඔබට එරෙහිව ආන්තික පියවර ගනු ඇත. ඔබ චිත්තවේගීය ආතතියක සිටින නිසා ඔබට වචනයක් පැවසිය නොහැක. අත්පත් කරගත් දැනුම ඔබට මේ මොහොත සඳහා සූදානම් වීමටත්, එයින් බේරීමටත්, පසුබැසීමේ සැලැස්මකට යාමටත් ඉඩ සලසයි, ඉන් පසුව ඔබට යමක් කළ හැකිය. ඔව්, ඒ සියල්ල ක්‍රියාත්මක වන ආකාරය ඔබ අවබෝධ කර ගැනීමට පටන් ගත් විට, එය ජීවිතය වෙනස් කරන විශාල සිදුවීමකි. 
මටම නිවැරදි වචන සොයාගත නොහැකි විය, නමුත් ක්‍රියා අනුපිළිවෙල මට මතකයි. කාරණය වන්නේ මෙම ප්‍රතික්‍රියාව වාචික තරම් භෞතික වන අතර ඔබට අවකාශය අවශ්‍ය වේ. එවැනි අවකාශයක්, සෙන් අර්ථයෙන්. මෙය හරියටම පැහැදිලි කළ යුතු අතර, වහාම පසෙකට වන්න - සම්පූර්ණයෙන්ම භෞතිකව ඉවත් වන්න. මම වාචිකව නිශ්ශබ්දව සිටින විට, මට චිත්තවේගීය ලෙස තත්වය සැකසිය හැකිය. ඇඩ්‍රිනලින් ඔබේ මොළයට ළඟා වන විට, ඔබව සටන් හෝ පියාසර මාදිලියට මාරු කරන විට, ඔබට තවදුරටත් කිසිවක් පැවසිය නොහැක, නැත - දැන් ඔබ මෝඩයෙකි, කසයෙන් පහර දෙන ඉංජිනේරුවෙකි, යහපත් ප්‍රතිචාරයක් දැක්වීමට හෝ ප්‍රහාරය නැවැත්වීමට පවා නොහැකි ය, ප්‍රහාරකයා නිදහස් ය . නැවත නැවතත් පහර දීමට. ඔබ මුලින්ම නැවත ඔබ බවට පත් විය යුතුය, පාලනය නැවත ලබා ගත යුතුය, "සටන් හෝ පියාසර" මාදිලියෙන් ඉවත් වන්න.

මේ සඳහා අපට වාචික අවකාශයක් අවශ්‍ය වේ. නිදහස් ඉඩ පමණි. ඔබ කිසිවක් පැවසුවහොත්, ඔබට එය හරියටම පැවසිය හැකිය, ඉන්පසු ගොස් ඔබටම “අවකාශය” සොයා ගන්න: උද්‍යානයේ ඇවිදින්න යන්න, ස්නානය කරන්න - එය කමක් නැත. ප්රධාන දෙය නම් එම තත්වයෙන් තාවකාලිකව විසන්ධි වීමයි. ඔබ අවම වශයෙන් තත්පර කිහිපයක් සඳහා ක්‍රියා විරහිත කළ වහාම, ප්‍රතිලාභ පාලනය කරන්න, ඔබ සන්සුන්ව සිතන්නට පටන් ගනී. "හරි, මම යම් ආකාරයක මෝඩයෙක් නොවේ, මම මෝඩ දේවල් කරන්නේ නැහැ, මම ඉතා ප්රයෝජනවත් පුද්ගලයෙක්." ඔබට ඔබව ඒත්තු ගැන්වීමට හැකි වූ පසු, ඊළඟ අදියර කරා යාමට කාලයයි: සිදු වූ දේ තේරුම් ගැනීම. ඔබට ප්‍රහාරයක් එල්ල විය, ප්‍රහාරය පැමිණියේ ඔබ බලාපොරොත්තු නොවූ තැනින්ය, එය වංක, අශිෂ්ට සැඟවී සිටීමකි. මේක නරකයි. ඊළඟ පියවර වන්නේ ප්රහාරකයාට මෙය අවශ්ය වූයේ මන්දැයි තේරුම් ගැනීමයි. ඇත්තටම, ඇයි? සමහරවිට ඔහුම කෝපයෙන් සිටින නිසාද? ඇයි එයාට පිස්සුද? නිදසුනක් වශයෙන්, ඔහු තමාටම කෙලවා ගත් නිසා සහ වගකීම භාර ගත නොහැකි නිසා? සමස්ත තත්වයම ප්රවේශමෙන් හැසිරවිය යුතු ආකාරය මෙයයි. නමුත් මේ සඳහා උපාමාරු, වාචික අවකාශය සඳහා ඉඩක් අවශ්ය වේ. පළමු පියවර වන්නේ වාචික සම්බන්ධතා බිඳ දැමීමයි. වචන සමඟ සාකච්ඡා කිරීමෙන් වළකින්න. එය අවලංගු කරන්න, හැකි ඉක්මනින් ඉවත්ව යන්න. එය දුරකථන සංවාදයක් නම්, විසන්ධි කරන්න - මෙය මගේ හිටපු බිරිඳ සමඟ සන්නිවේදනය කිරීමෙන් මා ඉගෙන ගත් කුසලතාවකි. සංවාදය හොඳ තැනකට නොගියහොත්, "ආයුබෝවන්" යැයි පවසා විසන්ධි කරන්න. දුරකථනයේ අනෙක් පැත්තෙන්: "බ්ලා බ්ලා බ්ලා", ඔබ පිළිතුරු දෙයි: "ඔව්, බායි!" සහ එල්ලන්න. ඔබ සංවාදය අවසන් කරන්න. මිනිත්තු පහකට පසු, සංවේදීව සිතීමේ හැකියාව ඔබ වෙත නැවත පැමිණි විට, ඔබ ටිකක් සිසිල් වී ඇති අතර, සියල්ල ගැන, සිදු වූ දේ සහ ඊළඟට කුමක් සිදුවේද යන්න ගැන සිතීමට හැකි වේ. හැඟීම්වලින් ප්‍රතිචාර දැක්වීමට වඩා කල්පනාකාරී ප්‍රතිචාරයක් සැකසීම ආරම්භ කරන්න. මට නම්, ස්වයං දැනුවත්භාවයේ ඉදිරි ගමන වූයේ චිත්තවේගීය ආතතියකදී මට කතා කළ නොහැකි වීමයි. මෙම තත්වයෙන් මිදීම, ප්‍රතිචාර දක්වන්නේ කෙසේද සහ ගැටළු වලට වන්දි ගෙවන්නේ කෙසේද යන්න සිතීම සහ සැලසුම් කිරීම - ඔබට කතා කිරීමට නොහැකි වූ විට මේවා නිවැරදි පියවර වේ. පහසුම ක්‍රමය නම් චිත්තවේගීය ආතතිය ප්‍රකාශ වන තත්වයෙන් පලා ගොස් මෙම ආතතියට සහභාගී වීම නැවැත්වීමයි. ඊට පස්සේ හිතන්න පුළුවන් වෙනවා, හිතන්න පුළුවන් වුණාම කතා කරන්න පුළුවන් වෙනවා, යනාදී වශයෙන්.

මාර්ගය වන විට, උසාවියේදී, විරුද්ධ නීතීඥයා ඔබට මෙය කිරීමට උත්සාහ කරයි - දැන් එය පැහැදිලිය. මක්නිසාද යත්, උදාහරණයක් ලෙස ඔබට ඔබේ නම පවා උච්චාරණය කළ නොහැකි තත්වයකට ඔබව මර්දනය කිරීමේ හැකියාව ඔහුට ඇති බැවිනි. ඉතා සැබෑ අර්ථයෙන්, ඔබට කතා කිරීමට නොහැකි වනු ඇත. ඔබට මෙය සිදුවුවහොත්, ඔබ වාචික සටන් ඇවිළෙන ස්ථානයක, උසාවිය වැනි ස්ථානයක සිටින බව ඔබ දන්නේ නම්, ඔබට ඔබේ නීතිඥයා සමඟ පැමිණිය හැකිය. නීතිඥවරයා ඔබ වෙනුවෙන් පෙනී සිටින අතර වාචික ප්රහාරය නවත්වන අතර, එය සම්පූර්ණයෙන්ම නීත්යානුකූලව සිදු කරනු ඇත, සහ අහිමි වූ Zen අවකාශය නැවත ඔබ වෙත පැමිණෙනු ඇත. නිදසුනක් වශයෙන්, මට මගේ පවුලට කිහිප වතාවක් ඇමතීමට සිදු විය, විනිසුරුවරයා මේ ගැන තරමක් මිත්‍රශීලී විය, නමුත් විරුද්ධ නීතිඥවරයා මට කෑ ගසා කෑ ගැසුවේය, මට වචනයක්වත් ලබා ගැනීමට නොහැකි විය. මෙම අවස්ථා වලදී, මැදිහත්කරුවෙකු භාවිතා කිරීම මට වඩාත් සුදුසුය. මැදිහත්කරු අඛණ්ඩ ප්‍රවාහයකින් ඔබ වෙත ගලා එන මේ සියලු පීඩනය නවත්වයි, ඔබට අවශ්‍ය සෙන් අවකාශය සොයා ගනී, ඒ සමඟ කතා කිරීමේ හැකියාව නැවත පැමිණේ. මෙය සමස්ත දැනුම් ක්ෂේත්‍රයක් වන අතර එහි අධ්‍යයනය කිරීමට බොහෝ දේ ඇත, ඔබ තුළම සොයා ගැනීමට බොහෝ දේ ඇත, මේ සියල්ල විවිධ පුද්ගලයින් සඳහා වෙනස් වන ඉහළ මට්ටමේ උපායමාර්ගික තීරණ බවට පත්වේ. සමහර අයට ඉහත විස්තර කර ඇති ගැටළු නොමැත; සාමාන්‍යයෙන්, වෘත්තීය විකුණුම් පුද්ගලයින්ට ඒවා නොමැත. වචනයෙන් ජීවිකාව ගෙන යන මේ සියලු දෙනාට - ප්‍රසිද්ධ ගායක ගායිකාවන්, කවියන්, ආගමික නායකයන්, දේශපාලඥයන්, ඔවුන්ට හැම විටම කීමට යමක් තිබේ. එයාලට එහෙම ප්‍රශ්න නෑ ඒත් මට එහෙම ප්‍රශ්න තියෙනවා.

ඇන්ඩෲ: එය ... අනපේක්ෂිත විය. නියමයි, අපි දැනටමත් බොහෝ දේ කතා කර ඇති අතර මෙම සම්මුඛ පරීක්ෂණය අවසන් කිරීමට කාලයයි. අපි අනිවාර්යයෙන්ම සමුළුවේදී හමුවෙමු, මෙම සංවාදය දිගටම කරගෙන යාමට හැකි වනු ඇත. Hydra හිදී හමුවෙමු!

2019 ජූලි 11-12 දිනවල ශාන්ත පීටර්ස්බර්ග් හි පැවැත්වෙන Hydra 2019 සමුළුවේදී ඔබට ක්ලිෆ් සමඟ ඔබේ සංවාදය දිගටම කරගෙන යා හැක. ඔහු වාර්තාවක් රැගෙන එනු ඇත "The Azul Hardware Transactional Memory අත්දැකීම". ප්රවේශපත් මිලදී ගත හැක නිල වෙබ් අඩවියේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න