ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

ඇලෙක්සි නයිඩෙනොව්, ප්රධාන විධායක නිලධාරී ITooLabs, Go (Golang) ක්‍රමලේඛන භාෂාවෙන් ටෙලිකොම් ක්‍රියාකරුවන් සඳහා විදුලි සංදේශ වේදිකාවක් සංවර්ධනය කිරීම ගැන කතා කරයි. Alexey හඬ තැපැල් සේවා (VoiceMail) සහ Virtual PBX (Cloud PBX) සැපයීම සඳහා වේදිකාව භාවිතා කළ විශාලතම ආසියානු ටෙලිකොම් ක්‍රියාකරුවෙකු තුළ වේදිකාව යෙදවීම සහ ක්‍රියාත්මක කිරීම පිළිබඳ ඔහුගේ අත්දැකීම් බෙදා ගනී.

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

ඇලෙක්සි නයිඩෙනොව් (මෙතැන් සිට - ඒඑන්): - ආයුබෝවන් සියල්ලටම! මගේ නම Alexey Naydenov. මම ITooLabs හි අධ්‍යක්ෂක. පළමුවෙන්ම, මම මෙහි කරන්නේ කුමක්ද සහ මම මෙතැනට පැමිණියේ කෙසේද යන්න පිළිතුරු දීමට කැමැත්තෙමි.

ඔබ Bitrix24 වෙළඳපොළ ("දුරකථන" කොටස) දෙස බැලුවහොත්, එහි ඇති යෙදුම් 14 සහ 36 (40%) අප වේ:

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

වඩාත් නිවැරදිව, මොවුන් අපගේ ක්‍රියාකරු හවුල්කරුවන් වේ, නමුත් මේ සියල්ල පිටුපස ඇත්තේ අපගේ වේදිකාවයි (සේවාවක් ලෙස වේදිකාව) - අපි ඔවුන්ට කුඩා සතයකට විකුණන දේ. ඇත්ත වශයෙන්ම, මම මෙම වේදිකාවේ සංවර්ධනය සහ අපි ගිය ආකාරය ගැන කතා කිරීමට කැමතියි.

දැන් අපගේ වේදිකාව සඳහා අංක:

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

Megafon ඇතුළුව 44 ක්‍රියාකරු හවුල්කරුවන්. පොදුවේ ගත් කල, අපි සැබවින්ම විවිධ වික්‍රමාන්විතයන් කිරීමට කැමති අතර, රුසියාවේ මෙහි ක්‍රියාකරුවන් 100 ක ග්‍රාහකයින් මිලියන 44 ක් සඳහා අපට සැබෑ ප්‍රවේශය ඇත. ඒ නිසා කාට හරි ව්‍යාපාරික අදහස් තියෙනවා නම් අපි ඒවාට සවන් දීලා සතුටින් ඉන්නවා.

  • පරිශීලක සමාගම් 5000 ක්.
  • මුළු ග්‍රාහකයින් 20ක්. මේ සියල්ල b000b - අපි වැඩ කරන්නේ සමාගම් සමඟ පමණි.
  • දිවා කාලයේදී විනාඩියකට ඇමතුම් 300 ක්.
  • පසුගිය වසරේ ඇමතුම් මිනිත්තු මිලියන 100 ක් (අපි සැමරුවා). මෙය අපගේ වේදිකාවේ පවතින අභ්‍යන්තර සාකච්ඡා සැලකිල්ලට නොගනී.

එය ආරම්භ වූයේ කෙසේද?

නිවැරදි අය ඔවුන්ගේ වේදිකාව සෑදීම ආරම්භ කරන්නේ කෙසේද? අපි "දෘඪ ව්යවසාය" සංවර්ධනය පිළිබඳ ඉතිහාසයක් ඇති බව ද සැලකිල්ලට ගත යුතු අතර, ව්යවසාය සඳහා වසරේ වඩාත්ම නිශ්චිත කාලය තුළ පවා! ඔබ පාරිභෝගිකයා වෙත පැමිණ “අපට තවත් සේවාදායකයන් කිහිපයක් අවශ්‍යයි” යැයි පවසන විට එය ප්‍රීතිමත් කාලයකි. සහ පාරිභෝගිකයා: "ප්‍රශ්නයක් නැහැ! අපි රාක්කයේ දහ දෙනෙක් ඉන්නවා.

