Что Каждый Программист Должен Знать О Памяти. (с)
HTML-код
- Опубликовано: 16 июл 2021
- Разверните гибкий облачный сервер в Selectel: slc.tl/12OU9
Получите 1000 бонусных рублей по промокоду Winderton.
Что каждый программист должен знать о памяти? Ульрик Дриппер.
Это человек, который занимался разработкой GNU libc, и много чем другим, можете посмотреть тут(github.com/drepper).
В 2007 году он дропнул в сеть статью, где в 9 частях объяснил от А до Я, почему каждый должен понимать основные принципы работы всех уровней памяти, начиная от железа, вплоть до инструментов профайлинга этой самой памяти.
В видео вы увидите бриф и раш через все эти части, где с отражением моей лепты и моего уровня, я постараюсь замотивировать вас наконец-то разобраться с этим материалом.
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Подпишись сюда, бро:
Telega и чатик - t.me/wndtn
Boosty(менторинг для РФ) - boosty.to/wndtn
Patreon(для остальных стран) - / winderton
Instagram - / winderton
Github проекта(код с канала) - github.com/winderton
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Предыдущие видео:
git - • Video
Изучение Нового Языка - www.youtube.com/watch?v=891Fi...
Сериализация - www.youtube.com/watch?v=xWTCU...
Репозиторий с кодом: github.com/Winderton/xplatform
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Ресурсы:
Сама статья: lwn.net/Articles/250967/
Книга Андерсона: Operating Systems. Principles & Practice
Фабьян: • Rambling talk about CP...
Скота Майерс: • code::dive conference ...
Майк Эктон: • CppCon 2014: Mike Acto...
Железо от Карнеги Мелона: • Computer Architecture ...
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Оборудование:
Камера - Sony a7ii
Объектив - SIgma F1.4 DG
Микрофон - AudioTechnica at2035
Звуковая карта - Scarlett Solo
Петличка - Rode smartlav+
Клавиатура - HyperX Alloy
Вторая клавиатура - apple magic keyboard(black edition)
Монитор DELL 25'
Монитор Asus mg248q
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
15 Августа розыгрыш моего МакБук про.
Условия изи:
Лайк + подписка тут( / winderton )
подробности под последними постами в инсте.
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Музыка:
₪ jetson - catch me outside
C Y G N - Color Shade
eevee - lost found [2QQ3] Rare
Karma Rhythm - sea shells (with goosetaf)
kloudbug - MMs FOR BREAKFAST w Inteus
PUAR - In The Rough [ phonk vaportrap ]
SOUDIERE - NUMB
kloudbug - MMs FOR BREAKFAST w Inteus
Ребзя, кто досмотрит до конца, напишите коммент под этим комментом. Вас мало будет, хочу примерно знать кто осилил вообще.
Пис
13:02 добавление чего? Я уже на разной скорости этот фрагмент пытался расслышать
Boolean
@@wndtn сяп
Много и сложно у Таненбаума)
+1 комментарий под комментарием Winderton'a
Даёшь больше таких фундаментальных видео! Очень круто)
Вин, го след видос про рендеринг
Мне 45, лет 5 уже периодически сую свой нос в уроки по программированию, как правило безуспешно , потому что весь контент на ютубе о том как писать какую то фигню по уроку и никто не показывает практического применения данным урокам, ты чувак как минимум показываешь как это работает, по чему и для чего (немного конечно сумбурно , но не суть=) ). смотрю сейчас твой стрим и хочу тебе сказать что изи контент нужен, нужны эти основы. я вес плей лист основ за 2 вечера пересмотрел взахлеб. спасибо тебе за твой труд.
Все очень просто не смотри видео , а больше практики , книг и ручной работы в тетради и клавиатуре =)
Не зря в универе разделили Computer Sciense и само программирование ...
Если хочешь знать что внутри начни с СИ , потом Ассемблер .... если не хочешь знать , выбирай то что нравится или то что хочешь делать ))
Симпл код - такой канал. Поймет и сможет любой
глупая отмазка
@@user-bl2xu2uz8e о дааааа - ООП зашло как родное именно после Simple Code
Приятное обзорное видео, после которого в голове остаются какие-то термины, небольшое представление о том как устроена память и о некоторых ключевых вопросах. Такие видео очень вдохновляют!! Спасибо за обзор!
Возвращение к истокам. Спасибо за годный контент!
Спасибо за видео, я еще очень далек от программирования но было интересно послушать!
Ваши видео выхывают просто взрыв мозга! Жду с нетерпением новые видео!
Будьте добры помедленней, я записываю. Хороший материал, но пересматривал три раза чтобы все услышать.
Спасибо за статью, пойду изучать!
Слушай, товарищ! Это ж надо так гореть, чтоб делать и снимать подобные видео, требующие просто гигантской проработки?! Мой всемерный респект!!! Практически весь контент на канале крайне интересен и порой просто укладывает и систематизирует знания в голове, а порой заставляет напрягать извилины и подробно ковыряться в вопросах. 👍👍
Спасибо, Вин!
Как всегда, завёз достойно и интересно.
Ваяяяя, HOTZ. Где - то есть видео, где он говорит, какие языки дожен знать тру разраб, и там АСМ, СИ и Питох. Тоже такой токсичный чувак, но крутой. Рад что видосы длинее становятся. С аперкота в лайк всадил.
Нерд-культуру в массы!
Спасибо большое, Вин! На мой взгляд чутка сложновато, ну это скорее всего потому что я тупой джавастриптизер :)
Просмотрел полностю. Очень интересно.
Теперь эта статья не кажется такой сложной и непостижимой, обожаю изучать low level, хоть хз пригодится ли он, но статью теперь точно почитаю, хотя бы первые 3 и 5ю главы.
P.S спс за наводку на книжку по ос)
А ты в какой ветки движешься? Геймдев, веб?
@@prana6854 бэк, также хочу лоу лвл знать, может чтобы в будущем не на реакте писать, а сам реакт писать, тип того
Понравилось видео, всё доступно и понятно
Хорошая шутка
Офигенно. Репост есть!
Около года назад читал по твоей же рекомендации)
Полезный видос, помог закрепить некоторые моменты
сначала думаю 20 мин это много для видео, включил и залип чисто, топ контент, не особо релевантен для меня, но что-то с этого вынести просмотревший обязан
Ууууу сука, та самая статья, которая которая заставит человека чувствовать себя тупым. Раз 6 читал этот пиздец. не дочитал. Но с каждым разом дальше и дальше захожу
Много что нового для себя узнаю!
Amazing! Very interesting! Thank you so much!
У меня 🧠 вскипел.
Как всегда информативно и полезно.
Спасибо за видос!
thank you for stream and this video :)
Спасибо за промокод)
ЭЭЭЭЭ ни чего не понятно но очень интересно:) почувствовал себя первоклассником на паре в ВУЗе. :) Если Автор решится создать видео про "Магию преобразования эл.энергии в картинку на мониторе на языке Чайников" со всеми переходами от блока питания до видеокарты с пояснением процессов проистекающих внутри - это был бы бестселлер как минимум:))))
страшно представить хронометраж учитывая кол-во необходимых знаний как по физике так и по информатике логике там чтобы досконально понять как одни только транзисторы работают надо порядком рассказать про все что только можно
Спасибо за сипок рекомендованой литературы
^_^
Иногда ты делаешь вещи!
Просто лучший материал и спасибо за ссылки на оригинальные статьи.
Такое чувство ,что смотрю в 1,25
При монтировании скорость увеличил прост
А у меня после старых его видео ощущение что смотрю в 0.75-0.5xx
знакомьтесь, так говорят нормальные люди, а не типичные мямли-блохеры
Ухх, за вставку Hotz'a отдельное спасибо, смотрю его стримы, ничего не понимаю, но чувствую себя богом😀
А ты сам лично в каком направлении двигаешься?
Классное видео, спасибо!
Спасибо за видео
Хотелось бы полный разбор всех затронутых моментов, которые оказались не актуальными или устаревшими
Супер, спасибо
Ура, классный видос!
Основной запрос энтерпрайс рынка - контейнеризированные сервисы с изолированным запуском - заточенные под работу с redis, kafka, postgresql, есть небольшая претензия на ARM в перспективе (тот же .Net 5), негласный запрет на использование AVX и любых X64 напрямую (у нас же много агентов в кластере и хз каким может оказаться железо, на которое переедет ваш сервис после очередного OutOfMemoryException)
Он жив!!!
насколько же ничтожным себя ощущаешь, с одной стороны это конечно круто, но все равно, жутко становится от объема информации и необратимости того факта, что разобраться в этом всем - очень и очень смелая идея.
А я, знаешь, работаю программистом, но когда вижу компьютеры, поезда, автомобили, думаю, как вообще можно было это придумать и сделать? А заканчивал я физфак теоретическую физику. Ничего уже не помню, восхищаюсь людьми, которые что-то могут сделать сами.
@@user-zy3lg2yv4d красивое описание современной сферы разработки)
А может это и здорово, что абстракции построены настолько хорошо, что благодаря этому тебе, за редкими исключениями, и не надо знать об них. И только благодаря хорошим абстракциям мы можем строить большие приложения
+
На самом деле там не так всё и сложно, как кажется на первый взгляд.
Помню, когда на неких курсах в учебном центре в 7 классе учился прогать на паскале. И тогда я был уверен, что при объявлении переменной под не выделяется место на жëстком диске.
Да, память - это тема для изучения на следующие 100 лет)
Отличный контент!
"Местовую" локальность можно назвать "пространственной". Спасибо за видео!
Чем больше изучаю программирование - тем больше понимаю, что оно не для всех. Мне даётся относительно легко, чему безумно рад. Автору спасибо за видео, познавательное и даёт ответы на многие вопросы. Комментарий для продвижения.
Блики на челах просто топ 😁😁😁
14:00
Огнище 🔥
в 2031 может и до "Как писать разделяемые библиотеки" доедем
Хорошее содержание и форма подачи спасибо. А визуал ролика супер!
вот этот умный чувак из ютуба, который обьяснит мне как программировать
Да, по поводу NUMA. Там все очень просто. На многопроцессорных системах у каждого процессора есть "своя" память. То есть память которая напрямую связана с конкретным процессором. Но процессоры не лишены возможности обращаться к памяти друг-друга по общей шине. Так вот такое взаимодействие более дорогое, чем поход за данными в свою память. Очень простыми словами NUMA - это (CPU+ своя RAM). На практике расположение данных в своей памяти позволяет значительно снизить задержки.
♪ Hit or miss ♪
♪ I guess they never miss, huh? ♪
Ничего не понял, но за ссылку на статью спасибо.
Найс контент чел.
Как всегда спасибо! Очень хотелось бы видео о том, как работает рендер =)
Уже 3-я минута идёт но пока бла бла бла но спасибо за труд
Несколько раз проверил скорость воспроизведения ))
Думал смотрю на 1.25, инфа наваливается конкретно )
Очень крутое видео для старта. Особая благодарность за книги и отсылки к другим роликам.
Может быть стоило сказать про "Вы просто время своем зря потратите"(14:03) на ещё в самом начале ролика? 😅
Спасибо-спасибо
Бро спасибо тебе за контент, у тебя свой стиль, но ты говоришь
О очень многих полезных вещах
Отлично!
видео стиииль, давай стрим дядя
давай видео практические применения в веб как для бэкенд так и фронтэнд. Желательно на NodeJS, React, Python
Видео достаточно познавательное, даже для тех, кто как я, совершенно не шарит в этом)
13:00 еще не рассказал про Meltdown уязвимость в процессорах Intel
Очень хочется побольше таких видосов, в таком формате. Сразу вспоминается время, когда я только тебя нашел (и начинал программировать сам) и гуглил термины каждые 5 сек, что, наверное, и определило мой интерес к подомному лоу-лвлу и вдохновило на изучение основ.
С тех пор начитался Грегори и Танненбаума и этот видос прошел на одном дыхании. Пожалуйста, не останавливайся
Ты сейчас в какой сфере варишься?
Спасибо
Ну блин самую интересную часть скипнул, прям на глазах! А как же дуал сокеты на зеонах?! Что как не народная сборка? Эх.
Здравствуйте, скажите пожалуйста что вы думаете про c#?
Ничего не понял, но было весьма интересно. Хочу сделать свой игровой движок (возможно на Линукс), а оптимизацию я обожаю. Вспоминая свои первые дни обучения, когда я везде и всюду использовал тип integer, сам на себя фейспалм делаю, осознавая, как я разбазаривал памятью. Про очистку мусора тоже недавно узнал. Да я и до сих пор не являюсь программистом, но если стану, то обязательно учту такие вещи. А насчёт невозможности сделать быстрое ОЗУ не совсем согласен, дело в том что технологии развиваются семимильными шагами, а в будущем рано или поздно появятся новшества, например, оптические технологии, после их внедрения супер-пупер мощные блоки питания и массивные кулеры канут в лету, а раз так, то можно и слабые источники питания можно будет применять, например, стронциевые батареи или на базе других элементов, срок службы которых пропорционален периоду полураспада, а значит на одной батарее ПК будет работать хоть столетия если это потребуется.
Спасибо .
Некоторая критика:
1)Мне кажется, Виндертон просто не понимает, что имеют ввиду, когда говорят "закидаем железом", потому что чаще всего это говорят в контексте backend-приложений, где ботлнеком будет БД, а железом мы будем масштабировать сервера, а не пытаться увеличить скорость доступа куда-либо.
2) MMU ничего не делает для процессов, она даже о них не знает, все, что она делает - это переводит виртуальные адреса в физические
3) Вообще можно писать instruction cache friendly код, например, убирать if-statements(Плюс это избавит от необходимости branch prediction'а), инлайнить функции, table lookup, в общем все, что избавляет от релоадинга кэша инструкций
4) Второй тип людей не отрицает первых, редис тоже полезно знать как поднять, как он работает, как его конфигурировать, при чем скорее о редисе ты будешь знать больше, так как он необходим тебе для решения задачи, а знания CS будут нужны, что бы понять, как редис работает, как следствие, сделать все правильно.
1. Не брат, я неоднократно слышал вбросы, по типу, «больше материи».
Приведи пример ботлнека с бд, у меня с этим опыта мало. Интересно почитать. Мне твои комменты нравятся.
Типа, у людей, которые против оптимизации и дырочки Лоу-левела в голове то, что даже если у тебя лимиты по tp, lat и bw(в контексте сети), то просто кабеля потолще делайте. Понимаешь?
Я в видео коцепт мысли подчеркнул, сказав что люди просто говорят, «зачем дрочить перформанс критические моменты, если железо в целом мощнее, и можно покупать его больше». В голове то, что 1ghz +256ram решают проблему за 10ms, а 2ghz+512ram решат за 5. Я попытался донести что все гораздо шире и сложнее.
2. Я это и сказал, нет? Он же по сути как и ALU, основное время в instruction execute проводит.
Как вообще ты мог подумать, что я думаю, что что-то в процессоре знает про такие хай левел обертки как процесс. Не понимаю тут критики, слишком предвзято.
3. Поэтому и берём всегда в сравнение С. Ветвления убирать - это так себе идея, но тот уже branch prediction решает вопросы. Сложная штука, я ещё в ней не разобрался до удовлетворительного статуса.
4. Это тоже было концептом, и ты будь то придираешься. Очевидно, что ты пользуешься инструментами, тот же яп, и изучаешь теорию компиляторов, чтобы лучше понимать что происходит. Посыл был в том, что вторая группа людей ищет онли маркетбл навыки, без желания изучать основы(этого же нет в вакансии), и вещи, которые помогают открыть «не только входную дверь, но и остальные».
@@wndtn 1. Не, ну дебилов везде много, просто, когда какой-нибудь Умпутун говорит, что "железом закидаем", то имеет в виду имеено это.
2. Ну просто ты на 10:30 и сказал, что MMU делает иллюзия бесконечной памяти для процессов, на самом деле, много нынче людей думают, что MMU делает какую-то магия, очень простая штука, на самом деле, но я не думаю, что ты этого не знаешь, просто для людей, которые не в курсе не очень хороший способ объяснить, как мне кажется.
3. Ну, вообще, убирать ветвления - ни то, что бы плохая идея, если тебе нужен производительный код(Так как prediction основывается исключительно на адресе текущей инструкции и некоторой истории, которая хранится BTB, поэтому уменьшение количества ветветвления даст BTB-friendly код, если так можно сказать), но здесь нужно смотреть на BTB твоего процессора, конечно.
4. Ну да, есть художники, а есть маляры, и ничего плохого в малярах нет, но я даже не совсем об этом, мне просто не нравится твой посыл, что вот есть сишники и плюсовики, они шарят, они молодцы, а есть "другие", которые занимаются элементарной херней. Ты недавно на стриме говорил, что вот джава со спрингом - это ужас и мрак, спецы там делают какие-то лоускильные вещи, при этом, видимо, даже не разобравшись в этом, спринг - это просто контейнер внедрения зависимостей, всё, я вот работаю спринг-девелопером, у нас любой бэкэнд разраб знает, что такое branch prediction, да, мы не заботимся о том, что бы в кеш влезть, потому что все равно боттленеком будет сеть, но нам нужно это знать, что бы понимать, что вообще происходит. То, что тебе на твоем жизненном пути попалась какая-то херовая работа на джаве - это не причина теперь говорить так про все, потому что такие же галеры могут быть и на плюсах и особенно на си. В Нетфликсе вот не особо жалуются, что у них весь core на спринге написан. Хотя может я просто неправильно понял, пис.
Вин, а сделаешь видео про многопоточность?
Ох, многопоточность.... Когда мне нужно было быстро общитывать матрицы в много потоки и многаГИГА ОЗУ я начал изучать SSE, AVX и реализовал некторый функционал. И какая же фак была, когда я уперся в пропускную скорость ОЗУ. Проц тупо быстрее перемножал матрици чем чтение\запись ОЗУ. Второй проблемой было это синхронизация многопоточных вычислений. Я по правде так и не нашел как грамотно реализовать синхронизацию паралелизма на много потоке как на ЦПЮ так и на ГПЮ, пока отложил на чуть позже, сейчас больше самими нейросетями занят. Но мысль о времени, когда придется писать обработку большого объема даных во все щели и ЦПЮ и ГПЮ и еще и туда сюда это гонять, немного пугает. А шо там с ЭКЗО флопными супер компами, я вообще не предсавля как там организванна сестема даных. Мое имхо, врут они про экзафлопы. В нейросетях, где каждая ячейка напрямую связана с другой ячейкой все тупо ограничет ПСП и хоть сто мильйнов процесоров, если обмен даных не будет совершен с надлежащй скоростью, все до жопы
9:36 пространственная
Ради Лайка зашел
Поправка насчет таргетной платформы по статистическим данным Steam: Steam, пускай и является основной статистикой по используемому железу в мире, собирает данные с, как правило, геймеров. Т.е. мы не учитываем людей, которые не относятся к игрокам. Плюс, юзер сам решает будет он отправлять информацию о своем железе или нет, что еще сильнее снижает выборку.
Вроде по дефолту она включена, нет?
Не являюсь специалистом, но хочу придраться к фразе. "Атомарные операции на CISC-микроархитектурах не поддерживаются...давно не так...кому интересен ARM". Так ведь ARM не CISC, а RISC архитектура (Advanced RISC Machines) (Возможно в предложении был акцент на другом и я неправильно понял).
Также по отдельным кэшам для инструкци и данным. Это всё борьба гарвардской и фон-неймановской архитектуры. На Вики русской есть статья по Гарвардской арзитектуре и там подраздел "Гибридные модификации с архитектурой фон Неймана" делает причину разделения немного понятнее.
работаю с JS(React) зашел сюда, что бы убедиться, что пишу на гавноязыке... лайк за старание
видео в формате RUSSIA
Спасибо за ролик! И за то что объяснил что путь в программирования нужно начинать с железа - понимания работы компьютера и т. п., проще говоря с цифровых технологий и радиоэлектроники. В основном все говорят наоборот.
Советую книги Столярова "Программирование - введение в профессию". Несмотря на название, узнаете много нового, уверен.
@@user-zy3lg2yv4d Спасибо!
В какой компании ты работаешь? Если это не секрет
Что за трек в начале видео?
Камбек? институт репутации как известно в России не работает
Полураспад клеветы быстрый
А что за история?
Это видео больше просто "упоминание", чем какой-то поверхностный разбор из-за чего новички будут хвататься за волосы, а те кто уже в курсе, просто закрепят(вспомнят).
Увидел в этом ролике упоминание о cache и предвкушал, что будет показан какой-нибудь инструмент по отслеживанию cache hit / miss. Но увы... Долго ищу какое-нибудь решение, чтобы наглядно отслеживать такие данные, но пока так и не нашел. Находил упоминание под MIPS процессоры, что при спец. правах доступа можно включить встроенный профайлер (счетчик cache hit / miss) прямо из под процессора, но пока так и не нашел особой конкретики как это сделать.
По поводу 18:27 мб под x86 это так, но тестировал одно устройство на MIPS и порядок вертикаль > горизонталь давало меньше задержек.
удивительно, но я целиком понимаю, казалось бы, хаотичный ход мыслей автора. И его опыт очень сильно похож на мой
спасибо
Мне нужно разобраться прочитать по кэшу
Молодец
Насчёт steam survey, в основном те кто зарегистрирован на стим у них будет стоять винда(игровой пк), так как стим это игровая платформа, и аж никак не поиграешь на маке или линуксе. Поэтому данные в глобальной интернете будут разняться.Ведь стим берет инфу у тех, кто уже зареган, а не у независомых пк юзеров.
С инсты привет!
Снимаю шляпу. Парадокс, но чем сложнее термины, тем интереснее в них разбираться и откапывать простые истины. Вселенская благодарность за материал, кто считает его бесполезным - сам себе злобный Буратин
Для изучения Computer Science лучше Windows или btw, i use arch?
i use arch, btw
На х2 самое то
Как же хорошо что моя специальность больше связана с дата сайнсом. Я думаю если сидеть разбираться с этим всем уйдет не один месяц
Можешь рассказать что делать, если в Vs коомпилирую файл .cpp и .h, прилетает ошибка"файл не найден и директория где ищет компилятор". Что делать? На stack пишут f7 , но не работает
Разобрался?
Thanks
"Наверняка вы все слышали, что такое memory mappings" так же я, который впервые слышит данные слова xD