Найти Π² Π”Π·Π΅Π½Π΅
Golang

🦾 ИспользованиС каналов в Golang

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ знания ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‚Π΅ΠΌΠ°ΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ для понимания Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ΄Π° Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1 Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим рСсторан. Π’ рСсторанС Π΅ΡΡ‚ΡŒ нСсколько ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΠΎΠ²Π°Ρ€ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΈ ΠΏΠΎΠ²Π°Ρ€Π°ΠΌΠΈ Π² рСсторанС выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π°ΠΊΠ°Π· ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ ΠΎΡ‚Π΄Π°Π΅Ρ‚ Π·Π°ΠΊΠ°Π· ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΏΠΎΠ²Π°Ρ€Ρƒ. Π¨Π΅Ρ„-ΠΏΠΎΠ²Π°Ρ€ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ Π·Π°ΠΊΠ°Π·. Π¨Π΅Ρ„-ΠΏΠΎΠ²Π°Ρ€ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ блюдо ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρƒ (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» Π·Π°ΠΊΠ°Π·). ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ΄Π°Π΅Ρ‚ блюдо ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Как ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ этот процСсс Π² ΠΊΠΎΠ΄Π΅? Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ N ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ способом. ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ X ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π°ΠΊΠ°Π· ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° 1, отдаст Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ²Π°Ρ€Ρƒ Y. Π¨Π΅Ρ„-ΠΏΠΎΠ²Π°Ρ€ Y ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ блюдо ΠΈ отдаст Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρƒ Z. ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ Z принСсСт это блюдо ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»ΡŽ 1. Π—Π°Ρ‚Π΅ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ процСсс ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² 2, 3 … N. Π‘ΠΌ. Π²Ρ‹Π²ΠΎΠ΄ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΠΈΠΆΠ΅. Π’ Ρ‡Π΅ΠΌ нСдостаток управлСния рСстораном с ΠΈ
ОглавлСниС

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ знания ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‚Π΅ΠΌΠ°ΠΌ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ для понимания Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ΄Π° Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

  1. ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡ.
  2. Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ (эквивалСнт ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² golang).
  3. ΠšΠ°Π½Π°Π»Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим рСсторан. Π’ рСсторанС Π΅ΡΡ‚ΡŒ нСсколько ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΠΎΠ²Π°Ρ€ΠΎΠ².

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΈ ΠΏΠΎΠ²Π°Ρ€Π°ΠΌΠΈ Π² рСсторанС выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π°ΠΊΠ°Π· ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.
ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ ΠΎΡ‚Π΄Π°Π΅Ρ‚ Π·Π°ΠΊΠ°Π· ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΏΠΎΠ²Π°Ρ€Ρƒ.
Π¨Π΅Ρ„-ΠΏΠΎΠ²Π°Ρ€ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ Π·Π°ΠΊΠ°Π·.
Π¨Π΅Ρ„-ΠΏΠΎΠ²Π°Ρ€ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ блюдо ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρƒ (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» Π·Π°ΠΊΠ°Π·).
ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ΄Π°Π΅Ρ‚ блюдо ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

Как ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ этот процСсс Π² ΠΊΠΎΠ΄Π΅?

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ N ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ способом. ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ X ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π°ΠΊΠ°Π· ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° 1, отдаст Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ²Π°Ρ€Ρƒ Y. Π¨Π΅Ρ„-ΠΏΠΎΠ²Π°Ρ€ Y ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ блюдо ΠΈ отдаст Π΅Π³ΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρƒ Z. ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ Z принСсСт это блюдо ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»ΡŽ 1. Π—Π°Ρ‚Π΅ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ процСсс ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² 2, 3 … N. Π‘ΠΌ. Π²Ρ‹Π²ΠΎΠ΄ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΠΈΠΆΠ΅.

-2

Π’ Ρ‡Π΅ΠΌ нСдостаток управлСния рСстораном с использованиСм Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ стратСгии?

Если ΠΌΠ½ΠΎΠ³ΠΎ посСтитСлСй приходят Π² рСсторан ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΈΠ· Π½ΠΈΡ… придСтся ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°ΠΆΠ΅ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ свой Π·Π°ΠΊΠ°Π· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρƒ. Π’ настоящСС врСмя рСсторан Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСсь ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» своСго пСрсонала (ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΠΎΠ²Π°Ρ€ΠΎΠ²). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ, ΠΎΠ½ Π½Π΅ смоТСт Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ большоС количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π·Π° мСньшСС врСмя.