ඉතින් අපි Oracle, Java, WebSphere, Db2 ඒ හැම දේම කළා. එමනිසා, අපි ඇත්ත වශයෙන්ම හොඳම වෙළෙන්දන්ගේ විසඳුම් ලබාගෙන, ඒවා ඒකාබද්ධ කර එය සමඟ යාමට උත්සාහ කළෙමු. අපි තනිවම ඇවිද ගියෙමු. මෙය එවැනි අභ්යන්තර ආරම්භයක් වනු ඇත.

මේ සියල්ල ඇත්ත වශයෙන්ම ආරම්භ වූයේ 2009 දී ය. 2006 සිට, අපි එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින් ක්‍රියාකරු විසඳුම් සඳහා සමීපව සම්බන්ධ වී සිටිමු. අපි අභිරුචි අථත්‍ය PBX කිහිපයක් සෑදුවෙමු (අපට දැන් ඇණවුම් කර ඇති ආකාරයට): අපි එය බලා, එය හොඳ බව තීරණය කර, අභ්‍යන්තර ආරම්භයක් ආරම්භ කිරීමට තීරණය කළෙමු.

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

අපි ගත්තෙ VMWare. අපි තනිවම සිටි නිසා, අපට වහාම සිසිල් විකුණුම්කරු ගබඩාව අත්හැරීමට සිදු විය. අපි ඔවුන් ගැන සෑම දෙයක්ම දන්නවා: පොරොන්දු 3 න් බෙදිය යුතු අතර, පිරිවැය 10 න් ගුණ කළ යුතුය. ඔවුන් DirDB සහ යනාදිය සෑදුවේ එබැවිනි.

පසුව එය වර්ධනය වීමට පටන් ගත්තේය. වේදිකාවට තවදුරටත් මුහුණ දිය නොහැකි නිසා මෙයට බිල්පත් සේවාවක් එක් කරන ලදී. පසුව MySQL වෙතින් බිල්පත් සේවාදායකය Mongo වෙත මාරු විය. එහි ප්‍රතිඵලයක් වශයෙන්, එහි යන සියලුම ඇමතුම් සකසන ක්‍රියාකාරී විසඳුමක් අපට ලැබුණි:

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

නමුත් එහි කොතැනක හෝ ඇතුළත, එම විකුණුම්කරුගේ නිෂ්පාදනයම කැරකෙමින් තිබේ - ප්‍රධාන, න්‍යෂ්ටික එක, අපි වරක් ගත්ෙමු. 2011 අගභාගයේදී, අපට ප්‍රධාන බාධකය, ඇත්ත වශයෙන්ම, මෙම විශේෂිත නිෂ්පාදනය වනු ඇති බව අපට වැටහුණි - අපි එයට පිවිසෙනු ඇත. අපට ඉදිරියෙන් තාප්පයක් දිස් වූ අතර, තවත් ගනුදෙනුකරුවන් වැඩි වැඩියෙන් පැමිණෙන බැවින් අපි වේගයෙන් දිව ගියෙමු.
ඒ අනුව අපට යමක් කිරීමට අවශ්‍ය විය. ඇත්ත වශයෙන්ම, අපි විවිධ නිෂ්පාදන පිළිබඳව බොහෝ පර්යේෂණ සිදු කළෙමු - විවෘත මූලාශ්‍ර සහ විකුණුම්කරුවන් යන දෙකම. මම දැන් මේ ගැන කතා කරන්නේ නැහැ - අපි කතා කරන්නේ එය නොවේ. අප සිතූ අවසාන පසුබැසීම විකල්පය වූයේ අපගේම වේදිකාවක් සෑදීමයි.

අවසානයේදී, අපි මෙම විකල්පය වෙත පැමිණියෙමු. ඇයි? මක්නිසාද යත් සියලුම විකුණුම්කරුවන් සහ විවෘත මූලාශ්‍ර නිෂ්පාදන වසර 10 ක් පැරණි ගැටළු විසඳීම සඳහා සාදන ලද බැවිනි. හොඳයි, වයස අවුරුදු 10 නම්, සහ තවත් සමහරක්! තේරීම අපට පැහැදිලි විය: එක්කෝ අපි පරමාදර්ශී සේවාවක් පිළිබඳ අපගේ විශිෂ්ට අදහසට සමු ගනිමු (හවුල්කරුවන්, ක්‍රියාකරුවන් සහ අප සඳහා), නැතහොත් අපි අපේම දෙයක් කරමු.

