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

πŸš€ «Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ Go: ΠΊΠ°ΠΊ устроСн ΡƒΠΌΠ½Ρ‹ΠΉ ΠΈ быстрый ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Β»

На Π·Π°Ρ€Π΅ эпохи ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: бСсконСчными Π΄Π΅Π΄Π»ΠΎΠΊΠ°ΠΌΠΈ, высокими Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста ΠΈ ΠΏΠ»ΠΎΡ…ΠΈΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. И лишь с ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΎΠΌ языка программирования Go ΠΌΠΈΡ€ ΡƒΠ²ΠΈΠ΄Π΅Π» Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ конкурСнтности: Π»Ρ‘Π³ΠΊΠΈΠ΅ ΠΈ быстрыС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, управляСмыС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ β€” Β«Go SchedulerΒ». НСдавно опубликованная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° Π±Π»ΠΎΠ³Π΅ Β«MelatoniΒ» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ раскрываСт устройство ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Go Π² вСрсии 1.24, ΠΈ это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ²ΠΎΠ΄ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Go стал Ρ‚Π°ΠΊΠΈΠΌ популярным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для высоконагруТСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ вСрсии Go ΠΎΠ±Π»Π°Π΄Π°Π»ΠΈ Π½Π°ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ Ρ‚ΠΈΠΏΠ° M:N (many-to-many), ΠΊΠΎΠ³Π΄Π° мноТСство Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ОБ. Вакая модСль Π±Ρ‹Π»Π° Π½Π΅ лишСна нСдостатков: Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ с появлСниСм Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ GMP-ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ начиная с Go 1.2 ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ„ΠΎΡ€ΠΌΠΈΠ²ΡˆΠ΅ΠΉΡΡ ΠΏΠΎΠ·ΠΆΠ΅. Она Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Ρ€ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… сущ
ОглавлСниС
Π“ΠΎΠ»ΡƒΠ±ΠΎΠΉ Π³ΠΎΡ„Π΅Ρ€-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ направляСт ΠΏΠΎΡ‚ΠΎΠΊΠΈ свСтящихся Β«Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹Ρ…Β» ΠΊΡƒΠ±ΠΈΠΊΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· Π·ΠΎΠ»ΠΎΡ‚Ρ‹Π΅ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π½ΠΈ ΠΈ Π»Π΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ², наглядно показывая, ΠΊΠ°ΠΊ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Go балансируСт Π·Π°Π΄Π°Ρ‡ΠΈ.
Π“ΠΎΠ»ΡƒΠ±ΠΎΠΉ Π³ΠΎΡ„Π΅Ρ€-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ направляСт ΠΏΠΎΡ‚ΠΎΠΊΠΈ свСтящихся Β«Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹Ρ…Β» ΠΊΡƒΠ±ΠΈΠΊΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· Π·ΠΎΠ»ΠΎΡ‚Ρ‹Π΅ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π½ΠΈ ΠΈ Π»Π΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ², наглядно показывая, ΠΊΠ°ΠΊ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Go балансируСт Π·Π°Π΄Π°Ρ‡ΠΈ.

На Π·Π°Ρ€Π΅ эпохи ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: бСсконСчными Π΄Π΅Π΄Π»ΠΎΠΊΠ°ΠΌΠΈ, высокими Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста ΠΈ ΠΏΠ»ΠΎΡ…ΠΈΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. И лишь с ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΎΠΌ языка программирования Go ΠΌΠΈΡ€ ΡƒΠ²ΠΈΠ΄Π΅Π» Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ конкурСнтности: Π»Ρ‘Π³ΠΊΠΈΠ΅ ΠΈ быстрыС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, управляСмыС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ β€” Β«Go SchedulerΒ». НСдавно опубликованная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° Π±Π»ΠΎΠ³Π΅ Β«MelatoniΒ» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ раскрываСт устройство ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Go Π² вСрсии 1.24, ΠΈ это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ²ΠΎΠ΄ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Go стал Ρ‚Π°ΠΊΠΈΠΌ популярным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для высоконагруТСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ.

🧬 Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Go

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ вСрсии Go ΠΎΠ±Π»Π°Π΄Π°Π»ΠΈ Π½Π°ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ Ρ‚ΠΈΠΏΠ° M:N (many-to-many), ΠΊΠΎΠ³Π΄Π° мноТСство Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ОБ. Вакая модСль Π±Ρ‹Π»Π° Π½Π΅ лишСна нСдостатков:

  • πŸ”’ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±Ρ‹Π»Π° Π±ΡƒΡ‚Ρ‹Π»ΠΎΡ‡Π½Ρ‹ΠΌ Π³ΠΎΡ€Π»Ρ‹ΡˆΠΊΠΎΠΌ β€” всС Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠΉ СдинствСнным lock-ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ высокой ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ Π·Π° рСсурсы ΠΈ падСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ большой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅.
  • ⚑️ ΠŸΠ»ΠΎΡ…Π°Ρ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… β€” Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ часто Β«ΠΏΡ€Ρ‹Π³Π°ΡŽΡ‚Β» ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, приводя ΠΊ частым ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ контСкста ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ эффСктивности.
  • 🧹 Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти β€” ΠΏΠΎΡ‚ΠΎΠΊΠΈ (M) Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ кСши памяти (mcache), занимая ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π²ΠΎ врСмя оТидания систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

