π¬ ΠΠ°ΠΊΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ Π² Go?
ΠΠ°ΡΡΠ΅ΡΠ½Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ Π² Go ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠΎΡΡΡΡ Π²ΠΎΠΊΡΡΠ³ Π³ΠΎΡΡΡΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ².
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Go:
πΈ Worker pools: ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π³ΠΎΡΡΡΠΈΠ½ (Π²ΠΎΡΠΊΠ΅ΡΠΎΠ²) Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
πΈ Fan-in (ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²) ΠΈ Fan-out (ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π·Π°Π΄Π°ΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ).
πΈ Pipeline: ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π³ΠΎΡΡΡΠΈΠ½ Π² ΡΠ΅ΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ Π³ΠΎΡΡΡΠΈΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΡ. ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ°Π΄ΠΈΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΏΠΈΡΠ΅Ρ Π² Π΄ΡΡΠ³ΠΎΠΉ, ΡΠΎΡΠΌΠΈΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ .
πΈ Publish/Subscribe: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ΄Π½ΠΈ Π³ΠΎΡΡΡΠΈΠ½Ρ (ΠΈΠ·Π΄Π°ΡΠ΅Π»ΠΈ) ΠΏΡΠ±Π»ΠΈΠΊΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΊΠ°Π½Π°Π», Π° Π΄ΡΡΠ³ΠΈΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ (ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΈ) ΡΠΈΡΠ°ΡΡ ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
πΈ Context passing: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°
πΈ Errgroup: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°
πΈ Select statement: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°
π ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅: Π΄ΠΎΠΊΠ»Π°Π΄ Go Concurrency Patterns Π ΠΎΠ±Π° ΠΠ°ΠΉΠΊΠ° (ΡΠ»Π°ΠΉΠ΄Ρ) ΠΈ Advanced Go Concurrency Patterns (ΡΠ»Π°ΠΉΠ΄Ρ) Sameer Ajmani
ΠΠ°ΡΡΠ΅ΡΠ½Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ Π² Go ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠΎΡΡΡΡ Π²ΠΎΠΊΡΡΠ³ Π³ΠΎΡΡΡΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ².
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Go:
πΈ Worker pools: ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π³ΠΎΡΡΡΠΈΠ½ (Π²ΠΎΡΠΊΠ΅ΡΠΎΠ²) Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
πΈ Fan-in (ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²) ΠΈ Fan-out (ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π·Π°Π΄Π°ΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ).
πΈ Pipeline: ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π³ΠΎΡΡΡΠΈΠ½ Π² ΡΠ΅ΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ Π³ΠΎΡΡΡΠΈΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΡ. ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ°Π΄ΠΈΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΏΠΈΡΠ΅Ρ Π² Π΄ΡΡΠ³ΠΎΠΉ, ΡΠΎΡΠΌΠΈΡΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ .
πΈ Publish/Subscribe: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ΄Π½ΠΈ Π³ΠΎΡΡΡΠΈΠ½Ρ (ΠΈΠ·Π΄Π°ΡΠ΅Π»ΠΈ) ΠΏΡΠ±Π»ΠΈΠΊΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΊΠ°Π½Π°Π», Π° Π΄ΡΡΠ³ΠΈΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ (ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΈ) ΡΠΈΡΠ°ΡΡ ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
πΈ Context passing: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°
context
Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ ΠΈ ΠΎΡΠΌΠ΅Π½Ρ Π³ΠΎΡΡΡΠΈΠ½. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠ΅ΡΠ΅Π²ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
ΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ
.πΈ Errgroup: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°
errgroup
Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΎΡΠΌΠ΅Π½Ρ Π²ΡΠ΅Ρ
Π·Π°Π΄Π°Ρ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ.πΈ Select statement: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°
select
Π΄Π»Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ. select
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π³ΠΎΡΡΡΠΈΠ½Π΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π±Π»ΠΎΠΊΠΈΡΡΡΡΡ Π΄ΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ
.π ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅: Π΄ΠΎΠΊΠ»Π°Π΄ Go Concurrency Patterns Π ΠΎΠ±Π° ΠΠ°ΠΉΠΊΠ° (ΡΠ»Π°ΠΉΠ΄Ρ) ΠΈ Advanced Go Concurrency Patterns (ΡΠ»Π°ΠΉΠ΄Ρ) Sameer Ajmani