අපි අපේම දෙයක් කිරීමට තීරණය කළා!

වේදිකා අවශ්යතා

ඔබ දිගු කලක් යමක් කරමින් සිටී නම් (වෙනත් කෙනෙකුගේ නිෂ්පාදනයක් භාවිතා කරමින්), එවිට සිතුවිල්ල සෙමෙන් ඔබේ හිස තුළ ඇති වේ: මම මෙය තනිවම කරන්නේ කෙසේද? අප සියල්ලන්ම සමාගමේ ක්‍රමලේඛකයින් වන බැවින් (විකුණුම්කරුවන් හැර, ක්‍රමලේඛක නොවන අය නොමැත), අපගේ අවශ්‍යතා බොහෝ කලකට පෙර වර්ධනය වූ අතර ඒවා පැහැදිලි විය:

  1. ඉහළ සංවර්ධන වේගය. අපට වධ දුන් වෙළෙන්දාගේ නිෂ්පාදනය සෑහීමකට පත් නොවීය, පළමුව, සියල්ල දිගු හා සෙමින් සිදු වූ බැවිනි. අපට එය ඉක්මනින් අවශ්‍ය විය - අපට බොහෝ අදහස් තිබුණි! අපට තවමත් බොහෝ අදහස් ඇත, නමුත් පසුව අදහස් ලැයිස්තුව වසර දහයකට පෙර මෙන් පෙනෙන්නට තිබුණි. දැන් අවුරුද්දකට විතරයි.
  2. බහු-හරය යකඩ උපරිම භාවිතය. තව තවත් cores පමණක් ඇති බව අප දුටු නිසා මෙය අපටද වැදගත් විය.
  3. ඉහළ විශ්වසනීයත්වය. අපිත් අඬපු දෙයක්.
  4. අසාර්ථකත්වයට ඉහළ ප්රතිරෝධයක්.
  5. අපට අවශ්‍ය වූයේ දෛනික නිකුත් කිරීම් ක්‍රියාවලියකින් අවසන් කිරීමටයි. මේ සඳහා අපට භාෂා තේරීමක් අවශ්‍ය විය.

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

ඒ අනුව, අප විසින්ම සකස් කර ගත් නිෂ්පාදනයේ අවශ්‍යතා වලින්, භාෂාව සඳහා අවශ්‍යතා පැහැදිලිවම තාර්කික ආකාරයකින් වර්ධනය වේ.

  1. අපට බහු-core පද්ධති සඳහා සහය අවශ්‍ය නම්, සමාන්තරව ක්‍රියාත්මක කිරීම සඳහා අපට සහාය අවශ්‍ය වේ.
  2. අපට සංවර්ධන වේගය අවශ්‍ය නම්, අපට තරඟකාරී සංවර්ධනයට, තරඟකාරී වැඩසටහන්කරණයට සහාය වන භාෂාවක් අවශ්‍ය වේ. කිසිවෙකුට වෙනස හමු වී නොමැති නම්, එය ඉතා සරල ය:
    • සමාන්තර ක්‍රමලේඛනය යනු විවිධ හරයන් මත විවිධ නූල් දෙකක් ක්‍රියාත්මක වන ආකාරයයි;
    • සමගාමී ක්‍රියාත්මක කිරීම, හෝ වඩාත් නිවැරදිව, සමගාමී සහාය යනු භාෂාවක් (හෝ ධාවන කාලය, එය කමක් නැත) සමාන්තර ක්‍රියාත්මක කිරීමෙන් එන සියලු සංකීර්ණතා සැඟවීමට උපකාරී වන ආකාරයයි.
  3. ඉහළ ස්ථාවරත්වය. පැහැදිලිවම, අපට පොකුරක් අවශ්‍ය වූ අතර, විකුණුම්කරුගේ නිෂ්පාදනයට වඩා හොඳ එකක් අවශ්‍ය විය.

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

ඔබට මතක නම් අපට එතරම් විකල්ප තිබුණේ නැත. පළමුව, Erlang - අපි එයට ආදරෙයි සහ දන්නවා, එය මගේ පුද්ගලික, පෞද්ගලික ප්‍රියතම එකක් විය. දෙවනුව, ජාවා යනු ජාවා නොවේ, නමුත් විශේෂයෙන් Scala. තෙවනුව, එකල අප කිසිසේත් නොදැන සිටි භාෂාවක් - යන්න. එය එවකට දර්ශනය වී ඇත, නැතහොත් එය දැනටමත් වසර දෙකක පමණ කාලයක් පැවතුන නමුත් තවමත් නිදහස් කර නොමැත.

