TGViewer
dev notes dev notes @junsenior · 1.39K subscribers
Post #225 1.4K
10-ая глава "Golang для профи" - продолжение темы асинхронщины, но уже более сложной. Постарался простым языком законспектировать основные тезисы подраздела о работе планировщика, велкоме.

Планировщик go - модуль, управляющий горутинами. Его задача - запустить горутину, обеспечить ей комфортную жизнь, а затем убить её.

Планировщик использует несколько стратегий работы.
Первая - стратегия справедливого планирования: максимально равномерно размазать все задачи по всем процессорам. В теории стратегия звучит хорошо, на практике - горутины часто связаны друг с другом, из-за чего на один процессор из-за связности может улететь больше горутин, чем на другой, и справедливостью уже не пахнет.

Вторая - стратегия перехвата работы, спешит на помощь первой. Находим недостаточно загруженный процессор, и начинаем кидать на него все доступные задачи, пока ему не станет плохо. Когда всем процессорам плохо в равной мере - стратегия считает, что она выполнена успешно. Доступные задачи, которые можно кинуть на процессор - могут быть забраны у других процессоров, даже если они ранее на них уже начали выполняться. Если ты ничего не понял, но тебе очень интересно, этот момент круто объяснялся в курсе по Go на stepik от mail.ru. Рекламить не буду, кому нужно - сам найдёт :)

В go есть ещё одна интересная штука с непонятным названием: алгоритм планирования m:n. Внесём ясность: m - количество горутин, которые можно выполнить одновременно, а n - количество потоков (про потоки, процессы и горутины было в предыдущем конспекте, если не читал - рекомендую: https://t.me/junsenior/224). Этот алгоритм подразумевает, что есть глобальная очередь горутин: создали горутину, она улетела в очередь, а затем процессоры начинают определять, кто будет с ней работать.
Помимо глобальной очереди, доступной всем процессорам, есть ещё локальные очереди внутри каждого логического процессора. Из глобальной очереди горутины переезжают в локальные очереди, а затем начинают выполняться.

На картинке ниже P - логический процессор, М - поток операционной системы, а G - горутина. Это сжатое, но основное представление того, как устроен жизненный цикл работы горутин.
Telegram dev notes Начинаем день с 9-ой главы книги "Golang для профи" от Михалиса Цукалоса. Глава - весьма лёгкая, поэтому я записал либо общие термины, которые важно помнить, либо моменты, которые мне показались интересными. Конкурентность и параллелизм - разные вещи. Параллелизм…
  • 🔥 5
  • 👍 1
More from @junsenior
  1. Sep 28, 2026Сошлись две вещи. Первая - мой проект safemap.ai, про который я уже писал выше - интеракти…
  2. Sep 17, 2026Post #356
  3. Sep 15, 2026Увидел тут в x.com статистику вакансий по PHP и статистику вакансий по hh.ru в целом. Я на…
  4. Sep 12, 2026Вдохновившись проектом, где делали интерактивную карту с тем, как работает Postgres (писал…
  5. Sep 8, 2026OpenAI выложили блогпост https://openai.com/index/navier-stokes-solution/ Мы публикуем реш…
  6. Sep 8, 2026Если кто не знал, вокруг этого сейчас разгорается очень большой скандал с OpenAI. Кратко,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →