Barrier - синхронизация потоков в .NET Core за 30 секунд

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ส.ค. 2022
  • Пример использования класса Barrier для синхронизации работы потоков в DotNet Core.
    Пример с кодом на GitHub:
    github.com/codaza/BarrierExample
    Telegram канал: t.me/codaza
    На кофе ☕️: pay.cloudtips.ru/p/179d0532
    Boosty: boosty.to/codaza
    Patreon: / codaza

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

  • @codaza-channel
    @codaza-channel  ปีที่แล้ว +5

    Telegram канал:
    t.me/codaza
    Пример с кодом на GitHub:
    github.com/codaza/BarrierExample

  • @user-dm6eo7zn7c
    @user-dm6eo7zn7c ปีที่แล้ว +10

    Чуваааак, прошу, продолжай! Видосы потрясающие, начинающему си Шарп программисту очень круто и полезно!

  • @kirillporozov3602
    @kirillporozov3602 ปีที่แล้ว +6

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

  • @dmitrysolomennyy4352
    @dmitrysolomennyy4352 ปีที่แล้ว +5

    Пили контент, у тебя отлично получается!
    зы. В телеграм не забывай ссылки на ролики или сами ролики заливать ;)

  • @codenetw
    @codenetw 7 หลายเดือนก่อน +2

    плохое сравнение с пирамидой
    лучше гоночный трек когда машины подьезжают к барьеру (линии старта) и когда будет подъедет последний и оповестит об этом( как и каждый кто подъезжал
    ), все стартанут дальше параллельно, каждый в своем потоке

  • @firemanhood1526
    @firemanhood1526 ปีที่แล้ว +7

    Бро, давай еще паттернов)

  • @user-tl6em2df9q
    @user-tl6em2df9q ปีที่แล้ว +1

    Спасибо, хороший видос

  • @stivendiplet8083
    @stivendiplet8083 ปีที่แล้ว +2

    ахукено брат

  • @nepochat
    @nepochat ปีที่แล้ว +1

    Зашло, лайк

  • @SuperAnonymousViewer
    @SuperAnonymousViewer ปีที่แล้ว

    Шикос

  • @user-xi6pw9ut4h
    @user-xi6pw9ut4h ปีที่แล้ว

    Очень годно

  • @Akihobaru
    @Akihobaru ปีที่แล้ว

    Уважаемый автор канала, а у Вас случайно нет авторских курсов по C# ? 😅

  • @sciencena4340
    @sciencena4340 ปีที่แล้ว +5

    В чем разница, если запустить 3 метода с await ?

    • @nikitabukov1292
      @nikitabukov1292 ปีที่แล้ว

      Не всегда async/await доступен

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

    А как зарус ать задачу в параллельном режиме?

  • @user-we8cb5pj1s
    @user-we8cb5pj1s ปีที่แล้ว +1

    Тот же lock

    • @codaza-channel
      @codaza-channel  ปีที่แล้ว +1

      Нет, это разные примитивы синхронизации. Просто попробуйте организовать логику описанную в видео на lock и вы поймете, что не сможете этого сделать так же просто, как с Barrier.

  • @user-bd6oe3bg7x
    @user-bd6oe3bg7x ปีที่แล้ว

    То есть мы можем запустить DoWork в три потока и второй этап начнётся только после того как отработает первый этап во всех потоках?

    • @codaza-channel
      @codaza-channel  ปีที่แล้ว

      Да, Вы поняли принцип работы Barrier верно 🙂

  • @Pixch
    @Pixch ปีที่แล้ว

    Не понятно из примера в видео зачем параллелить если по тз они должны выполняться по очереди?

    • @codaza-channel
      @codaza-channel  ปีที่แล้ว +5

      Мы делаем распараллеливание, чтобы выполнить работу быстрее. У алгоритма три этапа, они должны быть выполнены последовательно, но каждый из этапов можно выполнять в несколько потоков, чтобы выполнить его быстрее. Представьте три этапа:
      1. Залить фундамент
      2. Возвести стены
      3. Поставить крышу
      Этапы нужно сделать последовательно, так как нельзя поставить стены без фундамента и нельзя поставить крышу без стен. Этапы может выполнить 1 рабочий, но медленно или 3 рабочих, это будет быстрее.

  • @flapy730
    @flapy730 ปีที่แล้ว

    А нельзя использовать цикл while?

    • @flapy730
      @flapy730 ปีที่แล้ว

      Ой, не цикл, а функцию await, или корутину

  • @user-nh1lp8xt4j
    @user-nh1lp8xt4j ปีที่แล้ว

    А зачем тогда параллельно запускать каждую задачу если все равно быстрее от этого они не выполнятся?

    • @codaza-channel
      @codaza-channel  ปีที่แล้ว

      Почему? Если выполнение одного этапа занимает 90 миллисекунд, то 3 потока это сделают за 30 миллисекунд, то есть в 3 раза быстрее. Алгоритм требует завершенности каждого из этапов перед выполнением следующего и не запрещает распараллеливание выполнения каждого из этапов.

    • @user-nh1lp8xt4j
      @user-nh1lp8xt4j ปีที่แล้ว

      @@codaza-channel Алгоритм требует завершенности каждого из этапов перед выполнением следующего и не запрещает распараллеливание.
      Тогда:
      Первый этап выполняется 30 миллисекунд. После этого параллельно выполняется второй этап и тоже занимает 30 миллисекунд. И последний этап тоже параллельно выполняется 30 миллисекунд после второго. И получается что весь процесс выполняясь параллельно и поэтапно занял 90 миллисекунд. Потому что чтобы выполниться следующему этапу ему нужно ожидать выполнения предидущего. 30+30+30 = 90

    • @codaza-channel
      @codaza-channel  ปีที่แล้ว

      Смотрите, у нас есть 3 этапа. Предположим, что выполнение одного этапа в 1 поток занимает 90 миллисекнуд. Таким образом, 3 этапа будут выполнены за 270 миллисекунд. Но мы решаем подключить для обработки ещё 2 потока. Благодаря этому, каждый этап будет выполнен не за 90 миллисекунд, а за 30 миллисекунд. Таким образом, вся задача из трех этапов будет выполнена за 90 миллисекунд (не за 270).
      Да, перед началом выполнения очередного этапа нужно дождаться завершения всех потоков, но эти издержки незначительны.

    • @user-nh1lp8xt4j
      @user-nh1lp8xt4j ปีที่แล้ว +2

      @@codaza-channel Ааа, я просто не так понял.
      Я думал что вся задача это 90 миллисекунд. А так то да если каждый этап можно распараллелить на 3 части то конечно.
      Спасибо что объяснили.

  • @poppyfield2438
    @poppyfield2438 ปีที่แล้ว +1

    Чем от семафора отличается?

    • @anonim6364
      @anonim6364 ปีที่แล้ว +3

      Так сесофор просто ограничивает количество потоков и не регулирует их поведение

  • @user-zf5hb7mx1w
    @user-zf5hb7mx1w 10 หลายเดือนก่อน

    канал закрылся?

    • @user-rk3zt7fr4d
      @user-rk3zt7fr4d 9 หลายเดือนก่อน

      Тоже интересно