යන්න ජය!

Go හි ඉතිහාසය

අපි ඒකට වේදිකාවක් හැදුවා. ඇයි කියලා මම පැහැදිලි කරන්න උත්සාහ කරන්නම්.

Go හි කෙටි ඉතිහාසයක්. එය 2007 දී ආරම්භ විය, 2009 දී විවෘත කරන ලදී, පළමු අනුවාදය 2012 දී නිකුත් කරන ලදී (එනම්, අපි පළමු නිකුතුවට පෙර සිටම වැඩ ආරම්භ කළෙමු). ආරම්භකයා Google විය, එයට මා සැක කරන පරිදි ජාවා ප්‍රතිස්ථාපනය කිරීමට අවශ්‍ය විය.

කතුවරුන් ඉතා ප්රසිද්ධය:

  • Unix පිටුපස සිටි කෙන් තොම්සන්, UTF-8 සොයා ගත්තේය, සැලසුම් 9 පද්ධතිය මත වැඩ කළේය;
  • කෙන් සමඟ UTF-8 නිර්මාණය කළ Rob Pike, Bell Labs හි Plan 9, Inferno, Limbo හි ද වැඩ කළේය;
  • Robert Giesmer, Java HotSpot Compiler සොයා ගැනීම සහ V8 (Google හි Javascript පරිවර්තකය) හි උත්පාදක යන්ත්‍රය පිළිබඳ ඔහුගේ වැඩ සඳහා අපි දන්නා සහ ප්‍රිය කරන;
  • සහ අපගේ සමහර පැච් ඇතුළුව දායකයින් 700 කට වඩා.

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

යන්න: පළමු පෙනුම

භාෂාව අඩු වැඩි වශයෙන් සරල සහ තේරුම්ගත හැකි බව අපට පෙනේ. අපට පැහැදිලි වර්ග තිබේ: සමහර අවස්ථාවල ඒවා ප්‍රකාශ කළ යුතුය, අනෙක් ඒවා අවශ්‍ය නොවේ (මෙයින් අදහස් කරන්නේ වර්ග එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින් අනුමාන කරන බවයි).

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

ව්යුහයන් විස්තර කිරීම විලාසිතාවක් බව දැකිය හැකිය. අපට පොයින්ටර් සංකල්පය (තරු ලකුණ ඇති තැන) ඇති බව පෙනේ. arrays සහ associative arrays වල ආරම්භය ප්‍රකාශ කිරීම සඳහා විශේෂ සහයක් ඇති බව දැකිය හැකිය.

එය බොහෝ දුරට පැහැදිලිය - ඔබට ජීවත් විය හැකිය. අපි Hello, world ලියන්න උත්සාහ කරමු:

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

අපි දකින්නේ කුමක්ද? මෙය C-වැනි වාක්‍ය ඛණ්ඩයකි, අර්ධ කෝලනය විකල්ප වේ. එය පේළි දෙකක් සඳහා බෙදුම්කරුවෙකු විය හැකිය, නමුත් මේවා එකම රේඛාවක ඇති ඉදිකිරීම් දෙකක් නම් පමණි.

පාලන ව්‍යුහවල (14 වන පේළියේ) වරහන් විකල්ප බව අපට පෙනේ, නමුත් රැලි සහිත වරහන් සෑම විටම අවශ්‍ය වේ. ටයිප් කිරීම ස්ථිතික බව අපට පෙනේ. ටිම්ව ගොඩක් වෙලාවට එලියට ගන්නවා. මෙම උදාහරණය සාමාන්‍ය Hello, world - පුස්තකාලයක් ඇති බව පෙන්වීමට වඩා ටිකක් සංකීර්ණයි.

වැදගත් යැයි අපට පෙනෙන තවත් මොනවාද? කේතය පැකේජ වලට සංවිධානය කර ඇත. ඔබේම කේතයේ පැකේජයක් භාවිතා කිරීම සඳහා, ඔබ එය ආනයන විධානය භාවිතයෙන් ආනයනය කළ යුතුය - මෙයද වැදගත් වේ. අපි එය දියත් කරමු - එය ක්රියා කරයි. මහා!

ඊළඟට වඩාත් සංකීර්ණ දෙයක් උත්සාහ කරමු: හලෝ, ලෝකය, නමුත් දැන් එය http සේවාදායකයකි. අපි මෙහි රසවත් දකින්නේ කුමක්ද?

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

