14. JAVA. Memory Model | Технострим
HTML-код
- Опубликовано: 12 сен 2024
- «Технотрек Mail.ru Group» при МФТИ.
Курс «Разработка на Java».
Лекция №14: Memory model.
Лектор: Дмитрий Архангельский.
Цель курса - создание рабочего приложения, получение необходимых навыков и опыта в области разработки программного обеспечения. По окончании курса студенты должны знать синтаксис и основные библиотеки языка Java, понимать объектно-ориентированный подход, уметь декомпозировать сложные задачи.
Получаемые навыки:
• основные конструкции языка, объекты и классы;
• ввод и вывод в Java - консольный, файловый, сетевой;
• интерфейсы и абстрактные классы, анонимные классы;
• лямбда-функции;
• сетевое взаимодействие, сокеты;
• механизм исключений;
• проверяемые и непроверяемые исключения;
• потоки - жизненный цикл, прерывание;
• критическая секция;
• проблемы взаимодействия (дедлок);
• механизм wait/notify, блокирующие очереди producer/consumer;
• коллекции, выбор структуры данных, подходящей для задачи;
• параметризованные коллекции;
• параметризация в Java.
Смотрите также:
•Другие лекции этого курса: bit.ly/1QUmj1W
•Курс «Основы мобильной разработки»: bit.ly/1LYYV6w
• Курс «Основы веб-разработки»: bit.ly/1RWWKQb
VK Team - это миллион возможностей проявить себя. Мы делаем современные и быстрые интернет-сервисы, доступные каждому. На этом канале делимся опытом компании VK, рассказываем о технологиях, наших образовательных проектах и жизни команды.
😎 Сообщество ВКонтакте: vkteam
👨🎓 VK Образование: education.vk.c...
🏆 Чемпионаты: cups.online/
👨💻 Карьера в VK: team.vk.company/
Крутая лекция, спасибо!
Разве возможен реордеринг в ситуации
r2 = B
B = 1
? (5:45)
если бы в одном потоке выполнялся код
A=1
B=1
r1 = A
r2 = B
То да - мы не могли бы сказать наверняка что произойдёт раньше - запись в r1 или в r2 и тогда поток
Thread2 { if(r2==1) assert r1 == 1 } мог бы упасть.
но первый случай даже с учетом абстракции выглядит странно
Reordering в данном случае действительно выглядит странно. Можно предположить, что должно было быть
t1 -> [r1 = A; B = 1]
t2 -> [r2 = B; A = 1]
Конечно не возможен, эти операции всегда будут в том порядке, в котором они идут. Вот если было бы:
r2 = A
B = 1
тогда реордеринг мог бы быть
Так вы дальше смотрели? Я дико проорал, когда он опроверг реордеринг в первом примере, объясняя hb на 13 минуте.
@@kenshin45736 опечатался в примере наверное
как-то коротко получилось. как-будто не хватает части ₽лекции
Спасибо, одна из самых понятных лекций про java memory model!
закон мура о процессорах и количестве транзисторов, а не о скорости доступа к памяти. The Free Lunch Is Over - о том, что закон мура перестаёт работать и основной буст будет за счёт параллелизма. там нет ни слова о памяти и скорости доступа к ней. такое ощущение, что автор не достаточно хорошо ознакомился с предметной областью.
В примере Singleton нужно добавить ключевое слово "volatile" к переменной?
"volatile static KeeperSingle instance;"
И зачем ? Мне сложно придумать аргумент за добавление volatile.
PreVet *При использовании многопоточности: я читал, что может не обновиться значение переменной. И слово volatile гарантирует порядок. Поэтому спросил.
Синглетон подразумевает, что ссылка на экземпляр класса будет создана при первом запросе на получение синглетона и в дальнейшем не будет модифицироваться. Если кто-то решит ее закешировать, то никакие изменения не должны пройти мимо, т.к. грубо говоря, адрес объекта-синглетона не изменится, закешированные данные останутся в актуальном состоянии.
По поводу порядка сложно что-то сказать из-за отсутствия конкретного примера использования. В любом случае, запрет на оптимизацию перестановок коснется не только Ваших критических участков.
Да, нужно либо "volatile", либо "final" добавить, тут подробнее
habrahabr.ru/post/129494/
Нам всё равно нужна синхронизация в методе getInstance() потому что иначе экземпляр может два раза создастся. Насколько я понимаю, если есть синхронизация, то в этом случае volatile уже не нужен, так как синхронизация обеспечивает happens before. Я могу ошибаться
Круто !
Так и не объяснили до конца Double check)
Если кому-то интересно, в последном примере где закончился видео, это назывется Double check - вот видео о нем - ruclips.net/video/5eTQKyK-rGs/видео.html
Спасибо! Пригодилось.
какая-то глупость в примере с реордерингом и никто не задал на лекции вопрос. Ну и синглтон в конце лекции не пашет. Как было упомянуто раньше нужен волатайл. Но всё равно было интересно, спасибо
тоже не понял, сначала говорится, что реордеринг в одном потоке не возможен, если 1 переменная участвует, потом оказывается возможен
17:00 Как-раз можно операции после volatile write печат печат пегмати переставить выше. Наоборот, да, нельзя.
А ну он дальше об этом сказал 20:56
куча опечаток ошибок в подсчетах
Ужасная противоречивая лекция в примере с реордерингом. Жирный минус.
Скомкано, что-то пропустил и не стал объяснять, лекция не очень.
Бред в лекции сам себе противоречит. Сначала говорит что все операции до и после volatile-записи не могу перемещаться вверх и вниз соответственно (рисуя на доске), потом говорит что у него A=43 (на слайдах) может улететь куда угодно . Спасибо что ломаете мозг, из-за вас любое желание учиться пропадает.Хорошо хоть по зеленым квадратикам на слайдах (которые не ваши и к изменению которых ваши руки не дотянулись) понятно что куда может улететь.
ruclips.net/video/iB2N8aqwtxc/видео.html Вот оригинал, где можно увидеть как должно быть. В итоге там должно было быть сказано не про reordering, а то, что в рамках гонки потоков, второй поток может увидеть новое значение 43 или старое 42
Вы чего, про какие то высшие материи с синглтоном и реордингом?!
Тут каменный век..математики....аналитики
3:00
L2 медленнее L1 в 14 раз (7 / 0.5) - здесь слегка приуменьшил
L3 медленнее L1 в 200 раз (100/ 0.5) - зато здесь до овер увеличил.
Доверяйте свои денюжки таким счетоводам,.
Тетка в задрыпанном сельпо магазе на счетах сознательно и то меньше вас обЪегорит, чем такие бессознательные, бескорыстные, но тупые.