Как на самом деле устроен тип Map в Golang? | Golang под капотом

Как на самом деле устроен тип Map в Golang? | Golang под капотом

105,409 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

@Mothy-chan
@Mothy-chan - 18.03.2025 10:02

привет от GO 1.24.0, даёш видео по map_swiss.go и swiss tables

Ответить
@ПироговДанила
@ПироговДанила - 17.03.2025 19:43

Нужно теперь новое видео, с разбором новой мапы)

Ответить
@DevToLead
@DevToLead - 01.03.2025 12:58

Николай, вышли новый мапы) надо бы обновить контент)

Ответить
@dmvitaly1
@dmvitaly1 - 25.02.2025 13:04

сортировка мапы в принтлн это сильно

Ответить
@chethelesser
@chethelesser - 17.02.2025 17:34

теперь нужно новое видео про swiss table :)

Ответить
@nickelakov6401
@nickelakov6401 - 09.02.2025 18:59

Очень круто и интересно! Николай, спасибо!

Ответить
@MrLotrus
@MrLotrus - 07.12.2024 11:10

Уже который раз пересматриваю видео для того чтобы освежить в памяти. Классика )

Ответить
@obereg2282
@obereg2282 - 02.12.2024 13:46

Пересмотрел 2 раза, и ещё пол раза по непонятным моментам. Остались непонятными три вещи:
- HOB хранятся в массиве структуры бакета, или это восемь разных полей в структуры бакета?
- Что произойдёт, если эвакуация не завершена, а лоад фактор для новых бакетов равен 6.5? Мы создаём опять новую область памяти и будем смотреть Бакеты уже в трёх картах?

Ответить
@swxxx_44
@swxxx_44 - 24.11.2024 17:38

Крутое видео! Очень крутой контент, но хотелось бы еще одно видео по map, попроще, на подобии твоего видео про slice. То видео прям вообще огонь! Продолжай снимать лучший контент )

Ответить
@CultureofSpeech
@CultureofSpeech - 13.11.2024 23:56

Чудесно звучит 🎉 а когда будет продолжение этой темы разговора

Ответить
@soundcloudlover
@soundcloudlover - 24.10.2024 21:32

непонятно насчёт того, почему нельзя брать ссылку на значение в мапе. понятно, что данные переносятся, но ведь в слайсе при len == cap данные тоже уходят в другое место? почему там можно

Ответить
@AAAaaa-i9p3o
@AAAaaa-i9p3o - 24.10.2024 17:42

Здравствуйте! Подскажите, как можно открыть описательную структуру мапы? Или к примеру канала?

Ответить
@buginsystem8925
@buginsystem8925 - 03.10.2024 22:28

Выходит, если HOB запрошенного ключа соответствует какому-либо HOB в бакете, то мы переходим к соответствующему ключу в бакете и сравниваем его с запрошенным. Если они не равны, сравниваем HOBы дальше

Ответить
@cucumber2329
@cucumber2329 - 27.09.2024 12:28

но ведь если у нас увеличивается количество элементов в мапе, увеличивается и количество бакетов, а бакеты мы тоже должны же как-то находить? если перебором, то время выполнения тем больше, чем больше кол-во бакетов

Ответить
@last2636
@last2636 - 20.08.2024 20:51

Спасибоз за крутой видос по мапам)

Ответить
@b33blebrox
@b33blebrox - 15.08.2024 19:58

Небольшое замечание - alignment делается не для экономии памяти, а для быстродействия. На большинстве современных процессоров доступ к сложным (более одного байта) значениям в памяти будет быстрее, если расположить эти данные по "круглым" адресам

Ответить
@АлександрАверкиев-и9л
@АлександрАверкиев-и9л - 15.07.2024 12:36

сколько байт занимают high order bits? От чего это зависит? Зависит ли это от количества бакетов?

Ответить
@АлександрВасильев-в1е
@АлександрВасильев-в1е - 07.07.2024 12:42

Отличный обзор, Николай. Все разобрано по кирпичикам, очень легко и доступно воспринимается довольно таки сложная тема. Безграничный респект!

Ответить
@travisbickle7260
@travisbickle7260 - 02.07.2024 17:50

порекомендуйте, пожалуйста, видео по мапам попроще. Я уже разобрался с примитивными типами, ссылками, разыменовыванием слайсами.

Но как работают мапы и для чего не могу понять. Мне порекомендовали этот видос. Вижу, что тут крутая структурированная подача, но все равно я еще не на том уровне, чтобы понять это.

Ответить
@skamplettdn5552
@skamplettdn5552 - 27.06.2024 16:05

Спасибо за информацию, завтра попробую под справочник (map) выделить сразу 3000 элементов. Одна из моих программ анализирует Excel-файлы, и на их основе заполняет map. Зачастую в map попадает более 1000 и даже 2000 значений. В моей map содержится справочник работников одного из подразделений с ключом по табельному номеру.
Если получится добиться повышения производительности - буду думать над другим проектом, где ключами является совокупность идентификаторов (3), а сама система работает со всеми работниками всех подразделений, которых может более 10 тысяч (работников, конечно).

Ответить
@almassagyndyk4707
@almassagyndyk4707 - 08.05.2024 05:24

Получается если алоцировать Мапу с длинной равной 2 у нас в структуре мапы будет один бакет?

Ответить
@ПолинаЗолотова-щ2о
@ПолинаЗолотова-щ2о - 06.05.2024 15:19

А про выравнивание типов нет видео еще? Было бы интересно посмотреть

Ответить
@alexricher2554
@alexricher2554 - 04.05.2024 16:47

Антоха МС решил не останавливаться на построении муз карьере и решил строить карьеру в IT на гошке. Лайк этому трудяге

Ответить
@Андрюхаслазерки
@Андрюхаслазерки - 30.04.2024 00:55

Лайк поставил. Интересно. GO!!!

Ответить
@dshyryayev
@dshyryayev - 23.04.2024 04:28

Super!!!

Ответить
@АндрейФедосов-и5й
@АндрейФедосов-и5й - 19.04.2024 18:18

Ну мужиик 👍!! Спасибо огромное за видео!

Ответить
@ЕкатеринаГольцова-о8р
@ЕкатеринаГольцова-о8р - 15.04.2024 17:55

Лучшее видео про map! Спасибо)

Ответить
@bakelev
@bakelev - 18.03.2024 22:03

Спасибо за труд. Хорошо объясняешь. Ждем продолжения

Ответить
@artemkashipov9865
@artemkashipov9865 - 08.03.2024 19:55

Там не совсем в два раза увеличение происходит при эвакуации бакетов. Там вроде как специальная формула есть, которая меняется в зависимости от текущего размера

Ответить
@elvirakharunova1589
@elvirakharunova1589 - 20.02.2024 12:43

Спасибо огромное за такое подробное и подкрепленное исходным кодом объяснение! :) Ждем видео о том, как устроены типы данных в Go! :) Это будет просто пушка :)

Ответить
@vladimirsaraikin6888
@vladimirsaraikin6888 - 04.01.2024 12:06

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

Ответить
@liz2k
@liz2k - 29.12.2023 12:03

Спасибо большое за все эти уроки по ГО. Я очень люблю Low-Level понимание процессов и на каждом видео получил необычайное удовольствие.
Этот материал как раз тот, которого мне не хватало чтобы начать работать с ГО. (я не новичок и мне просто не хватало хорошего материала которые разъясняет все эти нюансы)

Ответить
@TaranKonstantin
@TaranKonstantin - 28.12.2023 16:31

Спасибо за видео, очень доступно.
Возникает вопрос, если мы создаем мапу make(map[string]int, 10) можем ли мы быть уверены что положив туда 10 элементов точно не произойдет выделения доп памяти и эвакуации данных? По идеи не можем, ведь возможны коллизии и теоретически все эти 10 элементов могут указывать на 1 бакет. Поэтому не очень понятно что именно происходит когда указываем конкретный размер мапы в make()?

Ответить
@АмирланМухитдинов-д9з
@АмирланМухитдинов-д9з - 20.12.2023 14:54

будет такое же видео об интерфейсах, сборщике мусора, горутинах?

Ответить
@batpyiiikob7245
@batpyiiikob7245 - 06.12.2023 23:15

Человечище!

Ответить
@IT_psychopath
@IT_psychopath - 10.11.2023 11:07

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

Ответить
@ide9827
@ide9827 - 03.11.2023 13:28

Николай красавец вперед дерзай

Ответить
@ВалдисПельш-е4в
@ВалдисПельш-е4в - 30.10.2023 23:31

Спасибо за видео. Но для меня некоторые места остались темными.
1. когда вычисляется lob то количество бит равно логарифму от количества бакетов. А если количество бакетов не равно степени двойки, то не будет однозначного соответствия между бакетами и значениями lob. Нет ли такого, что внутри поддерживается что количество бакетов всегда равно степени двойки, и если мы делаем make(m[int]int, 1000) то бакетов будет 1024?
2. Не очень понятно как происходит эвакуация. Допустим коэффициент заполнения стал больше 6.5 мы алоцировали новую мапу с количеством бакетов в два раза большим. Теперь у нас есть операции получения, удаления, вставки (которая может быть просто перезаписью) и итерации по мепе. окей, если это не итерация, то можно сходит в две мепы и сделать все что нужно. Потом после нескольких таких операций происходит итерация по мепе, и вот тут вообще не понятно что происходит. часть данных эвакуировалось, а часть нет, но также у нас могли быть новые значения, которые нет в старой мепе.

Ответить
@daniyarkhairutdinov5275
@daniyarkhairutdinov5275 - 21.10.2023 05:32

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

Ответить
@naneri
@naneri - 07.10.2023 18:59

Думал - чо такое длинное видео, на 34 минуты. Так его еще и на 0.75 пришлось смотреть, чтобы не потерять суть.

Ответить
@vladtokarev146
@vladtokarev146 - 07.10.2023 17:21

Отличный канал бро, уже на третьем видео залипаю

Ответить
@_uncle_bob_
@_uncle_bob_ - 01.10.2023 19:02

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

Ответить
@tigranrostomyan9231
@tigranrostomyan9231 - 21.08.2023 15:11

Невероятно. Огромное спасибо!!

Ответить
@AndriiKuftachov
@AndriiKuftachov - 06.08.2023 22:24

Супер!!!

Ответить