පළමුව, ශ්රිතය පරාමිතියක් ලෙස ක්රියා කරයි. මෙයින් අදහස් කරන්නේ අපගේ කාර්යය "පළමු පන්තියේ පුරවැසියා" වන අතර ඔබට එය ක්රියාකාරී ශෛලියකින් රසවත් දේවල් බොහොමයක් කළ හැකිය. ඊළඟට අපි බලාපොරොත්තු නොවූ දෙයක් දකිමු: ආනයන විධානය කෙලින්ම GitHub ගබඩාවට සම්බන්ධ කරයි. ඒක හරි, ඒක එහෙමයි - එපමනක් නොව, එය කළ යුතු ආකාරයයි.

Go හි, පැකේජයක විශ්ව හඳුනාගැනීම එහි ගබඩාවේ url වේ. විශේෂ Goget උපයෝගීතාවයක් ඇත, එය සියලු පරායත්තයන් ලබා ගැනීම, ඒවා බාගත කිරීම, ඒවා ස්ථාපනය කිරීම, ඒවා සම්පාදනය කිරීම සහ අවශ්ය නම් භාවිතය සඳහා සූදානම් කිරීම. ඒ අතරම, Goget html-meta ගැන දනී. ඒ අනුව, ඔබට ඔබගේ නිශ්චිත ගබඩාවට සබැඳි අඩංගු http නාමාවලියක් තබා ගත හැක (උදාහරණයක් ලෙස අප කරන පරිදි).

අපි තව මොනවද දකින්නේ? සම්මත පුස්තකාලයේ Http සහ Json. පැහැදිලිවම, අභ්‍යන්තර පරීක්‍ෂණයක් - පරාවර්තනයක් ඇත, එය කේතනය/json වලදී භාවිතා කළ යුතුය, මන්ද අපි ඒ සඳහා යම් අත්තනෝමතික වස්තුවක් ආදේශ කරන බැවිනි.

අපි එය ක්‍රියාත්මක කරන අතර, යන්ත්‍රයේ වත්මන් සාමාන්‍ය භාරය (එය දියත් කර ඇති යන්ත්‍රය මත) සම්පාදනය කර, ක්‍රියාත්මක කර වාර්තා කරන ප්‍රයෝජනවත් කේතයක් අපට පේළි 20 කින් ඇති බව දකිමු.
අපට මෙහි වහාම දැකිය හැකි තවත් වැදගත් වන්නේ කුමක්ද? එය එක් ස්ථිතික ද්විමය (buinary) ලෙස සම්පාදනය කර ඇත. මෙම ද්විමය කිසිදු පරායත්තතාවයක් නොමැත, පුස්තකාල නොමැත! ඔබට එය ඕනෑම පද්ධතියකට පිටපත් කළ හැකිය, එය වහාම ක්රියාත්මක කරන්න, එය ක්රියා කරනු ඇත.

අපි ඉදිරියට යමු.

යන්න: ක්‍රම සහ අතුරුමුහුණත්

යන්නට ක්‍රම තිබේ. ඔබට ඕනෑම අභිරුචි වර්ගයක් සඳහා ක්‍රමයක් ප්‍රකාශ කළ හැකිය. එපමණක් නොව, මෙය අනිවාර්යයෙන්ම ව්යුහයක් නොවේ, නමුත් සමහර විට යම් ආකාරයක අන්වර්ථයක් විය හැකිය. ඔබට N32 සඳහා අන්වර්ථයක් ප්‍රකාශ කළ හැකි අතර ප්‍රයෝජනවත් ඕනෑම දෙයක් කිරීමට ක්‍රම ලියන්න.

මෙන්න අපි පළමු වතාවට මෝඩකමකට වැටෙමු ... Go ට එවැනි පන්ති නොමැති බව පෙනේ. Go දන්නා අය කියන්න පුළුවන් වර්ගය ඇතුලත් කිරීමක් තියෙනවා කියලා, නමුත් ඒක සම්පූර්ණයෙන්ම වෙන දෙයක්. සංවර්ධකයෙකු එය උරුමයක් ලෙස සිතීම නතර කරන තරමට වඩා හොඳය. Go හි පන්ති නොමැත, උරුමයක් ද නොමැත.

