Π 15-ΠΉ ΡΠ°ΡΡΠΈ ΡΠ°ΠΌΠΎΡΡΠΈΡΠ΅Π»Ρ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΠ‘ Π΄Π»Ρ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΠ·ΡΡΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Go Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³ΠΎΡΡΡΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ².
β Π§Π°ΡΡΡ 14
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ
ΠΠ΅ΡΠ΅Π΄ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² Π΄Π΅ΡΠ°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ·ΡΡΠΈΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΈ ΠΠ‘: ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ.
ΠΡΠΎΡΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΠ‘, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡΡΡ ΡΠ΅ΡΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ: ΡΡΠ΅ΠΊ, ΡΠ΅Π³ΠΈΡΡΡΡ, ΠΎΡΠΊΡΡΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ β ΡΡΡΠ½ΠΎΡΡΡ ΠΠ‘ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ. ΠΠ΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ β ΡΡΠΎ Π½Π°Π±ΠΎΡ Π°Π΄ΡΠ΅ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ. Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΈ ΠΠ‘ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²Π²ΠΎΠ΄Π° / Π²ΡΠ²ΠΎΠ΄Π°, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ / ΠΏΠ°ΠΌΡΡΡΡ, Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ.
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ ΠΠ‘ ΠΎ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ. Π UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ° POSIX.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ»Π»ΡΠ·ΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ. Π ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΏΠΎΡΠΎΠΊΠΈ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ΅ΡΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ ΠΈ ΠΠ‘, ΠΎΠ½ΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π°ΡΠΏΠ΅ΠΊΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΎ ΠΎΡΡΠ°ΠΆΠ΅Π½Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅:
ΠΡΠΎΡΠ΅ΡΡΡ ΠΠΎΡΠΎΠΊΠΈ Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΊΠ°ΠΊ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΠΌΠ΅ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΆΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΠ±Π»Π°Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΠ±Π»Π°Π΄Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Π²Π½ΡΡΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΠΎΡΡΠ΅Π±Π»ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΈ ΠΠΎΡΡΠ΅Π±Π»ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
𦫠ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Β»
π¦«π ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go Π΄Π»Ρ ΡΠΎΠ±Π΅ΡΠ°
ΠΠΎΠ΄ΡΡΠ½ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°Π½ΠΈΡ ΠΏΠΎ Go Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go Π΄Π»Ρ ΡΠΎΠ±Π΅ΡΠ°Β»
π¦«π§© ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π°Π΄Π°Ρ ΠΏΠΎ Go
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Go Π΄Π»Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π°Π΄Π°Ρ ΠΏΠΎ GoΒ»
ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ
Π―Π·ΡΠΊ Go ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π»ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΡΠΌΠΈ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΠΈΡΠ½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π΄Π»Ρ ΡΡΠΈΡ Π·Π°Π΄Π°Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΌ ΠΎΠ½ΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ.
ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ β ΡΡΠΎ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ ΡΡ Π·Π°Π΄Π°Ρ. ΠΠ°Π½Π½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° ΠΎΠ½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ β ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΎΡΠΌΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ, ΡΡΡΠΎΠ³ΠΎΠ΅ Π΅Ρ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ. ΠΠ° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ.
Π’Π΅ΡΠΌΠΈΠ½Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° ΡΠ°ΡΡΠΎ ΠΏΡΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΎ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅:
ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ. ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ. Π‘ΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°, Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ. Π‘ΠΏΠΎΡΠΎΠ± Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, ΡΠΎ Π΅ΡΡΡ ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
ΠΡΠΌΠ΅ΡΠΈΠΌ ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Go ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ΅ΠΎΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (Communicating Sequential Processes β CSP) ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΎΠ³ΠΎ Π§Π°ΡΠ»ΡΠ·Π° Π. Π . Π₯ΠΎΠ°ΡΠ°. CSP ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ.
ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ Π² Go
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ Π² Go ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ΄ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠΎΠ½ΠΊΠΎΡΡΠ΅ΠΉ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Π² ΡΡΠΎΠΌ ΠΏΡΠ½ΠΊΡΠ΅.
ΠΠ°ΡΠ°ΡΡ ΡΡΠΎΠΈΡ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Go Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΠ‘ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π·Π΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π³ΠΎΡΡΡΠΈΠ½Ρ β Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ΡΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈ ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΊΠΎΡΡΡΠΈΠ½ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ . ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Π³ΠΎΡΡΡΠΈΠ½, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΡ ΠΈΡ ΠΎΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΠ‘:
- ΠΠΌΠ΅ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ΅ΠΊ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉΡΡ Ρ 2 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΡΠΆΠΈΠΌΠ°ΡΡΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
- Π£ΠΏΡΠ°Π²Π»ΡΡΡΡΡ runtime Go (ΡΡΠ΅Π΄ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Go), Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ΄ΡΠΎΠΌ.
- Π Π°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΡΡΠ΅Π±ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
- Π’ΡΠ΅Π±ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΈ.
- Π Π΅Π°Π»ΠΈΠ·ΡΡΡ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ (ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ ΡΠ°ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°), ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊΠΈ β Π²ΡΡΠ΅ΡΠ½ΡΡΡΡΡ (ΠΊΠΎΠ³Π΄Π° ΠΠ‘ ΡΠ°ΠΌΠ° ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊ Ρ 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 ΠΈ ΡΠ΅ΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π΄Π°Ρ.
***
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡΠΈΡΠ΅Π»Ρ
- ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ. ΠΠΎΡΡΡΠΈΠ½Ρ. ΠΠ°Π½Π°Π»Ρ