πŸ”§ GMP-модСль: сСрдцС соврСмСнного ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Go

Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ с появлСниСм Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ GMP-ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ начиная с Go 1.2 ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ„ΠΎΡ€ΠΌΠΈΠ²ΡˆΠ΅ΠΉΡΡ ΠΏΠΎΠ·ΠΆΠ΅. Она Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Ρ€ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… сущности:

  • 🟒 G (Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°) β€” лёгкая Π΅Π΄ΠΈΠ½ΠΈΡ†Π° конкурСнтности с динамичСским стСком (стартовый Ρ€Π°Π·ΠΌΠ΅Ρ€ 2 ΠšΠ‘).
  • 🟑 M (ΠΏΠΎΡ‚ΠΎΠΊ ОБ) β€” ядро, прСдоставляСмоС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹.
  • πŸ”΄ P (логичСский процСссор) β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ процСссор, абстракция, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΈ эффСктивно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ.

Π’ Π½ΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСссора P появилась своя локальная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΠΊΠΎ снизило ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡŽ Π·Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ рСсурсы ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ эффСктивнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ кСш процСссора.

πŸŒ€ Как Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° исполнСниС?

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ запускаСтС Π½ΠΎΠ²ΡƒΡŽ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простого ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова go. Π—Π° этой простотой скрываСтся изящный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ:

  • 🎯 Боздаётся новая Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ свободная ΠΈΠ· списка ΠΌΡ‘Ρ€Ρ‚Π²Ρ‹Ρ….
  • πŸ“₯ Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ сначала Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ своСго процСссора P (для быстрого доступа), Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ β€” Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.
  • βš™οΈ Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Go ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ (ΠΈΠ»ΠΈ создаёт) Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ M, Ссли доступСн свободный процСссор P, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС.

⏳ Π£ΠΌΠ½ΠΎΠ΅ вытСснСниС (Preemption)

Π”ΠΎ вСрсии 1.14 ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Go Π±Ρ‹Π» ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ: Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° сама ΡƒΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. Однако Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ асинхронного вытСснСния, ΠΊΠΎΠ³Π΄Π° систСмный ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ (sysmon) отслСТиваСт Π΄ΠΎΠ»Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ сигналом ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Π΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ зависания, дСлая Go подходящим Π΄Π°ΠΆΠ΅ для Π·Π°Π΄Π°Ρ‡ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

πŸ“‘ БистСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈ netpoll: магия Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ I/O

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² Go ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с I/O. ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ netpoll (Π½Π° Linux это систСмный Π²Ρ‹Π·ΠΎΠ² epoll), позволяя эффСктивно ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ сокСтов ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈ записи:

  • πŸ—ƒοΈ Один экзСмпляр epoll управляСт всСми сСтСвыми опСрациями.
  • πŸ“ž Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ I/O, ΠΏΠ°Ρ€ΠΊΡƒΡŽΡ‚ΡΡ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рСсурсы станут доступны.
  • 🌐 Благодаря этому, Go идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для высоконагруТСнных Π²Π΅Π±-сСрвисов, способных ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ дСсятки тысяч ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соСдинСний Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

🧹 ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ сборщик мусора

ΠΠ΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ экосистСмы Go являСтся эффСктивный сборщик мусора, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

  • πŸ›‘ ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ ΠΏΠ°ΡƒΠ·Ρ‹ Β«stop-the-worldΒ» ΠΏΡ€ΠΈ стартС ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Ρ„Π°Π·Ρ‹ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.
  • 🚦 ΠœΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ GC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Ρ€Π°Π²Π½Π΅ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ.

Π­Ρ‚ΠΎ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π½ΠΈΠ·ΠΊΠΈΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ прилоТСния, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠ°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти.

πŸ’‘ Π›ΠΈΡ‡Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅: ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Go заслуТиваСт восхищСния?

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

Однако стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚. НапримСр, вопрос использования ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ экзСмпляра epoll Π΄ΠΎ сих ΠΏΠΎΡ€ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ споры ΠΈ являСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ обсуТдСния Π² сообщСствС.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ устройства ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивный ΠΈ быстрый ΠΊΠΎΠ΄, избСгая Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок, ΠΈ максимально ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» Go.

🌐 ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ:
Understanding the Go Scheduler β€” Melatoni Blog

πŸ“˜ ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅: