Секреты внутреннего устройства планировщика Go

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 พ.ย. 2024

ความคิดเห็น • 37

  • @vladimir_balun_programming
    @vladimir_balun_programming  2 หลายเดือนก่อน +1

    Присоединяйтесь к моему каналу в Телеграм: t.me/vladimir_balun_programming

  • @Hande_hoch
    @Hande_hoch 19 วันที่ผ่านมา +1

    отдельное спасибо за темный фон, глазам комфортно 👍

  • @antonioalejos1221
    @antonioalejos1221 6 หลายเดือนก่อน +29

    Отличная презентация. Небольшие дополнения:
    • 8 мб - верхняя граница размера стека потока ОС, дефолтное значение зависит от дистрибутива, можно поменять через ulimit. По факту при создании системного потока эти 8 мб аллоцируются в виртуальной памяти (устанавливаются MMU page tables), т.о. начальный размер физической памяти для системного треда 16 кб для 64 битных дистров.
    • Про переключение контекста потоков ОС: стек горутины по факту создаётся в хипе, а не в стеке системного потока. Это тоже влияет на быстрое переключение контекста горутин (и на то, что стек горутины может расти до 1 Гб). Т.к. горутина не работает со стеком потока ОС, для горутины используется всего 3 регистра ЦПУ, которые нужно скинуть при переключении контекста. Т.е. даже если ОС переключит поток, на котором выполнялись горутины, планировщик может очень быстро перекинуть их на другой поток.
    Надеюсь, не слишком коряво написал.

    • @avikbox
      @avikbox 3 หลายเดือนก่อน

      А где про это можно подробнее почитать\посмотреть ?

    • @antonioalejos1221
      @antonioalejos1221 3 หลายเดือนก่อน

      @@avikbox ютуб не даёт ссылки вставлять в комменты. Про память - на kernel орг есть дока по vmallocated. Про горутины можно у Дейва Чейни (Dave Cheney) почитать, и вообще много что у него почтитать можно по go)

    • @avikbox
      @avikbox 3 หลายเดือนก่อน

      @@antonioalejos1221 спасибо!

  • @mamabkocmoceyt7727
    @mamabkocmoceyt7727 6 หลายเดือนก่อน +15

    Владимир, спасибо тебе большое что делишся знаниями в доступном для понимания виде ❤

  • @bambalbino
    @bambalbino 6 หลายเดือนก่อน +2

    Владимир, спасибо. Лучшее объяснение по теме. Многие вещи знал, но не до конца понимал, а сейчас кааак понял. Все-таки сторителлинги решают. Еще раз спасибо за труд.

  • @broken_beyond_belief
    @broken_beyond_belief 6 หลายเดือนก่อน

    думал это будет приватный урок для тех, кто зарегался. но время есть не у всех. респект за аплоуд на ютуб!

  • @Andrew-go6hg
    @Andrew-go6hg 6 หลายเดือนก่อน +1

    Большое спасибо за видео, отличная подача материала!

  • @rockkley9159
    @rockkley9159 6 หลายเดือนก่อน +3

    Спасибо большое за видео

  • @Albert-nc1rj
    @Albert-nc1rj 6 หลายเดือนก่อน +2

    Спасибо большое!

  • @alexanderspeshilov839
    @alexanderspeshilov839 6 หลายเดือนก่อน

    Прекрасная лекция. Пожалуй, что стоило еще хотя бы в пару предложений упомянуть, как этот планировщик (вместе с планировщиком памяти) начинают страдать, когда нужен интероп (например с C). Впрочем, похожие страдания возникают у всех языков с богатым рантаймом (Python, Java/JRE, C#/dotnet, JS/V8 и других). Отдельная забава, когда в одном процессе хочется иметь более одного такого рантайма.

  • @БулатБакиров-у8й
    @БулатБакиров-у8й 6 หลายเดือนก่อน

    Несовсем остался понятен момент с откреплением потока при системном вызове. В итоге по факту как работает?
    1. Поток открепляется от процессора и переходи в тред пул? Тогда получается для этого процессора будет создан новый поток? У него же есть еще другие горутины
    2. Поток не открепляется, а существует тред потоков, которые выполняют системные вызовы. Мы передаем выполнение кода этой горутины треду в тред пуле.
    Какой из вариантов корректный? В лекции эта часть сумбурно рассказана

  • @yakomisar
    @yakomisar 6 หลายเดือนก่อน +4

    вольный пересказ книги Learn Concurrent Programming with Go

    • @alexols7183
      @alexols7183 5 หลายเดือนก่อน +1

      Так это общедоступная технология, тут особо не напридумываешь) Ваш референс - это тоже вольный пересказ комментариев разработчиков к коду

  • @Pchelozavr
    @Pchelozavr 11 วันที่ผ่านมา

    Противоречие.
    Вопрос по 40:45, выполнившаяся горутина идет в lifo и вытесняет прежную lifo горутину в fifo или же в выполнение?
    В первый раз сказал первое, во второй раз второе.

  • @VasiliyBorodich
    @VasiliyBorodich 4 หลายเดือนก่อน

    Добрый день, спасибо за лекцию) Есть вопрос: получается в модели "GMP", "М" это не абстракция, а прям конкретный тред ОС?

  • @alexalex-jj2sy
    @alexalex-jj2sy หลายเดือนก่อน

    Владимир спасибо большое за урок !!! Но вот я не могу понять что на собесе я говорю что в планировщике преимущественно все таки кооперативная много задачность , но теперь и есть вытеснение, но мне говорят что я не прав , что сейчас планировщик преимущественно реализует вытеснение, что это было переделано в последних версиях го , буду благодарен за Ваш ответ 🙏🏻

  • @hpv9406
    @hpv9406 6 หลายเดือนก่อน

    Поправьте правильно ли я понял: если приложение получает очень много ввода-вывода заведомо долгих операций (к примеру 1000)-> скедулер создаёт ос тред в котором крутится еполл на 1000 сокетов, вместо создания кучи ос тредов на тред пуле? Вот этот момент не до конца понял, объясните пожалуйста

  • @popsul1993
    @popsul1993 6 หลายเดือนก่อน

    Какие-какие в нагрузки в web-приложениях? /sarcasm
    А вообще, материал интересный, спасибо!)

  • @valitovgaziz
    @valitovgaziz 5 หลายเดือนก่อน +2

    Минут 10 уже не понимаю что происходит)

  • @БулатБакиров-у8й
    @БулатБакиров-у8й 6 หลายเดือนก่อน

    Получается максимум может быть 256 горутин на один поток, тогда горутины ограничены количеством потоков * 256? Мой ноут начинает умирать при +-30к потоках, тогда максимум я смогу создать +-7,5млн горутин?

    • @okidoki_poki
      @okidoki_poki 5 หลายเดือนก่อน

      Память закончится раньше вероятно :)

    • @mailmamedov9738
      @mailmamedov9738 2 หลายเดือนก่อน

      Если делать шардирование, как в видео, то нет смысла использовать больше потоков, чем ядер на цпу, плюс поток на обработку сискола, если делать больше потоков, они начнут голодать

  • @ide9827
    @ide9827 5 หลายเดือนก่อน

    коммент для продвижения канала и контента

    • @ide9827
      @ide9827 5 หลายเดือนก่อน

      вообще, офигеть как информативное видео! охренеть
      спасибо

  • @onkelen5677
    @onkelen5677 27 วันที่ผ่านมา

    Очень много понятия "контекст", но не дано определения, что это такое. А в го контекст - это вообще канал из пакета. Это такое же же или другое? Переключение контекстов медленное "потому что ядро". А других местах линупса это наоборот - аргумент того, что хорошо(какой-нибудь драйвер). А медленно - это насколько медленно?

    • @onkelen5677
      @onkelen5677 27 วันที่ผ่านมา

      И опять таки, линупс - прекраснейшее ядро. Неужели мы сейчас на коленке сделаем контекст свитчинг и быстрее и лучше чем там? В общем, не хватает конкретики в этой истории с конткстом.

  • @slavanikulin8069
    @slavanikulin8069 4 หลายเดือนก่อน

    костыли на костылях какие-то)

  • @TTT111-T
    @TTT111-T 4 หลายเดือนก่อน +1

    Так говоришь, как будто на с/с++ многопоточности невозможно писать высоконагруженные системы. Всё на тредпулах, везде поток на соединение, везде всё работает прекрасно, никто в tcp очередях не ждёт. Руки прямые просто нужны.

    • @vladimir_balun_programming
      @vladimir_balun_programming  4 หลายเดือนก่อน

      Это работает, но работает не так эффективно по сравнению с той моделью, которую я предложил - причины в видео были объяснены