ප්රශ්නය! ලෝකයේ සංකීර්ණත්වය පිළිබිඹු කිරීම සඳහා ගූගල් ප්‍රමුඛ කතුවරුන්ගේ සමාගම අපට ලබා දී ඇත්තේ කුමක්ද? ඔවුන් අපට අතුරු මුහුණත් ලබා දුන්නා!

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

අතුරු මුහුණතක් යනු ඔබට සරලව ක්‍රම, ක්‍රම අත්සන් ලිවීමට ඉඩ සලසන විශේෂ වර්ගයකි. තවද, මෙම ක්‍රම පවතින ඕනෑම වර්ගයක් (ක්‍රියාත්මක වේ) මෙම අතුරු මුහුණතට අනුරූප වේ. මෙයින් අදහස් කරන්නේ ඔබට එක් වර්ගයක් සඳහා අනුරූප ශ්‍රිතය, තවත් වර්ගයක් සඳහා (එම අතුරු මුහුණත් වර්ගයට අනුරූප වන) සරලව විස්තර කළ හැකි බවයි. මීළඟට, මෙම අතුරුමුහුණත වර්ගයෙහි විචල්‍යයක් ප්‍රකාශ කර මෙම වස්තූන්ගෙන් ඕනෑම එකක් එයට පවරන්න.

Hardcore රසිකයින් සඳහා, මෙම විචල්‍යයට ඇත්ත වශයෙන්ම දර්ශක දෙකක් ඇති බව මට පැවසිය හැකිය: එකක් දත්ත වෙත, අනෙක මෙම වර්ගයේ අතුරු මුහුණත සඳහා සාමාන්‍ය වන විශේෂ විස්තර වගුවකට. එනම්, සම්පාදකය සම්බන්ධ කරන අවස්ථාවේදී එවැනි විස්තර කිරීමේ වගු නිර්මාණය කරයි.

සහ Go හි, ඇත්ත වශයෙන්ම, අවලංගු කිරීමට ඉඟි ඇත. වචන අතුරුමුහුණත {} (කැරලි වරහන් දෙකක් සහිත) යනු ප්‍රතිපත්තිමය වශයෙන් ඕනෑම වස්තුවක් වෙත යොමු කිරීමට ඔබට ඉඩ සලසන විචල්‍යයකි.
මෙතෙක් සියල්ල හොඳින්, සියල්ල හුරුපුරුදුය. පුදුම වෙන්න දෙයක් නෑ.

යන්න: goroutines

දැන් අපි අපට උනන්දුවක් දක්වන දේ වෙත පැමිණෙමු: සැහැල්ලු ක්‍රියාවලි - Go පාරිභාෂිතයේ goroutines (goroutines).

ඇලෙක්සි නයිඩනොව්. ITooLabs. Go (Golang) දුරකථන වේදිකාවේ සංවර්ධන නඩුව. 1 කොටස

  1. පළමුව, ඒවා ඇත්තෙන්ම සැහැල්ලු ය (2 KB ට අඩු).
  2. දෙවනුව, එවැනි goroutine නිර්මාණය කිරීමේ පිරිවැය නොසැලකිලිමත් වේ: ඔබට තත්පරයකට ඔවුන්ගෙන් දහසක් නිර්මාණය කළ හැකිය - කිසිවක් සිදු නොවනු ඇත.
  3. ඔවුන්ට සේවය කරනු ලබන්නේ ඔවුන්ගේම උපලේඛනකරුවෙකු විසිනි, එය හුදෙක් පාලනය එක් ගොරෝටිනයකින් තවත් කෙනෙකුට මාරු කරයි.
  4. මෙම අවස්ථාවේදී, පාලනය පහත සඳහන් අවස්ථා වලදී මාරු කරනු ලැබේ:
    • යන්න ප්‍රකාශනය හමු වුවහොත් (ගොරූටින් ඊළඟ ගෝරූටීන් ආරම්භ කරන්නේ නම්);
    • අවහිර කරන ආදාන/පිටත ඇමතුමක් සබල කර ඇත්නම්;
    • කසළ එකතු කිරීම ආරම්භ කරන්නේ නම්;
    • නාලිකා සමඟ යම් මෙහෙයුමක් දියත් කරන්නේ නම්.