РСшСниС

ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡ! Когда ΠΎΠ΄ΠΈΠ½ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π°Ρ€ занят обслуТиваниСм ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π°Ρ€Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΈΠ΄Π΅Ρ‚ΡŒ Π±Π΅Π· Π΄Π΅Π»Π°. Они Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, рСсторан ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ нСсколько ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΈΠ΅ Π·Π°ΠΊΠ°Π·Π° (Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° 1), ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΈΡ‰ΠΈ (Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° 2) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ блюда (Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° 3)… Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всС это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

-3

Π—Π²ΡƒΡ‡ΠΈΡ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, ΠΏΡ€Π°Π²Π΄Π°? Но Ρƒ Ρƒ нас Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ новая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°!

Π‘ΠΌ. Π²Ρ‹Π²ΠΎΠ΄ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΠΈΠΆΠ΅.

-4

Из ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π·Π°ΠΊΠ°Π· готовится Π΅Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚! Или Π·Π°ΠΊΠ°Π· Π±ΡƒΠ΄Π΅Ρ‚ доставлСн Π΅Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ приготовят ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΡƒΡ‚! Π₯отя ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈ ΠΏΠΎΠ²Π°Ρ€Π° сСйчас Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ зафиксирована ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°ΠΊΠ°Π· Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ принят, ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ ΠΈ принСсСн (Π²Π·ΡΡ‚ΡŒ -> ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ -> принСсти).

Как это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ?

Нам Π½ΡƒΠΆΠ½ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°ΠΌΠΈ. ΠŸΠΎΠ²Π°Ρ€Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°ΠΊΠ°Π· Π΄ΠΎ получСния Π·Π°ΠΊΠ°Π·Π° ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Π°. И ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π·Π°ΠΊΠ°Π· Π΄ΠΎ получСния Π΅Π³ΠΎ ΠΎΡ‚ ΡˆΠ΅Ρ„-ΠΏΠΎΠ²Π°Ρ€Π°. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π»Ρ‹ здСсь. ΠšΠ°Π½Π°Π»Ρ‹ ΠΏΠΎ своСй ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ очСрСдям сообщСний. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π° ΠΊΠ°Π½Π°Π»Π°. Один для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ²Π°Ρ€Π°ΠΌΠΈ ΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π°ΠΊΠ°Π·Ρ‹ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΡ… ΡˆΠ΅Ρ„-ΠΏΠΎΠ²Π°Ρ€Ρƒ. И Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ для взаимодСйствия ΠΏΠΎΠ²Π°Ρ€ΠΎΠ² ΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ блюдо ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

-5

Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π·Π°ΠΊΠ°Π·, ΠΎΠ½ отправляСт Π·Π°ΠΊΠ°Π· Π² ΠΊΠ°Π½Π°Π» Π·Π°ΠΊΠ°Π·Π° (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ). Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° блюдо Π³ΠΎΡ‚ΠΎΠ²ΠΎ, ΡˆΠ΅Ρ„-ΠΏΠΎΠ²Π°Ρ€ отправляСт Π·Π°ΠΊΠ°Π· Π² ΠΊΠ°Π½Π°Π» доставки (Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ). ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚Ρ‹ Π·Π°Π±Π΅Ρ€ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π·Π°ΠΊΠ°Π· с Π½Π°Ρ‡Π°Π»Π° этой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ доставят Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

-6

Допустим, всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вызываСтся ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ API вашСго Π²Π΅Π±-сСрвиса, ΠΎΠ½ выполняСт нСсколько ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ внСшнСй слуТбы. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ этого запроса выдСляСтся нСсколько Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ сСрвис ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сСрвисом AWS).

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° нашСго API Π±Ρ‹Π»Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС. Π‘Π΅Π· ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ Π½Π°ΠΌ придСтся ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ внСшнСй слуТбы.

Как ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΎΡ‚Ρ‚Π»ΠΈΠ½Π³?

Допустим, наша слуТба Π² настоящСС врСмя Π΄Π΅Π»Π°Π΅Ρ‚ N ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ внСшнСй слуТбС для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ API. ВмСсто выдСлСния N Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ» Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΡƒΠ» ΠΈΠ· M Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ (M < N, M = N/X). Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΡ‹ отправляСм Π²ΠΎ внСшний сСрвис максимум M запросов вмСсто N.

ΠŸΡƒΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» Π·Π°Π΄Π°Π½ΠΈΠΉ. Π Π°Π±ΠΎΡ‡ΠΈΠ΅ процСссы Π±ΡƒΠ΄ΡƒΡ‚ Π±Ρ€Π°Ρ‚ΡŒ задания (Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²ΠΎ внСшнюю слуТбу) для выполнСния ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅ΠΉ части ΠΊΠ°Π½Π°Π»Π° (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ worker Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΎΠ½ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ΠΊΠ°Π½Π°Π» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС задания Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, ΠΌΡ‹ вычислим ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС API.

-7
-8
Golang