Найти Π² Π”Π·Π΅Π½Π΅
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

🦫 Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ Go для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 15. ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ. Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹. ΠšΠ°Π½Π°Π»Ρ‹

Π’ 15-ΠΉ части самоучитСля ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… сущностСй ОБ для погруТСния Π² ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ основныС способы Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Go с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ². ← Π§Π°ΡΡ‚ΡŒ 14 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. БуфСризация. Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ io, bufio, os ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования слСдуСт Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ сущности ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈ ОБ: процСссор, ΠΏΠΎΡ‚ΠΎΠΊΠΈ, процСссы, систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈ прСрывания. ΠŸΡ€ΠΎΡ†Π΅ΡΡ прСдставляСт собой Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ ОБ, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ рСсурсы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π§Π°Ρ‰Π΅ всСго ΠΏΠΎΠ΄ процСссом ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: стСк, рСгистры, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ своС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство, контСкст выполнСния ΠΈ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ – ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ОБ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. АдрСсноС пространство – это Π½Π°Π±ΠΎΡ€ адрСсов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… процСссом для обращСния ΠΊ памяти. ΠŸΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ выполнСния ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сис
ОглавлСниС

Π’ 15-ΠΉ части самоучитСля ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… сущностСй ОБ для погруТСния Π² ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ основныС способы Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Go с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ².

← Π§Π°ΡΡ‚ΡŒ 14

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. БуфСризация. Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ io, bufio, os

ВСхничСская Ρ‡Π°ΡΡ‚ΡŒ

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования слСдуСт Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ сущности ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈ ОБ: процСссор, ΠΏΠΎΡ‚ΠΎΠΊΠΈ, процСссы, систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈ прСрывания.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ прСдставляСт собой Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ ОБ, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ рСсурсы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π§Π°Ρ‰Π΅ всСго ΠΏΠΎΠ΄ процСссом ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: стСк, рСгистры, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ своС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство, контСкст выполнСния ΠΈ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ – ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ОБ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. АдрСсноС пространство – это Π½Π°Π±ΠΎΡ€ адрСсов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… процСссом для обращСния ΠΊ памяти.

ΠŸΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ выполнСния ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. БистСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ интСрфСйс ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ процСссом ΠΈ ОБ для обСспСчСния Π²Π²ΠΎΠ΄Π° / Π²Ρ‹Π²ΠΎΠ΄Π°, управлСния Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ / ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, доступа ΠΊ систСмным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для оповСщСния ОБ ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… событиях ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ. Π’ UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах прСрывания Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сигналов ΠΈΠ· стандарта POSIX.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ многопоточности ΠΏΡ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… конфигурациях систСмы. Когда ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с ΠΎΠ΄Π½ΠΈΠΌ процСссором, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ обСспСчиваСтся Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ выполнСния. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ создаСт иллюзию ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ исполнСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ происходит ΠΎΡ‡Π΅Π½ΡŒ быстро. Π’ многопроцСссорных систСмах ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСссор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ процСссы ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ тСсно Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ ОБ, ΠΎΠ½ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ аспСктам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСзависимо Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ составныС элСмСнты процСссов Π˜ΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‡ΡƒΠΆΠΎΠΉ памяти. БовмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ адрСсноС пространство процСсса ΠžΠ±Π»Π°Π΄Π°ΡŽΡ‚ собствСнным ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠžΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠŸΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ большС рСсурсов, Ρ‡Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠŸΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ мСньшС рСсурсов, Ρ‡Π΅ΠΌ процСссы ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста быстрСС, Ρ‡Π΅ΠΌ Ρƒ процСссов

🦫 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Β»

πŸ¦«πŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go для собСса

ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Go Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go для собСса»

🦫🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Go

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Go для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ GoΒ»

ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ

Π―Π·Ρ‹ΠΊ Go проСктировался ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ вычислСниями, поэтому ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» для этих Π·Π°Π΄Π°Ρ‡. Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ.

ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ – это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ нСзависимо Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π·Π°Π΄Π°Ρ‡. Данная концСпция ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ упорядочиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ – это ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ вычислСний. Он прСдставляСт собой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ конкурСнтности, строгоС Π΅Ρ‘ подмноТСство. На ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с ΠΎΠ΄Π½ΠΈΠΌ процСссором ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ прСдставляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ.

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ конкурСнтности ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° часто ΠΏΡƒΡ‚Π°ΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ сущСствСнныС различия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ описаны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ взаимодСйствиС со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ сущностями. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… сущностСй. Бпособ проСктирования ΠΊΠΎΠ΄Π°, Π΅Π³ΠΎ свойство. Бпособ выполнСния ΠΊΠΎΠ΄Π°, свойство Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ процСссов Π½Π° логичСском ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° проСктирования. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ процСссов Π½Π° физичСском ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ модСль ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования Π² Go основана Π½Π° Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов (Communicating Sequential Processes β€” CSP) извСстного ΡƒΡ‡Π΅Π½ΠΎΠ³ΠΎ Π§Π°Ρ€Π»ΡŒΠ·Π° Π­. Π . Π₯ΠΎΠ°Ρ€Π°. CSP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ матСматичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для описания взаимодСйствия ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм.

ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π² Go

