Lock-free структуры данных в Go | Очередь Майкла и Скотта | Concurrency в Go

แชร์
ฝัง
  • เผยแพร่เมื่อ 10 ก.พ. 2025

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

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

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

  • @evgeniigordienko4479
    @evgeniigordienko4479 11 หลายเดือนก่อน +1

    Радует, что видео выходят регулярно,спасибо!

  • @ДмитрийВ-ч1к
    @ДмитрийВ-ч1к 6 หลายเดือนก่อน +3

    Да. В программе допущена ошибка в 47 строке.
    Должно быть:
    47 atomic.CompareAndSwapPointer(&q.tail, tail, next)
    Также предлагаю рефакторинг:
    В методе Push три раза (строки 40, 42, 47) встречается unsafe.Pointer(node)
    Лучше в строке 29 сразу один раз написать: node := unsafe.Pointer(&item{value: value})
    Тогда в других строках вместо unsafe.Pointer(node) можно будет использовать просто node.
    Для ясности кода я бы переменную node переименовал в newNode.

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

      да, первое и с unsafe.Pointer(node) тоже заметил

  • @RDmrcv
    @RDmrcv 9 หลายเดือนก่อน +3

    7:32 На строке 47 в Push, случайно не должно быть next вместо unsafe.Pointer(node)?
    Мы же пытаемся исправить хвост, а не пушнуть туда свой элемент. Или я неправильно понял?

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

    Push можно сократить до одного ifика, так и читается легче.
    func (queue *Queue[T]) Push(value T) {
    element := &element[T]{value: value}
    for {
    tail := queue.tail.Load()
    if tail.next.CompareAndSwap(nil, element) {
    queue.tail.CompareAndSwap(tail, element)
    return
    } else {
    queue.tail.CompareAndSwap(tail, tail.next.Load())
    }
    }
    }

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

    У меня два подозрения:
    1) В новую очередь добавить элементов. Первый Pop() вернет 0, потому что очередь инициализируется с нулевым элементом, который не удаляется.
    2) Во время жизни очереди в ней иногда будет оставаться один элемент. Тогда head == tail и вернет -1, хотя лежит нормальное значение.

  • @barsik_the_cat
    @barsik_the_cat 9 หลายเดือนก่อน

    Классный материал, Владимир, а можете порекомендовать какую-нибудь хорошую книгу по lock-free структурам данных? А то что то гуглятся одни статьи на Хабре.

  • @mirasalimov7937
    @mirasalimov7937 11 หลายเดือนก่อน

    Привет! А на 47 строке не должно быть CAS(&q.tail, tail, next)? Кажется что unsafe.Pointer(node) уже может быть другой нодой, или просто я туплю 😅

  • @Vadyas
    @Vadyas 11 หลายเดือนก่อน

    В статье Скотта упоминается double CAS, которого в Go нет, для избежания проблемы ABA. Как вы обошли эту проблему? :)

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

      Я в предыдушем видео рассказывал про АBA проблему в контексте Go

    • @Vadyas
      @Vadyas 11 หลายเดือนก่อน

      @@vladimir_balun_programmingспасибо 🙏

  • @klimovevgeny
    @klimovevgeny 10 หลายเดือนก่อน

    Получается, придумали простой язык, чтобы на нем все заново изобретали велосипед? Очень напоминает ситуацию с ЯП C, на структурах которого изобретали ООП в стиле C++, реализовывали наследование, виртуальные методы и тд. Может, каждый язык для своих нужд? Молотком тоже можно кашу есть, но неудобно

  • @Max-s6x
    @Max-s6x 10 หลายเดือนก่อน

    Оооооооооооочень мелко на телефоне смотреть не возможно🤷🏻‍♂️ но за контент спасибо!

  • @ypohut1673
    @ypohut1673 11 หลายเดือนก่อน

    Пока го не узучаю просто коммент в поддержку

  • @brucewayne5484
    @brucewayne5484 11 หลายเดือนก่อน +4

    Грубовато "тыкает" автор.

    • @klimovevgeny
      @klimovevgeny 10 หลายเดือนก่อน +3

      Вообще очень бесит эта заразно распространяющаяся (особенно среди HR) манера "ты" - каний. Мы в один детский сад не ходили, водку вместе не пили и не переспали вместе, чтобы непонятно кто мне "ты" - кал. Фактически, этим самым они нарушают личные границы собеседников и проявляют неуважение. И естественно проявляется это исключительно у молодого поколения
      ..

    • @Smurfetti
      @Smurfetti 10 หลายเดือนก่อน +2

      @@klimovevgeny, это it, тут все на «ты». Тем более Владимир в Яндексе трудится (я тоже), у нас культура такая, что все на ты. Забавно, что для любого руководителя обращение на «ты» не нарушает его границ.

    • @klimovevgeny
      @klimovevgeny 10 หลายเดือนก่อน +2

      @@Smurfetti Я в IT уже 30 лет, и на "ты" только с теми, с кем вместе работаю. Для всех остальных на "вы". И я, и ко мне. Это вопрос культуры. Она существует вне рамок сферы деятельности. Или её у вас просто нет. И не надо превращать IT в помойку. Это всё западное мерзотное бескультурное веяние флегматичных компьютерных задротов

    • @Smurfetti
      @Smurfetti 10 หลายเดือนก่อน

      @@klimovevgeny, можно быть модными молодёжными с заранее позитивным отношением ко всем, а можно душно работать по waterfall и ко всем на «вы». Выбор за тобой

    • @klimovevgeny
      @klimovevgeny 10 หลายเดือนก่อน

      @@Smurfetti Ага, модно-молодёжно, по горло в скраме, в стиле "не знаю когда, не знаю что, не знаю как, но может быть". Ниче, скоро это закончится, конкуренция всё сожрёт, безответственность ни одному работодателю не уперлась. Всех вылечат) Молодость - это тот недостаток, который проходит с годами. А если не проходит, то уже выглядит инфантильно и смешно