එනම්, Go වැඩසටහනක් පරිගණකයක ක්‍රියාත්මක වන සෑම අවස්ථාවකම, එය පද්ධතියේ ඇති හර ගණන තීරණය කරයි, අවශ්‍ය තරම් නූල් ප්‍රමාණයක් දියත් කරයි (පද්ධතියේ කෝර් කීයක් තිබේද යන්න හෝ ඔබ එයට කී කීයක් කීවාදැයි). ඒ අනුව, උපලේඛකයා විසින් එක් එක් හරය තුළ මෙම සියලුම මෙහෙයුම් පද්ධති නූල් මත ක්‍රියාත්මක කිරීමේ සැහැල්ලු නූල් ධාවනය කරනු ඇත.

මෙය යකඩ භාවිතා කිරීම සඳහා වඩාත් ඵලදායී ක්රමයක් බව සැලකිල්ලට ගත යුතුය. පෙන්වන දේට අමතරව, අපි තවත් බොහෝ දේ කරමු. අපි උදාහරණයක් ලෙස, එක් ඒකකයකට ගිගාබිට් 40 ක් සේවය කිරීමට ඉඩ සලසන DPI පද්ධති සාදන්නෙමු (මෙම රේඛාවල සිදුවන දේ මත පදනම්ව).

එහිදී, Go ට පෙර පවා, අපි හරියටම මෙම හේතුව සඳහා හරියටම එම යෝජනා ක්‍රමය භාවිතා කළෙමු: එය ප්‍රොසෙසර හැඹිලියේ ප්‍රදේශය ආරක්ෂා කිරීමට සහ OS සන්දර්භය ස්විච ගණන සැලකිය යුතු ලෙස අඩු කිරීමට ඉඩ සලසයි (එය සඳහා ද බොහෝ කාලයක් ගත වේ). මම නැවත කියනවා: යකඩ භාවිතා කිරීම සඳහා වඩාත් ඵලදායී ක්රමය මෙයයි.

මෙම සරල රේඛා 21 උදාහරණය හුදෙක් echo-server කරන උදාහරණයකි. සේවා කාර්යය අතිශයින්ම සරල බව කරුණාවෙන් සලකන්න, එය රේඛීය වේ. ආපසු ඇමතුම් නැත, කරදර වීමට හා සිතීමට අවශ්‍ය නැත ... ඔබ කියවා ලිවීම පමණි!

ඒ අතරම, ඔබ කියවීමට සහ ලියන්නේ නම්, එය ඇත්ත වශයෙන්ම අවහිර කළ යුතුය - මෙම goroutine සරලව පෝලිමක තබා නැවත ක්‍රියාත්මක කිරීමට හැකි වූ විට උපලේඛකයා විසින් ගනු ලැබේ. එනම්, මෙම සරල කේතයට එම යන්ත්‍රයේ ඇති OS එක ඉඩ දෙන තරම් සම්බන්ධතා සඳහා echo server එකක් ලෙස ක්‍රියා කළ හැක.

ඉතා ඉක්මනින් ඉදිරියට...

සමහර දැන්වීම් 🙂

අප සමඟ රැඳී සිටීම ගැන ඔබට ස්තුතියි. ඔබ අපේ ලිපි වලට කැමතිද? වඩාත් රසවත් අන්තර්ගතය බැලීමට අවශ්‍යද? ඇණවුමක් කිරීමෙන් හෝ මිතුරන්ට නිර්දේශ කිරීමෙන් අපට සහාය වන්න, $4.99 සිට සංවර්ධකයින් සඳහා cloud VPS, ඔබ වෙනුවෙන් අප විසින් නිර්මාණය කරන ලද ප්‍රවේශ මට්ටමේ සේවාදායකයන්ගේ අද්විතීය ප්‍රතිසමයක්: VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ගැන සම්පූර්ණ සත්‍යය $19 සිට හෝ සේවාදායකයක් බෙදා ගන්නේ කෙසේද? (RAID1 සහ RAID10, cores 24 දක්වා සහ 40GB DDR4 දක්වා ඇත).

Dell R730xd ඇම්ස්ටර්ඩෑම් හි Equinix Tier IV දත්ත මධ්‍යස්ථානයේ 2 ගුණයක් ලාභදායීද? මෙතන විතරයි 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV $199 සිට නෙදර්ලන්තයේ! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - $99 සිට! ගැන කියවන්න යටිතල පහසුකම් සංස්ථාව ගොඩනගන්නේ කෙසේද? සතයක් සඳහා යුරෝ 730 ක් වටිනා Dell R5xd E2650-4 v9000 සේවාදායකය භාවිතා කරන පන්තිය?

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

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