Теперь надо присмотреться, одновременно ли моргают оба глаза.
@bdick8136
29 күн бұрын
Автору можно верить. У него такие же фингалы под глазами от загара перед монитором как и у меня.
@Sky-pg8ot
28 күн бұрын
Там кожа истоничилась, глаза много напрягает, зрение плохое, тёр много
@user-rg8pt1kk4i
29 күн бұрын
Случайно наткнулся на один из роликов с данного канала месяц назад, теперь смотрю каждый выпуск в свободное от работы время с огромным удовольствием несмотря на то, что каждый день работаю с кодом. Базы много не бывает, ребята, а с такой подачей материала так вообще красота, подогревает интерес к любимому делу. Спасибо вам огромное за ваш труд!
@Dimoniada
Ай бұрын
Насколько помню, в Pascal/Delphi/C++Builder-е тот же самый Motitor под капотом synchronized(), т.е. как и в С#. Пауза в конце как всегда на высоте, спасибо!)
@user-jx8zx8uk2m
28 күн бұрын
KZitem плохого не посоветует. Если показывает в 4 ночи в рекомендованных, значит надо смотреть :)
@3955006
29 күн бұрын
Человек снял весь материал за один дубль, потом нарезал и выкладывает нам по одному видосу ))
@artemzakharov8961
29 күн бұрын
Так это нормальная практика)
@ghaydn
29 күн бұрын
И за всё это время ни разу не моргнул.
@Dr33mway
Ай бұрын
Вот уже с примерами кода, это прям в разы интереснее! 👍
@Lazarforce
29 күн бұрын
Подскажите, после Оппенгеймера какой следующий фильм будете снимать?
@jordanmessi1
Ай бұрын
Очень доступно и не нудно. Спасибо за полезный контент!
@SuperArt1st
Ай бұрын
Съезд любителей поездов и железных дорог объявляется открытым! Have a railbuff!
@user-fw3kx2ix3p
28 күн бұрын
Это база. Благодарю. Лайк и комментарий для поддержки и продвижения канала!
@user-xz9se8mr8s
21 күн бұрын
Чел мега хорош, продолжай пожалуйста. Это просто бомба! Очень круто и качественно объясняешь на тем более в ру сегменте
@golosbezdoka
27 күн бұрын
Кликнул случайно. Офигел от качества. Подписался))
@madplayer5
25 күн бұрын
Очень интересно. Надеюсь что когда-нибудь смогу это понять.
@TheMrGlobus
29 күн бұрын
Спасибо за лекцию. Очень классно и познавательно. Теперь я знаю немного больше и больше понимаю как это всё работает.
@artemzakharov8961
29 күн бұрын
Огромное спасибо Вам за эти видео! Я Java-разработчик, который сам учил программирование с 0, сейчас вот собираюсь поступать в магистратуру на Computer Science и вы невероятно помогаете освоить материалы!
@freestylerveevo
28 күн бұрын
привет, по каким материалам учился сам? или все так же с нуля (ютубы, stepik, metaint какой-нибудь)? 😊
@artemzakharov8961
27 күн бұрын
@@freestylerveevo привет! Я читал книгу Хорцмана "Java. Библиотека профессионала", смотрел Ютуб видео в самом начале, а когда стал крепче понимать прочитал Блинова "Java методы программирования" (она уже есть новая с Java 17 если не ошибаюсь)
@justcurious1397
29 күн бұрын
Превьюха космос)
@Andrew_Shadrin
25 күн бұрын
Много слышал о необходимой осторожности при применении общих переменных, теперь понял суть. Спасибо!
@dimontools
Ай бұрын
Огромное спасибо за видео! Очень интересно ❤
@dimakof
29 күн бұрын
Замечательные ролики
@sterd0
Ай бұрын
Отлично, выпуск ждал. Вот реально интересно.
@user-fi2vo5rg7y
27 күн бұрын
"Необходимо и достаточно". Чистые данные. Спасибо автору!
@TimLaizaR228
Ай бұрын
В шарпе так же существует слово lock, которое является сахаром для монитора, прям как synchronized в жабе. В примере можно было например написать так: lock(cm) { counter++; }
@AlexAlex-jk2tn
28 күн бұрын
Спасибо за видео, долго просидел над примером и не мог понять где ошибка. Я не разработчик С#, я разработчик С++ и конечно бы использовал std::atomic переменные, собственно я не смог найти ошибку, но в конце когда вы объяснили в чём ошибка, я понял, как я её избежал правильно используя C++.
@artorios5192
28 күн бұрын
Большое спасибо! Очень интересно и полезно) Буду пересматривать)
@xikkn
26 күн бұрын
продолжай, интересно слушать тебя, автор
@user-sz3fo3yc7g
27 күн бұрын
Молоток!! Давай еще!!! Контент в кайф! Дельно.
@user-mz2zb9cq9s
Ай бұрын
Классная видяшка. Нормально так знаний насыпали.
@wasd6461
28 күн бұрын
я один всё время смотрел на цветные треугольники в мониторе сзади ?
@u2bear377
28 күн бұрын
Кстати, да, отвлекают.
@MrCter
29 күн бұрын
динамические превьюшки к видео 😊 как мило... син-хро-ни.... 🙃 син-за-хро-ци-ни-я 😏
@mobilafilm
27 күн бұрын
Супер
@danielmilyutin9914
28 күн бұрын
Привет ИУ от ФН! В С++ есть lock_guard (их там несколько). Они помогают захватить ресурс один раз и отпускают его автоматически при выходе из блока. Принцип известный как RAII - resource aquisition is initialization. Поэтому не надо бояться забыть V. С точки зрения художественной. Я бы в начало и в конец добавил "Здравствуйте!" и "До встречи!". А то видео кончилось просто внезапными 3 секундами молчания.
@johnjohnson8818
27 күн бұрын
Это его фишечка.
@rkc137
Ай бұрын
куда делся флаг реактоса с фона 😭😭😭😭
@BeDb_MeDb
29 күн бұрын
Блин, круто)
@ARLX-yo1wr
29 күн бұрын
Класс!
@Kolemag
28 күн бұрын
Вот прям Factorio со своим дискретным принципом
@azerqgaming
29 күн бұрын
Спасибо за объяснение на языке c#, пробовал до этого Java, но .net мне больше понравился, сколько туда сейчас фишек завезли)
@MotorBorg
29 күн бұрын
Лучший клбеикйт, что я видел!
@melkiy582
28 күн бұрын
Согласен
@Lhander07
26 күн бұрын
Отличное видео! Привет с РК6)
@abragin
26 күн бұрын
Оо, РК! )
@Eustrop
29 күн бұрын
Интересно. Но я в этой теме ожидал в конце описания синхронизации между unix процессами через операции с файловой системой. Ну, чтобы показать, как в реальном мире приходится выкручиваться ;) P.S. За PDP-11 - отдельное спасибо! Сентиментальная слеза Катилась По Его Щеке.. 2024-03-29 10:38 UTC алгоритмам
@tree-service
29 күн бұрын
А если вместо монитора lock использовать?он тоже требует обьекта, коим каунтер не является, но можно создать произвольный объект в чем отличие от монитора?и как реализованы блокировки на субд,и если ли разница в операционных системах например мсскуэль на виндовс и на линукс и зависят ли от железа?
@MainEditor0
29 күн бұрын
Вы, как человек, знающий низкоуровневые основы программирования, можете ли сказать что-то по поводу развития ИИ, и может ли он в будущем заменить разработчиков?
@abragin
29 күн бұрын
Тут не получится сказать "да" или "нет". Во-первых, смотря насколько далёкое будущее. Во-вторых, смотря каких разработчиков. Быдлокодеров можно заменить хоть сейчас. А стоит задать ChatGPT нешаблонное задание, и оно ничего не сделает путного. Попробуйте попросить его написать парсер CSS на C# без использования сторонних библиотек. Будет ходить вокруг да около, предлагая классы с методами-заглушками. Тоже самое и с разработчиками. Те, кто способен делать нестандартные решения будут всегда нужны.
@MainEditor0
28 күн бұрын
@@abragin спасибо за ответ! Почему я спросил: на англоязычных форумах, посвящённых программированию, на реддите все время спрашивают про это и опасаются, а я, как студент IT направления, вследствие этого тоже стал задаваться таким вопросом и даже раздумывать "а там ли я учусь, хоть мне и нравится моё направление"
@alexlm2598
29 күн бұрын
в том примере что Вы в начале показали, со счетчиком, это не Race condition, а Data race. Разница в том что сделав операцию инкремента счетчика атомарной мы эту проблему решим, а при Race condition так не получится. Например если бы мы не инкрементили счетчик, а в каждом потоке присваивали ему некое значение, то даже защитив счетчик мютексом была бы недетерминированность из за того что неясно в какой очередности отработают потоки. Советую читать англоязычную Википедию, там это все достаточно подробно описано, зато в русской пол статьи про то как американцы налажали с этим Тераком))) А так спасибо за ролики, очень познавательно
@abragin
29 күн бұрын
Кстати про Терак, на самом деле 99% рассказчиков повторяют одно и тоже про пользовательскую сторону проблемы (ввели X, стёрли, ввели E, и т.п.) и отсутствие аппаратных интерлоков, а вот информацию конкретно про саму операционку, которая там работала, и про сами ошибки мне удалось найти только в официальных отчётах и немногочисленных других документах.
@abragin
29 күн бұрын
Про data race несомненно верно!
@ilovebobrov88
Ай бұрын
Вы прям по темам книжки Танненбаума по ОСям идете))
@broken_beyond_belief
29 күн бұрын
разве что танембаум показывает примеры на линуксовых pthread'ах на языке С. в видео примеры с кодом получше, но это имхо
@skybladeby
Ай бұрын
Этот взгляд в конце как бы говорит мне, что стоит вот такими штуками заниматься, а не тратить жизнь на ерунду :)
@AEF23C20
27 күн бұрын
в конце видосика про тред-берриер это не всегда так можно заюзать глобальную переменную в конце метода, а она volatile и фиг компилятор [и процессор] в методе чего переставит, но есть нюансы в интеле работает [и тоже есть нюансы, но их мало] а на авна-арме не работает [нюансов нет, на арме вменяемо ничего не работает, это же арм]
@mikhaililin3033
29 күн бұрын
Спасибо автору, очень интересный контент и хорошая подача, но возникла пара вопросов; Может ли возникнуть ситуация в которой несколько потоков ждущих разлок мутекса/семафора/другого примитива одновременно преодолеть вайл когда это произойдет? Они ведь вроде как друг от друга не зависят. И ещё, у всех примитивов в недостатках упоминается активное ожидание, значит есть варианты как без него обойтись и просто в видео нет?
@abragin
29 күн бұрын
Так это смотря про какой lock говорим. А активное ожидание - да, обойтись можно в том случае, когда ядро поддерживает такую блокировку на уровне планировщика. То есть ожидающему потоку вообще не будет выделяться учёт времени до тех пор, пока не подойдёт его очередь. Есть реализация семафоров без активного ожидания, например
@semenkovalev4988
Ай бұрын
А volitile поставить для переменных, которые используются в нескольких потоках? Оно же автоматически memory barrier создает и не дает кэш пробить. В данном примере, скорее всего пробитие кэша не сыграет, но в реальных случаях вполне. Про lock вместо голого Monitor тут уже писали.
@abragin
29 күн бұрын
Да, пойдёт! Надо было мне про этот способ сказать 😊
@bdick8136
29 күн бұрын
@@abraginЯ не особо знаком с C#, но в C++ volatile всего лишь говорит компилятору(процессору) читать данные из памяти, а не из кэшей. Это полезно для memory mapped io. Во многопотоке все равно нужны барьеры, т.к. никто не мешает другому потоку наломать дров так как volatile не делает доступ к этой переменной атомарной. В общем я бы эту глупость не рекомендовал юзать.
@artemzakharov8961
29 күн бұрын
@@bdick8136 Скорее всего завсисит от платформы, потому что в Java volatile даёт доступ напрямую из памяти процессора + ставит баръер
@RusLSystems
29 күн бұрын
В многопотоке всегда использую флаг проверки выполнения, причем в зависимости от задачи может быть как bool, так и int с указанием конкретного этапа. В некоторых ситуациях приходится использовать "по обе стороны".
@abragin
29 күн бұрын
А что значит флаг проверки выполнения?
@RusLSystems
29 күн бұрын
@@abragin Выделение любой переменной для конкретной задачи под операционку, либо reg - регистр для программирования непосредственно в железе.
@dr1n
28 күн бұрын
Выходит, что примитивы синхронизации в ОС используют активное ожидание? Т.е нагружают процессор проверкой флага? Есть ли механизм синхронизации основанный на планировщике потоков, например, поток не получает процессорного времени пока не получит сигнал, что можно входить в критическую секцию. Тем самым не нагружая процессор?
@TheMicstep
28 күн бұрын
В случаи Therac Там бал проблема что одну и ту же переменную использвали для хранения своих значений в разное время,считаю что по времени они не пересекуться
@abragin
27 күн бұрын
Напортачили, в общем
@BeDb_MeDb
29 күн бұрын
Кстати, не знаю как в C#, но вообще есть еще всякие atomic-типы/классы. Где-то гарантируется атомарное чтение/присвоение, а где-то даже простенькие операции. Но наверное да, это уже сахар всякий...
@Ssilki_V_Profile
29 күн бұрын
Удивило то, что в начале видео вы... специально моргнули. Отладка модуля имитации бессознательных людских рефлексов идёт своим чередом). Пауза в конце была коротковата на мой взгляд.
@jopawhand3190
25 күн бұрын
а вы лекции не будете выкладывать больше? интересно про архитектуру NT узнать
@abragin
25 күн бұрын
Планирую ещё много
@999poll
27 күн бұрын
Кажется я только что понял, что означает страшное слово "прерывания"
@evgur4
29 күн бұрын
Спасибо очень понятно объясняете , но я походу туповат и под конец уже потерял нить повествования😅
@YouSitePro
29 күн бұрын
В превью можно было написать СИН ЗА ХРО ЦИ НИ Я :D
@abragin
29 күн бұрын
Отличная идея, пробую!
@MSaidu-sj6vx
29 күн бұрын
О! Название для метода подсказал!
@u2bear377
29 күн бұрын
Звучит как название живого организма. "Cинзахроциния многопоточная"
@jopa19991
Ай бұрын
Ну на представленном примере монитор так себе освобождает от ошибок типа "забыл отпустить мьютекс" :) Всё равно нужно написать enter и leave. Тут скорее подошёл бы пример с C++ным unique_lock/scoped_lock
@semenkovalev4988
Ай бұрын
Согласен. В C# Monitor редко используется напрямую, как раз из-за возможных ошибок, описанных в видео. Для блокировки используется оператор lock, который содержит внутри себя перехват исключений и освобождает монитор в секции finally.
@user-hp7pc3lv3v
29 күн бұрын
Огонь. Но моргайте хоть иногда.
@tart_meidep
27 күн бұрын
все-так он человек. моргнул на 8:15
@homka122
27 күн бұрын
А не подскажите, пожалуйста, как вы добились этого эффекта на 4:48? Очень интересно выглядит. Что это за софт?
@abragin
27 күн бұрын
cool-retro-term, там куча различных настроек, можно по вкусу настраивать
@homka122
27 күн бұрын
@@abragin спасибо большое!
@non5309
19 күн бұрын
ставь лайк, если пришел с курса по многопоточному программированию!
@Vorono4ka
26 күн бұрын
Очень, нет. ОЧЕНЬ крутое видео!
@abragin
26 күн бұрын
Спасибо 😀
@user-sv3dc5nz8w
27 күн бұрын
volatile можно было Но в целом самому сделать - очень сложно, пользуйтесь апи ос через примитивы языка
@abragin
27 күн бұрын
Совершенно верно!
@Typeofundefined-mq8pj
29 күн бұрын
А зачем нужна атомарность если на момент когда мы начнем взаимодействие с ресурсом спинлок уже будет установлен?
@xibodohls9469
27 күн бұрын
Много неточностей. Например, что мешает забыть вызвать Monitor.Exit() в примере? Еще порядок исполнения инструкций меняет не только компилятор, но и процессор. Про работу памяти вообще ничего не сказано - пишем в одном потоке, когда запись видно в другом?
@abragin
27 күн бұрын
Про забыть вызвать - верно, это я про поддержку ключевых слов synchronized и lock имел в виду, а пример показал с явным вызовом. Про процессор так и сказал же: "а современные процессоры и среды выполнения типа dotnet..." 12:18. У потоков одно адресное пространство, когда пишем, тогда и видно.
@xibodohls9469
27 күн бұрын
да, про процессоры не услышал. прошу прощения. про видимость записи все таки не соглашусь. у разных платформ и языков по разному. на том же арме видимость записи гарантрирается только после барьера.
@awwarez
27 күн бұрын
Смотрю на некоторые алгоритмы и думаю, бедный процессор. Я бы применял бы эти локи, но в купе с паттерном Unit Of Work. Я понимаю что увеличение переменной на 1 из 2 потоков это абстрактный пример, но можно было бы увеличивать локальную переменную в потоке на 1, а каждые 100 итераций брать блокировку и увеличивать разделяемый ресурс на эту локальную переменную. После чего её сбрасывать, отпускать блокировку и продолжать.
@abragin
27 күн бұрын
Ну тут как в анекдоте, что плац лучше метлой подметать, но поставлена задача сделать это зубной щёткой
@sheffield85rus
22 күн бұрын
Скажите, ну похож ведь на Алекса Мёрфи из Робокопа?
@vechnonedovolen666
29 күн бұрын
Как правильно пишется этот 1:43 медицинский аппарат ?
@abragin
29 күн бұрын
Therac-25
@user-ch1df4fs8p
29 күн бұрын
"непонятные ошибки решаются непонятными методами"
@user-si3vc8my8t
25 күн бұрын
Класс! но звук "пш-пш"... напрягает...
@abragin
25 күн бұрын
Что за звук? Скажите таймкод послушать
@user-si3vc8my8t
25 күн бұрын
@@abragin весь ролик... шипящие свистящие прут)
@TheMicstep
27 күн бұрын
Автор ты не думал озвучивать антагонистов в фильмах?
@abragin
27 күн бұрын
Мне протагонисты больше нравятся
@brothers_pilots
27 күн бұрын
Почему, объясните мне почему. Я попадаюсь на это видео 3 раз, и тема мне интересна, все окей, но почему я читаю название как "мемы синхронизации..."
@leonardodavinci3737
29 күн бұрын
Джек Степлтон?!
@user-fu9ix6xh7x
23 күн бұрын
я в этом ни чего не понимаю но то что вы говорите чтото понимаю продолжение дорлжно не минуемо следовать
@albion_faults
28 күн бұрын
Подписался, очень круто
@baltasar9547
29 күн бұрын
Ух ты, про MemoryBarrier не подозревал, а это, оказывается важная штука, лайк
@user-ly6sv1zj7b
27 күн бұрын
Хорошо быть роботом
@abragin
27 күн бұрын
Мне тоже нравится
@krotov_play
Ай бұрын
Походу надо удалять весь мой код, и писать всё ядро с \0.
@AEF23C20
27 күн бұрын
ээээ... друзья! автор главного не сказал) это у автора уже предельная проф.деформация поток - это такая штука, за которой следить не нужно поток сделал что либо - и должен закрыться, всё! и поток не должен использовать разделяемые ресурсы, что бы это не значило
@UchebavGermanii
28 күн бұрын
Отличное видео и объяснение. Думал, что пример на C++, тк counter++; и хотел спросить зачем потоки стартовать, тк в STL C++ потоки стартуются сами в конструкторе после создания, но потом понял, что это C#😊
@pompei2
29 күн бұрын
Елси во всех словах лобгюо пеоенижлрдя лбгоюо язкыа мриа псиравтееть бувкы маемсти крмое пверой и пслднеоей, то пертионче отснсеатя таикм же пяытоннм как и рнеае, елси кеончно вы не оиртбтае на это вамнниие.
@u2bear377
28 күн бұрын
Это не работает прямо вот так "в лоб", на уровне букв. Приведённый текcт получилcя практичеcки нечитаемым.
@user-zd7oi5ko1b
28 күн бұрын
а asinc await в си нет? чё-т какой-то примитивный язык для программирования медицинского оборудования (шутка, я знаю, что сама операционка написана на си) :)
@Gengzu
27 күн бұрын
С таким голосом невозможно слушать
@kykyshka138
27 күн бұрын
Это всё хорошо, но очень старые подходы. Вот аккурат 60-х годов прошлого века. В окно смотрели? Там 2024 год уже. Синхронизацию данных в потоках так никто уже не делает лет 15 - 20.
Пікірлер: 128