РСализация конкурСнтности Π² Go ΠΈΠΌΠ΅Π΅Ρ‚ ряд особСнностСй ΠΈ тонкостСй, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ познакомимся Π² этом ΠΏΡƒΠ½ΠΊΡ‚Π΅.

ΠΠ°Ρ‡Π°Ρ‚ΡŒ стоит с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Go Π½Π΅ прСдусматриваСт Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ОБ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ВмСсто этого здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ – нСзависимыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ адрСсном пространствС ΠΈ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках. Π’ΠΎΡ‚ нСсколько основных особСнностСй Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΈΡ… ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ОБ:

  1. Π˜ΠΌΠ΅ΡŽΡ‚ динамичСский стСк, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ с 2 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ ΠΈ способный ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.
  2. Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ runtime Go (срСдой выполнСния Go), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ядром.
  3. Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста.
  4. Π’Ρ€Π΅Π±ΡƒΡŽΡ‚ мСньшС памяти, Ρ‡Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.
  5. Π Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ (ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ сам Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста), Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΈ – Π²Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡ‰ΡƒΡŽ (ΠΊΠΎΠ³Π΄Π° ОБ сама снимаСт ΠΏΠΎΡ‚ΠΎΠΊ с CPU).

Авторы Go прСдусмотрСли ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ распрСдСлСния Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΏΠΎ ядрам ЦП для обСспСчСния ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ выполнСния. Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… являСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ GOMAXPROCS, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ОБ, способных ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ уровня. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ GOMAXPROCS Ρ€Π°Π²Π΅Π½ количСству ядСр ЦП.

ΠŸΡ€ΠΈ запускС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΎΠ½Π° распрСдСляСтся Π½Π° свободный ΠΏΠΎΡ‚ΠΎΠΊ ОБ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт трСмя сущностями: Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°ΠΌΠΈ (G), машинами (M) ΠΈ процСссорами (P). ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Go ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ m:n (m Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ планируСтся Π½Π° n ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²) ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ work-stealing (ΠΊΡ€Π°ΠΆΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹): свободный ΠΈΠ»ΠΈ нСдостаточно Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ процСссор ΠΈΡ‰Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΡ… ΠΊ сСбС Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова go. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ функциями:

Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ функция iterate запускаСтся сначала Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ – ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова go. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с этим ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ анонимная Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ послС сообщСния ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ устанавливаСтся Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π² 2 сСкунды – это сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ успСли Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠΉ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся функция main.

ПослС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ являСтся нСпрСдсказуСмым, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ каТдая ΠΈΠ· Π½ΠΈΡ… запускаСтся Π² собствСнном контСкстС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСзависимо ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ….

Π‘Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

πŸƒ Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚

БостояниС Π³ΠΎΠ½ΠΊΠΈ

БостояниС Π³ΠΎΠ½ΠΊΠΈ (race condition) - это ошибка, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нСсколько сущностСй (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ процСссов) Π±Π΅Π· синхронизации ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ рСсурсами. Π’ этой ситуации Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ зависит ΠΎΡ‚ порядка выполнСния этих сущностСй.

Π’ Go состояниС Π³ΠΎΠ½ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ Π΄Π²ΡƒΡ… Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ являСтся записью. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки ΡΠ²Π»ΡΡŽΡ‚ΡΡ довольно распространСнными ΠΈ слоТными Π² исправлСнии, поэтому для ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π² ΠΈΡ… ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Go Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ встроСнный race-Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€. Он вызываСтся Ρ‡Π΅Ρ€Π΅Π· Ρ„Π»Π°Π³ -race послС ΠΊΠΎΠΌΠ°Π½Π΄ test, run, build ΠΈ install:

Помимо встроСнных Π² язык Go ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, для прСдотвращСния состояний Π³ΠΎΠ½ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ синхронизации – это инструмСнты, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ раздСляСмым рСсурсам. Π‘Π°ΠΌΡ‹ΠΌΠΈ популярными ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹, сСмафоры, Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ wait groups.

ΠšΠ°Π½Π°Π»Ρ‹

Π―Π·Ρ‹ΠΊ Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ особый ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для взаимодСйствия с раздСляСмыми рСсурсами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°Π½Π°Π»Ρ‹, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°ΠΌΠΈ. ΠšΠ°Π½Π°Π»Ρ‹ прСдставлСны ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… chan ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ make с двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ: Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π°. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ послСдний ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΊΠ°Π½Π°Π» называСтся Π½Π΅Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ½Π°Ρ‡Π΅ – Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ:

ΠšΠ°Π½Π°Π»Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈΠ»ΠΈ записи. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡ… создания ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅:

Для записи Π² ΠΊΠ°Π½Π°Π» ΠΈ чтСния ΠΈΠ· Π½Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ <-. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… data Π² Π½Π΅Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ch тСкущая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° блокируСтся Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° чтСния data ΠΈΠ· ch Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΎΠΉ.

Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° производится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ close с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π΅Π³ΠΎ названия Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ закрытия ΠΊΠ°Π½Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция, аналогичная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ наличия элСмСнта Π² ΠΌΠ°ΠΏΠ΅: val, ok := <- ch, Π³Π΄Π΅ ok Π±ΡƒΠ΄Π΅Ρ‚ true, Ссли ΠΊΠ°Π½Π°Π» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ доступСн для чтСния, ΠΈΠ»ΠΈ false Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° закрытия ΠΊΠ°Π½Π°Π»Π° замСняСтся Ρ†ΠΈΠΊΠ»ΠΎΠΌ for-range, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ автоматичСски Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π».

Для дСмонстрации всСго ΠΈΠ·ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ создадим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ squares, которая Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ 0 Π΄ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° num Π² ΠΊΠ°Π½Π°Π» ch ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

Deadlock

ΠŸΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ошибка Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (deadlock), ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссы ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π’ Go Ρ‚Π°ΠΊΠΎΠ΅ происходит Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° всС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, deadlock появится, Ссли ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠ°Π½Π°Π», Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ…:

Π’Π°ΠΊΠΎΠΉ простой ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ содСрТания:

Π‘ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½Π΅Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для избСТания Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ получатСля Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΡƒΡ„Π΅Ρ€Π° Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ:

Π’ случаС, Ссли Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° большС нуля, Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π½Π΅ блокируСтся Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ заполнСния. Π‘Ρ‚ΠΎΠΈΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ опСрация чтСния ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° являСтся Β«ΠΆΠ°Π΄Π½ΠΎΠΉΒ», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄ΠΎ Π΅Π³ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ΅Π½ΠΈΡ.

ΠšΠ°Π½Π°Π»Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ cap ΠΈ len соотвСтствСнно:

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ значСния Смкости ΠΈ Π΄Π»ΠΈΠ½Ρ‹ Π² процСссС заполнСния ΠΊΠ°Π½Π°Π»Π°:

Select

Для управлСния ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Go прСдусмотрСли ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ select, ΠΏΠΎΡ…ΠΎΠΆΡƒ Π½Π° switch-case Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Select ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ»ΠΈ получСния ΠΈ блокируСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² case Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½. Если доступно нСсколько Π±Π»ΠΎΠΊΠΎΠ², Ρ‚ΠΎ select Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ.

Как ΠΈ switch-case, select ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ default, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π»ΡŽΠ±Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ default срабатываСт Π² Ρ‚ΠΎΠΌ случаС, Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ case Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½.

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ select, напишСм ΠΊΠΎΠ΄, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π²Π΅Π±-сСрвиса с балансировщиком Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. БСрвис Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Ρƒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ сСрвСра ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ сообщСниС:

ИспользованиС default Π² конструкции select позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ возникновСния deadlock, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ обСспСчиваСт Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π² этом ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²Ρ‹ΡˆΠ΅ Π±Π΅Π· строки time.Sleep(3 * time.Second), ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ вмСсто deadlock, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ сообщСниС ΠžΡ‚Π²Π΅Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ для дальнСйшСго изучСния

ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ΅ программирования прСдставляСт собой довольно ΠΎΠ±ΡˆΠΈΡ€Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π½Π°Π½ΠΈΠΉ, поэтому Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±ΠΎ всСх Π΅Ρ‘ аспСктах Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π΅ прСдставляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. Помимо рассмотрСнных Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Go Π΅ΡΡ‚ΡŒ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов проСктирования ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ: контСксты, ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹, сСмафоры, Π°Ρ‚ΠΎΠΌΠΈΠΊΠΈ, wait groups ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ погруТСния Π² Ρ‚Π΅ΠΌΡƒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹:

  • Go Wiki: LearnConcurrency – ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ конкурСнтности ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ уровня.
  • Effective Go – Concurrency – сСкция ΠΏΡ€ΠΎ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΏΠΎ написанию эффСктивного Go ΠΊΠΎΠ΄Π°.
  • Concurrency is not parallelism – ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² Go ΠΎΠ± отличиях ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ.
  • БСрия ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² "Go Concurrency Patterns" ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ… ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования Π½Π° Go: Go Concurrency PatternsGo Concurrency Patterns: Pipelines and cancellationGo Concurrency Patterns: Context
  • Go concurrency exercises – практичСскиС задания для ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования Π½Π° Go.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ³Π»ΡƒΠ±ΠΈΠ»ΠΈΡΡŒ Π² устройство ОБ, познакомились с концСпциями конкурСнтности ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ основныС понятия ΠΈ инструмСнты ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования Π² Go: Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, ΠΊΠ°Π½Π°Π»Ρ‹, состояния Π³ΠΎΠ½ΠΊΠΈ, deadlock.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части самоучитСля научимся Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Go ΠΈ Ρ€Π΅ΡˆΠΈΠΌ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… практичСских Π·Π°Π΄Π°Ρ‡.

***

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ самоучитСля

  1. ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ. Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹. ΠšΠ°Π½Π°Π»Ρ‹