Генеральный директор Amazon Web Services Мэтт Гарман назвал «одной из самых глупых идей» сокращение вакансий для начинающих разработчиков из‑за внедрения ИИ.
По словам Гармана, полная замена младших сотрудников искусственным интеллектом не имеет никакого смысла, поскольку такие сотрудники зачастую лучше разбираются в инструментах ИИ ввиду своей молодости. Нынешние выпускники вузов выросли в эпоху новых технологий, поэтому им проще адаптироваться, говорит гендиректор AWS. Как правило, молодые специалисты находят новые быстрые способы написания кода и выясняют, как добиться наилучших результатов работы от ИИ‑агентов.
Гендиректор AWS также раскритиковал попытки экономии за счёт младших сотрудников. Обычно начинающие разработчики получают гораздо меньшую оплату труда, и их увольнение не принесёт компании существенной экономической пользы, говорит Гарман. По его мнению, оптимизацию процессов в компании следует проводить, учитывая также и работников старшего звена, которые получают более высокие зарплаты.
Помимо этого, Гарман считает, что подобный опыт сокращения начинающих разработчиков разрушает систему подготовки кадров
По слова гендиректора AWS, руководители компаний, которые заменяют начинающих разработчиков искусственным интеллектом, таким образом демонстрируют неспособность к долгосрочному планированию. Полагающаяся лишь на инструменты ИИ компания в конечном итоге столкнётся с нехваткой персонала, говорит Гарман.
https://www.wired.com/story/the-big-interview-podcast-matt-garman-ceo-aws/
По словам Гармана, полная замена младших сотрудников искусственным интеллектом не имеет никакого смысла, поскольку такие сотрудники зачастую лучше разбираются в инструментах ИИ ввиду своей молодости. Нынешние выпускники вузов выросли в эпоху новых технологий, поэтому им проще адаптироваться, говорит гендиректор AWS. Как правило, молодые специалисты находят новые быстрые способы написания кода и выясняют, как добиться наилучших результатов работы от ИИ‑агентов.
Гендиректор AWS также раскритиковал попытки экономии за счёт младших сотрудников. Обычно начинающие разработчики получают гораздо меньшую оплату труда, и их увольнение не принесёт компании существенной экономической пользы, говорит Гарман. По его мнению, оптимизацию процессов в компании следует проводить, учитывая также и работников старшего звена, которые получают более высокие зарплаты.
Помимо этого, Гарман считает, что подобный опыт сокращения начинающих разработчиков разрушает систему подготовки кадров
По слова гендиректора AWS, руководители компаний, которые заменяют начинающих разработчиков искусственным интеллектом, таким образом демонстрируют неспособность к долгосрочному планированию. Полагающаяся лишь на инструменты ИИ компания в конечном итоге столкнётся с нехваткой персонала, говорит Гарман.
https://www.wired.com/story/the-big-interview-podcast-matt-garman-ceo-aws/
WIRED
AWS CEO Matt Garman Doesn’t Think AI Should Replace Junior Devs
The head of Amazon Web Services has big plans to offer AI tools to businesses but says that replacing coders with AI is “a nonstarter for anyone who’s trying to build a long-term company.”
👍28💯6🤝4❤1😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Символы ASCII вместо графики как основа для создания видеоигр
🔥44❤5🤯2😭1🤝1
Система видеонаблюдения на основе ИИ ввела режим изоляции в средней школе имени Лоутона Чайлза в штате Флорида после того, как приняла за оружие кларнет ученика.
Прибывшая полиция объявила о прекращении режима изоляции, указав, что детям ничего не угрожало.
Директор школы Мелисса Лаудани заявила, что в учебном заведении действует многоуровневая безопасность, включая автоматизированную систему, которая обнаруживает потенциальные угрозы. По её словам, ученик держал кларнет как оружие, что привело к срабатыванию системы.
Аналогичный случай произошел в штате Мэриленд: там школьная система безопасности на базе ИИ приняла за пистолет пачку чипсов Doritos в руках старшеклассника. В двух этих случаях системы позволили ИИ принять решения без какого-либо вмешательства со стороны человека.
https://futurism.com/future-society/ai-surveillance-school-clarinet
Прибывшая полиция объявила о прекращении режима изоляции, указав, что детям ничего не угрожало.
Директор школы Мелисса Лаудани заявила, что в учебном заведении действует многоуровневая безопасность, включая автоматизированную систему, которая обнаруживает потенциальные угрозы. По её словам, ученик держал кларнет как оружие, что привело к срабатыванию системы.
Аналогичный случай произошел в штате Мэриленд: там школьная система безопасности на базе ИИ приняла за пистолет пачку чипсов Doritos в руках старшеклассника. В двух этих случаях системы позволили ИИ принять решения без какого-либо вмешательства со стороны человека.
https://futurism.com/future-society/ai-surveillance-school-clarinet
Futurism
AI Sends School Into Lockdown After It Mistook a Student’s Clarinet for a Gun
Students at Lawton Chiles Middle School were sent into lockdown after their AI system misidentified a student's clarinet as a gun.
🤣8👎6😐3❤1😁1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
C++: Расположение данных в памяти и директивы компилятора
(продолжение в следующем посте)
(продолжение в следующем посте)
👍6❤3🤔2
C++: Расположение данных в памяти и директивы компилятора
(продолжение предыдущего поста)
Визуализация показывает, как три директивы компилятора C++ существенно изменяют размер и организацию простой структуры данных, управляя выравниванием и добавлением отступов в памяти.
Разница между стандартным (8 байт) и упакованным (5 байт) расположением критически важна для производительности и передачи данных!
Варианты расположения данных:
- Стандартное (Default): естественное выравнивание. После типа
Размер: 8 байт.
- Упакованное (Packed): отступы не добавляются. Тип
Размер: 5 байт.
- Выровненное (Aligned): заданное выравнивание (например,
Почему расположение данных компилятором имеет значение:
- Сетевые протоколы: использует упакованные структуры для минимального «формата передачи», чтобы не отправлять лишние байты отступов.
- Аппаратные интерфейсы: применяет конкретное выравнивание для ввода‑вывода с отображением в память, когда аппаратное обеспечение ожидает данные на определённых границах.
- Оптимизация производительности: использует выровненный доступ для векторизации (SIMD), чтобы ускорить обработку данных.
- Кроссплатформенная совместимость: обеспечивает согласованное размещение памяти при компиляции кода на разных архитектурах.
(продолжение предыдущего поста)
Визуализация показывает, как три директивы компилятора C++ существенно изменяют размер и организацию простой структуры данных, управляя выравниванием и добавлением отступов в памяти.
Разница между стандартным (8 байт) и упакованным (5 байт) расположением критически важна для производительности и передачи данных!
Варианты расположения данных:
- Стандартное (Default): естественное выравнивание. После типа
char добавляются 3 байта отступа, чтобы выровнять тип int по границе в 4 байта. Размер: 8 байт.
- Упакованное (Packed): отступы не добавляются. Тип
int начинается сразу после char, но для доступа к невыровненным полям может потребоваться несколько инструкций процессора — это сводит на нет выгоду от экономии памяти. Размер: 5 байт.
- Выровненное (Aligned): заданное выравнивание (например,
aligned(16) или aligned(32)) может добавлять значительные отступы в конце, чтобы гарантировать, что последующие структуры начинаются с требуемой границы.Почему расположение данных компилятором имеет значение:
- Сетевые протоколы: использует упакованные структуры для минимального «формата передачи», чтобы не отправлять лишние байты отступов.
- Аппаратные интерфейсы: применяет конкретное выравнивание для ввода‑вывода с отображением в память, когда аппаратное обеспечение ожидает данные на определённых границах.
- Оптимизация производительности: использует выровненный доступ для векторизации (SIMD), чтобы ускорить обработку данных.
- Кроссплатформенная совместимость: обеспечивает согласованное размещение памяти при компиляции кода на разных архитектурах.
Telegram
METANIT.COM
C++: Расположение данных в памяти и директивы компилятора
(продолжение в следующем посте)
(продолжение в следующем посте)
👍8❤2👏1
Обобщённые инвертированные индексы (Generalized Inverted Indexes / GIN)
(продолжение в следующем посте)
(продолжение в следующем посте)
❤3👍2🔥2
Обобщённые инвертированные индексы (Generalized Inverted Indexes / GIN)
(продолжение предыдущего поста)
Generalized Inverted Indexes (Обобщённые инвертированные индексы или GIN) — мощный инструмент СУБД, в частности, в Postgres.
Они отлично подходят для инвертирования типичного сценария использования индексов.
Вместо сопоставления «строка с ID 2 содержит значение „become a database expert“» вы переворачиваете это так: «токен „database“ сопоставляется со строками с ID 1, 2 и 3, а токен „expert“ — со строкой с ID 2».
Индексам GIN передаётся набор значений для каждой строки, которую вы хотите проиндексировать. Каждое уникальное значение становится ключом в индексе и сопоставляется с набором CTID (идентификаторов строковых кортежей), содержащих это значение.
У такого подхода есть несколько вариантов применения, один из которых — полнотекстовый поиск! В MySQL есть специальный тип индекса FULLTEXT, тогда как в Postgres для создания аналогичной функциональности используются более универсальные индексы GIN. Как это сделать?
(а) Добавьте в таблицу столбец tsvector:
(б) Заполните его лексемами (нормализованными словами):
(в) Создайте индекс, используя лексемы в качестве ключей:
(г) Выполняйте запросы!
(продолжение предыдущего поста)
Generalized Inverted Indexes (Обобщённые инвертированные индексы или GIN) — мощный инструмент СУБД, в частности, в Postgres.
Они отлично подходят для инвертирования типичного сценария использования индексов.
Вместо сопоставления «строка с ID 2 содержит значение „become a database expert“» вы переворачиваете это так: «токен „database“ сопоставляется со строками с ID 1, 2 и 3, а токен „expert“ — со строкой с ID 2».
Индексам GIN передаётся набор значений для каждой строки, которую вы хотите проиндексировать. Каждое уникальное значение становится ключом в индексе и сопоставляется с набором CTID (идентификаторов строковых кортежей), содержащих это значение.
У такого подхода есть несколько вариантов применения, один из которых — полнотекстовый поиск! В MySQL есть специальный тип индекса FULLTEXT, тогда как в Postgres для создания аналогичной функциональности используются более универсальные индексы GIN. Как это сделать?
(а) Добавьте в таблицу столбец tsvector:
CREATE TABLE post (
author TEXT,
publish_date DATE,
content TEXT NOT NULL,
search_vector tsvector);
(б) Заполните его лексемами (нормализованными словами):
UPDATE post
SET search_vector =
to_tsvector('english', content);
(в) Создайте индекс, используя лексемы в качестве ключей:
CREATE INDEX post_search_idx
ON post USING GIN(search_vector);
(г) Выполняйте запросы!
SELECT * FROM post
WHERE search_vector @@
to_tsquery('english', 'database & expert');
Telegram
METANIT.COM
Обобщённые инвертированные индексы (Generalized Inverted Indexes / GIN)
(продолжение в следующем посте)
(продолжение в следующем посте)
👍6👏3❤2
Выпускники IT-специальностей сталкиваются с апокалипсисом на рынке труда
Издание Rest of World опубликовало статью о том, что ИИ «уничтожил позиции для начинающих специалистов в техиндустрии».
Так, студент престижного инженерного колледжа в Индии рассказал, что из 400 его однокурсников «менее 25% получили предложения о работе», а «в кампусе царит паника». Индийские IT-компании сократили количество вакансий начального уровня на 20-25% благодаря автоматизации и ИИ.
Студенты инженерных колледжей в Индии, Китае, Дубае и Кении сталкиваются с «апокалипсисом на рынке труда», поскольку ИИ заменяет людей на позициях начального уровня. Задачи, которые раньше поручали недавним выпускникам, такие как отладка, тестирование и рутинное обслуживание программного обеспечения, теперь всё чаще автоматизируются. За последние 3 года число недавних выпускников, нанятых крупными технологическими компаниями по всему миру, сократилось более чем на 50%.
«Пять лет назад шла настоящая война за программистов и разработчиков. Была борьба за найм, и 90% нанимаемых сотрудников шли на готовые технические должности, то есть на позиции, требующие использования готовых технологических продуктов, а не внутренней разработки. С появлением ИИ это резко изменилось. Теперь я не уверен, что показатель достигает хотя бы 5%», — сказал Вахид Хагзаре, директор рекрутинговой компании Silicon Valley Associates Recruitment в Дубае.
Хотя в 2024 году найм немного восстановился, только 7% среди новых сотрудников оказались недавними выпускниками. При этом в ходе опросов до 37% менеджеров заявили, что предпочли бы использовать ИИ, чем нанимать сотрудников поколения Z.
«Поскольку спрос на вакансии для начинающих специалистов снижается, даже высококвалифицированные выпускники инженерных специальностей испытывают трудности с трудоустройством в сфере технологий, особенно в крупных технологических компаниях», — отмечают аналитики. При этом такие компании ожидают от недавних выпкскников выполнения «дополнительных обязанностей», таких как управление проектом или руководство продажами. Некоторые студенты пересмотрели свои амбиции, чтобы соответствовать требованиям работодателей. Так, Нишант Каушик, изучавший информатику в другом престижном колледже на востоке Индии, решил искать работу в сфере продаж или маркетинга.
Развитие ИИ также снизило актуальность инженерных специальностей: требования на рабочем месте теперь отличаются от того, чему учат в колледжах. Рита Санде Лукале, студентка программы электронной инженерии в Техническом университете Кении, надеялась после окончания учебы устроиться на работу в сектор системной архитектуры. Однако за последние несколько лет она наблюдала, как такие должности исчезают. Теперь выпускники «должны обладать навыками более высокого уровня, необходимыми для понимания алгоритмов и использования инженерного подхода для устранения неполадок в сложных и автоматизированных системах».
От недавних выпускников ожидается не только понимание и эффективное использование новейших инструментов, «от них требуют увеличить производительность на 70%, потому что “они используют ИИ”», — сказал Лиам Фэллон, руководитель отдела разработки продуктов в рекрутинговой компании GoodSpace AI. В результате студенты сталкиваются с быстро меняющейся отраслью, которая требует от них самостоятельного повышения квалификации вне рамок учебной программы. Эксперты считают, что университеты не в состоянии достаточно быстро адаптировать свои академические практики. Нынешняя система, в которой студент посвящает от трёх до пяти лет изучению компьютерных наук, «нежизнеспособна», а студенты в итоге «проваливаются в яму и не знают, как из неё выбраться», заключают они.
https://restofworld.org/2025/engineering-graduates-ai-job-losses/
Издание Rest of World опубликовало статью о том, что ИИ «уничтожил позиции для начинающих специалистов в техиндустрии».
Так, студент престижного инженерного колледжа в Индии рассказал, что из 400 его однокурсников «менее 25% получили предложения о работе», а «в кампусе царит паника». Индийские IT-компании сократили количество вакансий начального уровня на 20-25% благодаря автоматизации и ИИ.
Студенты инженерных колледжей в Индии, Китае, Дубае и Кении сталкиваются с «апокалипсисом на рынке труда», поскольку ИИ заменяет людей на позициях начального уровня. Задачи, которые раньше поручали недавним выпускникам, такие как отладка, тестирование и рутинное обслуживание программного обеспечения, теперь всё чаще автоматизируются. За последние 3 года число недавних выпускников, нанятых крупными технологическими компаниями по всему миру, сократилось более чем на 50%.
«Пять лет назад шла настоящая война за программистов и разработчиков. Была борьба за найм, и 90% нанимаемых сотрудников шли на готовые технические должности, то есть на позиции, требующие использования готовых технологических продуктов, а не внутренней разработки. С появлением ИИ это резко изменилось. Теперь я не уверен, что показатель достигает хотя бы 5%», — сказал Вахид Хагзаре, директор рекрутинговой компании Silicon Valley Associates Recruitment в Дубае.
Хотя в 2024 году найм немного восстановился, только 7% среди новых сотрудников оказались недавними выпускниками. При этом в ходе опросов до 37% менеджеров заявили, что предпочли бы использовать ИИ, чем нанимать сотрудников поколения Z.
«Поскольку спрос на вакансии для начинающих специалистов снижается, даже высококвалифицированные выпускники инженерных специальностей испытывают трудности с трудоустройством в сфере технологий, особенно в крупных технологических компаниях», — отмечают аналитики. При этом такие компании ожидают от недавних выпкскников выполнения «дополнительных обязанностей», таких как управление проектом или руководство продажами. Некоторые студенты пересмотрели свои амбиции, чтобы соответствовать требованиям работодателей. Так, Нишант Каушик, изучавший информатику в другом престижном колледже на востоке Индии, решил искать работу в сфере продаж или маркетинга.
Развитие ИИ также снизило актуальность инженерных специальностей: требования на рабочем месте теперь отличаются от того, чему учат в колледжах. Рита Санде Лукале, студентка программы электронной инженерии в Техническом университете Кении, надеялась после окончания учебы устроиться на работу в сектор системной архитектуры. Однако за последние несколько лет она наблюдала, как такие должности исчезают. Теперь выпускники «должны обладать навыками более высокого уровня, необходимыми для понимания алгоритмов и использования инженерного подхода для устранения неполадок в сложных и автоматизированных системах».
От недавних выпускников ожидается не только понимание и эффективное использование новейших инструментов, «от них требуют увеличить производительность на 70%, потому что “они используют ИИ”», — сказал Лиам Фэллон, руководитель отдела разработки продуктов в рекрутинговой компании GoodSpace AI. В результате студенты сталкиваются с быстро меняющейся отраслью, которая требует от них самостоятельного повышения квалификации вне рамок учебной программы. Эксперты считают, что университеты не в состоянии достаточно быстро адаптировать свои академические практики. Нынешняя система, в которой студент посвящает от трёх до пяти лет изучению компьютерных наук, «нежизнеспособна», а студенты в итоге «проваливаются в яму и не знают, как из неё выбраться», заключают они.
https://restofworld.org/2025/engineering-graduates-ai-job-losses/
Rest of World
“Everyone is so panicked”: Entry-level tech workers describe the AI-fueled jobpocalypse
Engineering graduates face shrinking opportunities and rising pressure to upskill beyond their curriculum.
💊12😢7🤔3🤯3🤬2✍1😁1
Три четверти российских компаний не знают, зачем им искусственный интеллект
У них есть бюджет на внедрение технологии, но нет стратегии
Лишь 26% российских компаний, закладывающих в бюджет траты на внедрение искусственного интеллекта (ИИ), имеют стратегию его внедрения. Об этом говорится в исследовании МТС Web Services «Технологические стратегии бизнеса», основанном на опросе более 700 компаний и серии глубинных интервью. По данным исследования, остальные участники рынка либо находятся на стадии отдельных пилотных проектов, либо только планируют системную работу с ИИ.
Показатель зрелости ИИ-стратегий заметно уступает другим направлениям цифрового развития. Так, стратегии в области облачных технологий есть у 44% компаний, в сфере кибербезопасности – у 42%. Это означает, что ИИ в большинстве организаций пока воспринимается как экспериментальный инструмент, а не как элемент долгосрочной бизнес-архитектуры, следует из материалов исследования.
https://www.vedomosti.ru/technology/articles/2025/12/18/1164563-tri-chetverti-rossiiskih
У них есть бюджет на внедрение технологии, но нет стратегии
Лишь 26% российских компаний, закладывающих в бюджет траты на внедрение искусственного интеллекта (ИИ), имеют стратегию его внедрения. Об этом говорится в исследовании МТС Web Services «Технологические стратегии бизнеса», основанном на опросе более 700 компаний и серии глубинных интервью. По данным исследования, остальные участники рынка либо находятся на стадии отдельных пилотных проектов, либо только планируют системную работу с ИИ.
Показатель зрелости ИИ-стратегий заметно уступает другим направлениям цифрового развития. Так, стратегии в области облачных технологий есть у 44% компаний, в сфере кибербезопасности – у 42%. Это означает, что ИИ в большинстве организаций пока воспринимается как экспериментальный инструмент, а не как элемент долгосрочной бизнес-архитектуры, следует из материалов исследования.
https://www.vedomosti.ru/technology/articles/2025/12/18/1164563-tri-chetverti-rossiiskih
Ведомости
Три четверти российских компаний не знают, зачем им искусственный интеллект
У них есть бюджет на внедрение технологии, но нет стратегии
😁14💯6❤2🙈1
Метрики производительности системы
(продолжение предыдущего поста)
4 ключевые метрики производительности системы:
1. Queries Per Second (QPS) — Запросы в секунду (оранжевый блок):
* измеряет количество входящих запросов к системе за одну секунду;
* отражает общую нагрузку на сервер со стороны клиентов (например, количество обращений к веб-сервису);
* на схеме показан поток «Request → Server → Response» от одного клиента;
* является ключевым показателем пропускной способности системы.
2. Transactions Per Second (TPS) — Транзакции в секунду (зелёный блок):
* измеряет количество успешно завершённых транзакций (полных операций) в секунду;
* отличается от QPS тем, что учитывает не просто запросы, а именно завершённые процессы (например, запись в базу данных, обработка платежа);
* включает взаимодействие с базой данных («Request → Server → Database → Response»);
* показывает реальную эффективность обработки задач системой.
3. Concurrency — Параллелизм (одновременность) (фиолетовый блок):
* отслеживает количество активных запросов, обрабатываемых системой одновременно;
* иллюстрируется множеством клиентов, отправляющих запросы параллельно («Multiple Clients → Simultaneous active requests»);
* напрямую влияет на QPS: чем выше параллелизм, тем больше запросов система может обработать за секунду;
* критически важен для масштабируемых систем (например, веб-серверов с высокой нагрузкой).
4. Response Time (RT) — Время отклика (голубой блок):
* измеряется промежуток времени с момента отправки запроса клиентом до получения ответа;
* на схеме обозначен как «Measured elapsed time» (измеренное затраченное время);
* включает время обработки на сервере и задержки передачи данных;
* низкий RT критически важен для пользовательского опыта (например, в онлайн-играх, платёжных системах).
### Связь метрик
Ключевая формула:
QPS = Concurrency + Average RT
означает, что пропускная способность системы (QPS) зависит от двух факторов:
* высокого параллелизма (больше одновременных запросов);
* низкого среднего времени отклика (быстрее обработка каждого запроса).
Эти метрики в совокупности позволяют оценить:
* нагрузку на систему (QPS, Concurrency);
* эффективность обработки (TPS);
* скорость реакции системы (RT).
Их анализ помогает оптимизировать производительность, выявлять «узкие места» и планировать масштабирование.
(продолжение предыдущего поста)
4 ключевые метрики производительности системы:
1. Queries Per Second (QPS) — Запросы в секунду (оранжевый блок):
* измеряет количество входящих запросов к системе за одну секунду;
* отражает общую нагрузку на сервер со стороны клиентов (например, количество обращений к веб-сервису);
* на схеме показан поток «Request → Server → Response» от одного клиента;
* является ключевым показателем пропускной способности системы.
2. Transactions Per Second (TPS) — Транзакции в секунду (зелёный блок):
* измеряет количество успешно завершённых транзакций (полных операций) в секунду;
* отличается от QPS тем, что учитывает не просто запросы, а именно завершённые процессы (например, запись в базу данных, обработка платежа);
* включает взаимодействие с базой данных («Request → Server → Database → Response»);
* показывает реальную эффективность обработки задач системой.
3. Concurrency — Параллелизм (одновременность) (фиолетовый блок):
* отслеживает количество активных запросов, обрабатываемых системой одновременно;
* иллюстрируется множеством клиентов, отправляющих запросы параллельно («Multiple Clients → Simultaneous active requests»);
* напрямую влияет на QPS: чем выше параллелизм, тем больше запросов система может обработать за секунду;
* критически важен для масштабируемых систем (например, веб-серверов с высокой нагрузкой).
4. Response Time (RT) — Время отклика (голубой блок):
* измеряется промежуток времени с момента отправки запроса клиентом до получения ответа;
* на схеме обозначен как «Measured elapsed time» (измеренное затраченное время);
* включает время обработки на сервере и задержки передачи данных;
* низкий RT критически важен для пользовательского опыта (например, в онлайн-играх, платёжных системах).
### Связь метрик
Ключевая формула:
QPS = Concurrency + Average RT
означает, что пропускная способность системы (QPS) зависит от двух факторов:
* высокого параллелизма (больше одновременных запросов);
* низкого среднего времени отклика (быстрее обработка каждого запроса).
Эти метрики в совокупности позволяют оценить:
* нагрузку на систему (QPS, Concurrency);
* эффективность обработки (TPS);
* скорость реакции системы (RT).
Их анализ помогает оптимизировать производительность, выявлять «узкие места» и планировать масштабирование.
Telegram
METANIT.COM
Метрики производительности системы
(подробное описание в следующем посте)
(подробное описание в следующем посте)
👍8❤3👏1
7 шаблонов проектирования многопоточности
Многопоточность — это вычислительная модель, позволяющая одной программе (процессу) выполнять несколько задач одновременно.
Эти задачи называются потоками — лёгкими единицами выполнения, которые используют общие ресурсы процесса (пространство памяти, открытые файлы и т. д.).
Хотя многопоточность открывает огромные возможности для повышения производительности и создания отзывчивых приложений, она также порождает сложности — такие как синхронизация, взаимодействие между потоками и потенциальные условия гонки.
Шаблоны проектирования многопоточности — это повторно используемые решения, позволяющие справиться с подобными типичными проблемами.
📌 Изучим эти шаблоны.
[1.] Шаблон «Производитель‑потребитель» (Producer-Consumer)
* В этом шаблоне задействованы два типа потоков: производители, которые генерируют данные, и потребители, которые эти данные обрабатывают.
* Общая очередь выступает в роли буфера между ними.
Когда использовать?
* Когда задачи можно разделить на отдельные этапы производства и потребления, и вы хотите разграничить эти этапы для повышения параллелизма и эффективности.
[2.] Шаблон «Пул потоков»
* Поддерживает набор рабочих потоков, которые можно повторно использовать для выполнения задач.
* Позволяет избежать накладных расходов на создание и уничтожение потоков для каждой задачи.
Когда использовать?
* Когда у вас большое количество краткосрочных задач и вы хотите контролировать число потоков для более эффективного использования ресурсов и повышения производительности.
[3.] Шаблон «Фьючерсы и промисы» (Futures and Promises)
* Представляет результат асинхронной операции.
* Промис — это объект, хранящий итоговый результат, а фьючер предоставляет способ получить этот результат, когда он станет доступен.
Когда использовать?
* Когда вы работаете с длительными операциями, которые хотите выполнять параллельно, не блокируя основной поток.
[4.] Шаблон «Объект‑монитор» (Monitor Object )
* Обеспечивает механизм синхронизации доступа к общим ресурсам.
* Позволяет только одному потоку выполнять критический участок кода в каждый момент времени, предотвращая условия гонки.
Когда использовать?
* Когда нужно защитить общие данные или ресурсы от одновременного доступа и обеспечить потокобезопасность.
[5.] Шаблон «Блокировка чтения‑записи» ( Read-Write Lock)
* Позволяет нескольким потокам одновременно читать из общего ресурса, но только одному потоку записывать в него в каждый момент времени.
Когда использовать?
* Когда у вас есть общий ресурс, в котором операции чтения выполняются чаще, чем записи, и вы хотите оптимизировать параллельное чтение.
[6.] Шаблон «Барьер» (Barrier )
* Синхронизирует группу потоков, заставляя их ожидать в общей точке перед дальнейшим выполнением.
Когда использовать?
* Когда у вас есть параллельные задачи, которые должны завершить определённый этап перед переходом к следующему.
[7.] Шаблон «Активный объект» (Active Object)
* Разделяет выполнение метода и его вызов в параллельных системах.
* Включает объект со собственным потоком управления и планировщик для постановки в очередь и выполнения запросов на методы.
Когда использовать?
* Когда вы хотите инкапсулировать логику управления потоками и планирования внутри объекта, обеспечив более чистый интерфейс для параллельных операций.
Многопоточность — это вычислительная модель, позволяющая одной программе (процессу) выполнять несколько задач одновременно.
Эти задачи называются потоками — лёгкими единицами выполнения, которые используют общие ресурсы процесса (пространство памяти, открытые файлы и т. д.).
Хотя многопоточность открывает огромные возможности для повышения производительности и создания отзывчивых приложений, она также порождает сложности — такие как синхронизация, взаимодействие между потоками и потенциальные условия гонки.
Шаблоны проектирования многопоточности — это повторно используемые решения, позволяющие справиться с подобными типичными проблемами.
📌 Изучим эти шаблоны.
[1.] Шаблон «Производитель‑потребитель» (Producer-Consumer)
* В этом шаблоне задействованы два типа потоков: производители, которые генерируют данные, и потребители, которые эти данные обрабатывают.
* Общая очередь выступает в роли буфера между ними.
Когда использовать?
* Когда задачи можно разделить на отдельные этапы производства и потребления, и вы хотите разграничить эти этапы для повышения параллелизма и эффективности.
[2.] Шаблон «Пул потоков»
* Поддерживает набор рабочих потоков, которые можно повторно использовать для выполнения задач.
* Позволяет избежать накладных расходов на создание и уничтожение потоков для каждой задачи.
Когда использовать?
* Когда у вас большое количество краткосрочных задач и вы хотите контролировать число потоков для более эффективного использования ресурсов и повышения производительности.
[3.] Шаблон «Фьючерсы и промисы» (Futures and Promises)
* Представляет результат асинхронной операции.
* Промис — это объект, хранящий итоговый результат, а фьючер предоставляет способ получить этот результат, когда он станет доступен.
Когда использовать?
* Когда вы работаете с длительными операциями, которые хотите выполнять параллельно, не блокируя основной поток.
[4.] Шаблон «Объект‑монитор» (Monitor Object )
* Обеспечивает механизм синхронизации доступа к общим ресурсам.
* Позволяет только одному потоку выполнять критический участок кода в каждый момент времени, предотвращая условия гонки.
Когда использовать?
* Когда нужно защитить общие данные или ресурсы от одновременного доступа и обеспечить потокобезопасность.
[5.] Шаблон «Блокировка чтения‑записи» ( Read-Write Lock)
* Позволяет нескольким потокам одновременно читать из общего ресурса, но только одному потоку записывать в него в каждый момент времени.
Когда использовать?
* Когда у вас есть общий ресурс, в котором операции чтения выполняются чаще, чем записи, и вы хотите оптимизировать параллельное чтение.
[6.] Шаблон «Барьер» (Barrier )
* Синхронизирует группу потоков, заставляя их ожидать в общей точке перед дальнейшим выполнением.
Когда использовать?
* Когда у вас есть параллельные задачи, которые должны завершить определённый этап перед переходом к следующему.
[7.] Шаблон «Активный объект» (Active Object)
* Разделяет выполнение метода и его вызов в параллельных системах.
* Включает объект со собственным потоком управления и планировщик для постановки в очередь и выполнения запросов на методы.
Когда использовать?
* Когда вы хотите инкапсулировать логику управления потоками и планирования внутри объекта, обеспечив более чистый интерфейс для параллельных операций.
👍12❤3🤝2🤣1
This media is not supported in your browser
VIEW IN TELEGRAM
Игра "Tennis for Two", созданная в 1958 году физиком Уильямом Хигинботэмом (William Higinbotham), которую часто называют первой видеоигрой, в которой для интерактивного игрового процесса использовался осциллограф
❤🔥29😁8👍4🔥4🫡2
Выпускники Стэнфорда обнаружили, что их дипломы больше не гарантируют трудоустройство из-за ИИ
Выпускники факультета компьютерных наук Стэнфордского университета в Калифорнии столкнулись с тем, что их дипломы больше не обеспечивают трудоустройство: инструменты на базе ИИ для программирования начали опережать по эффективности начинающих специалистов.
Диплом Стэнфорда долгое время считался заветной целью для будущих IT‑специалистов, но теперь, по словам выпускников, его ценность на рынке труда заметно снизилась. Окончившие университет в последние годы выпускники признаются, что не могут найти работу. При этом ситуация на рынке изменилась стремительно: сегодня ИИ‑инструменты в ряде задач программирования превосходят большинство людей.
В результате технологическим компаниям больше не требуется такое количество начинающих разработчиков. По словам выпускников, работодатели всё чаще отдают предпочтение кандидатам с солидным резюме — тем, кто способен самостоятельно вести разработку продуктов и научные исследования. Задачи начального уровня при этом всё чаще автоматизируются с помощью ИИ, из‑за чего недавние выпускники сталкиваются с трудностями при поиске работы.
Один из бывших студентов Стэнфорда рассказал, что на факультете компьютерных наук царит подавленная атмосфера. Студенты, которым только предстоит окончить университет, уже обеспокоены перспективами трудоустройства, а выпускники прошлых лет так и не смогли реализовать ожидания, связанные с получением престижного диплома.
Похожая ситуация складывается и в других университетах Калифорнии. Издание приводит историю выпускницы Университета Лойола Мэримаунта в Лос‑Анджелесе, которая приехала учиться в США из Турции. После получения диплома она вернулась на родину, чтобы набраться опыта в стартапе, затем вновь переехала в США, но за полугода так и не смогла найти работу, подав сотни заявок.
https://www.latimes.com/business/story/2025-12-19/they-graduated-from-stanford-due-to-ai-they-cant-find-job
Выпускники факультета компьютерных наук Стэнфордского университета в Калифорнии столкнулись с тем, что их дипломы больше не обеспечивают трудоустройство: инструменты на базе ИИ для программирования начали опережать по эффективности начинающих специалистов.
Диплом Стэнфорда долгое время считался заветной целью для будущих IT‑специалистов, но теперь, по словам выпускников, его ценность на рынке труда заметно снизилась. Окончившие университет в последние годы выпускники признаются, что не могут найти работу. При этом ситуация на рынке изменилась стремительно: сегодня ИИ‑инструменты в ряде задач программирования превосходят большинство людей.
В результате технологическим компаниям больше не требуется такое количество начинающих разработчиков. По словам выпускников, работодатели всё чаще отдают предпочтение кандидатам с солидным резюме — тем, кто способен самостоятельно вести разработку продуктов и научные исследования. Задачи начального уровня при этом всё чаще автоматизируются с помощью ИИ, из‑за чего недавние выпускники сталкиваются с трудностями при поиске работы.
Один из бывших студентов Стэнфорда рассказал, что на факультете компьютерных наук царит подавленная атмосфера. Студенты, которым только предстоит окончить университет, уже обеспокоены перспективами трудоустройства, а выпускники прошлых лет так и не смогли реализовать ожидания, связанные с получением престижного диплома.
Похожая ситуация складывается и в других университетах Калифорнии. Издание приводит историю выпускницы Университета Лойола Мэримаунта в Лос‑Анджелесе, которая приехала учиться в США из Турции. После получения диплома она вернулась на родину, чтобы набраться опыта в стартапе, затем вновь переехала в США, но за полугода так и не смогла найти работу, подав сотни заявок.
https://www.latimes.com/business/story/2025-12-19/they-graduated-from-stanford-due-to-ai-they-cant-find-job
Los Angeles Times
They graduated from Stanford. Due to AI, they can't find a job
A Stanford software engineering degree used to be a golden ticket.
😢11❤2👎2😁2🥴2🤬1🌚1
Replication, Partitioning и Sharding
(продолжение предыдущего поста)
1. Replication (репликация)
- Суть: копирование данных на множество серверов. Каждый сервер хранит полную копию датасета.
- Ключевые особенности:
- обеспечивает работу системы при сбоях (если один сервер выходит из строя, другие продолжают работать);
- масштабирует трафик чтения (но не записи);
- использует модели «ведущий–ведомый» (leader–follower) или «множество ведущих» (multi–leader);
- оптимальна для нагрузок с преобладанием операций чтения (read–heavy workloads).
- Пример использования: создание дополнительных slave–серверов для снятия нагрузки с основного сервера, выполнение ресурсоёмких задач (например, аналитических отчётов) на отдельных серверах без влияния на работу других пользователей.
2. Partitioning (партиционирование)
- Суть: разделение большой таблицы на более мелкие части (партиции) внутри одного сервера базы данных. Каждая партиция хранит подмножество строк.
- Ключевые особенности:
- ускоряет запросы к большим таблицам за счёт распределения нагрузки;
- упрощает обслуживание и очистку данных (cleanup and maintenance);
- не требует добавления новых машин — работает в рамках одного сервера;
- разбивает данные по выбранным администратором критериям (например, по дате публикации на новостных сайтах).
- Пример использования: секционирование таблиц с большим объёмом данных для ускорения обработки запросов.
3. Sharding (шардирование)
- Суть: распределение данных по разным физическим машинам (шардам) на основе ключа шардинга. Связанные данные группируются и хранятся на одном сервере.
- Ключевые особенности:
- позволяет горизонтально масштабировать систему (horizontal scaling);
- масштабирует как трафик чтения, так и записи;
- требует логики маршрутизации, «осведомлённой» о шардах (shard–aware routing logic);
- используется, когда одна база данных не справляется с нагрузкой;
- ключ шардинга (например, ID пользователя) определяет, на каком сервере будут храниться данные.
- Пример использования: в социальных сетях все данные пользователя (по ключу — ID пользователя) хранятся и обрабатываются на одном сервере, что упрощает обработку и ускоряет запросы.
### Краткое резюме:
- Replication — про отказоустойчивость и масштабирование чтения через копирование полных копий данных.
- Partitioning — про ускорение работы с большими таблицами путём разделения данных внутри одного сервера.
- Sharding — про распределение данных по разным серверам для масштабирования как чтения, так и записи, подходит для крупномасштабных систем.
(продолжение предыдущего поста)
1. Replication (репликация)
- Суть: копирование данных на множество серверов. Каждый сервер хранит полную копию датасета.
- Ключевые особенности:
- обеспечивает работу системы при сбоях (если один сервер выходит из строя, другие продолжают работать);
- масштабирует трафик чтения (но не записи);
- использует модели «ведущий–ведомый» (leader–follower) или «множество ведущих» (multi–leader);
- оптимальна для нагрузок с преобладанием операций чтения (read–heavy workloads).
- Пример использования: создание дополнительных slave–серверов для снятия нагрузки с основного сервера, выполнение ресурсоёмких задач (например, аналитических отчётов) на отдельных серверах без влияния на работу других пользователей.
2. Partitioning (партиционирование)
- Суть: разделение большой таблицы на более мелкие части (партиции) внутри одного сервера базы данных. Каждая партиция хранит подмножество строк.
- Ключевые особенности:
- ускоряет запросы к большим таблицам за счёт распределения нагрузки;
- упрощает обслуживание и очистку данных (cleanup and maintenance);
- не требует добавления новых машин — работает в рамках одного сервера;
- разбивает данные по выбранным администратором критериям (например, по дате публикации на новостных сайтах).
- Пример использования: секционирование таблиц с большим объёмом данных для ускорения обработки запросов.
3. Sharding (шардирование)
- Суть: распределение данных по разным физическим машинам (шардам) на основе ключа шардинга. Связанные данные группируются и хранятся на одном сервере.
- Ключевые особенности:
- позволяет горизонтально масштабировать систему (horizontal scaling);
- масштабирует как трафик чтения, так и записи;
- требует логики маршрутизации, «осведомлённой» о шардах (shard–aware routing logic);
- используется, когда одна база данных не справляется с нагрузкой;
- ключ шардинга (например, ID пользователя) определяет, на каком сервере будут храниться данные.
- Пример использования: в социальных сетях все данные пользователя (по ключу — ID пользователя) хранятся и обрабатываются на одном сервере, что упрощает обработку и ускоряет запросы.
### Краткое резюме:
- Replication — про отказоустойчивость и масштабирование чтения через копирование полных копий данных.
- Partitioning — про ускорение работы с большими таблицами путём разделения данных внутри одного сервера.
- Sharding — про распределение данных по разным серверам для масштабирования как чтения, так и записи, подходит для крупномасштабных систем.
Telegram
METANIT.COM
Replication, Partitioning и Sharding
(продолжение в следующем посте)
(продолжение в следующем посте)
❤3👍3🤝3
Вышла новая версия популярного отладчика - GDB 17.
GDB поддерживает отладку на уровне исходников широкого спектра языков (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust и т.д.) на различных аппаратных (i386, amd64, ARM, RISC-V, LoongArch и т.д.) и программных платформах (GNU/Linux, *BSD, Unix, Windows, macOS).
Основные изменения направлены на повышение безопасности, удобства отладки и интеграции с современными технологиями. Ключевые нововведения в GDB 17:
1. Поддержка теневого стека (CET Shadow Stack) для x86-64. Это позволяет отлаживать программы, использующие аппаратную защиту от переполнения буфера в стеке, появившуюся в ядре Linux 6.6. Теневой стек сохраняет адреса возврата функций отдельно от основного стека, что затрудняет эксплуатацию эксплоитов.
2. Отладка программ с Guarded Control Stacks (GCS) на AArch64. GCS предоставляет аппаратную защиту адресов возврата из функций, блокируя эксплоиты, использующие методы возвратно-ориентированного программирования (ROP).
3. Полная поддержка записи выполнения программы для RISC-V RV64GC. Это позволяет воспроизводить участки кода в обратном направлении для отладки.
4. Улучшения в команде `info threads`. Добавлены опции
5. Расширения в команде `info sharedlibrary`. На платформах Linux и FreeBSD теперь показываются адреса для всего диапазона памяти, выделенного разделяемой библиотеке, а не только базовый адрес и адреса секции
6. Поддержка снимков состояния (checkpoint) в Linux. Позволяет использовать снимки при одновременной отладке нескольких процессов.
7. Улучшения в Python API. Добавлены новые классы
8. Улучшения в протоколе DAP (Debugger Adapter Protocol). Реализована поддержка запросов
9. Новые переменные. Добавлены
10. Опции для отключения подсистем. Добавлены
11. Прекращение поддержки UST в gdbserver. UST (static tracepoint) больше не поддерживается.
https://www.sourceware.org/gdb/
https://www.mail-archive.com/info-gnu@gnu.org/msg03477.html
GDB поддерживает отладку на уровне исходников широкого спектра языков (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust и т.д.) на различных аппаратных (i386, amd64, ARM, RISC-V, LoongArch и т.д.) и программных платформах (GNU/Linux, *BSD, Unix, Windows, macOS).
Основные изменения направлены на повышение безопасности, удобства отладки и интеграции с современными технологиями. Ключевые нововведения в GDB 17:
1. Поддержка теневого стека (CET Shadow Stack) для x86-64. Это позволяет отлаживать программы, использующие аппаратную защиту от переполнения буфера в стеке, появившуюся в ядре Linux 6.6. Теневой стек сохраняет адреса возврата функций отдельно от основного стека, что затрудняет эксплуатацию эксплоитов.
2. Отладка программ с Guarded Control Stacks (GCS) на AArch64. GCS предоставляет аппаратную защиту адресов возврата из функций, блокируя эксплоиты, использующие методы возвратно-ориентированного программирования (ROP).
3. Полная поддержка записи выполнения программы для RISC-V RV64GC. Это позволяет воспроизводить участки кода в обратном направлении для отладки.
4. Улучшения в команде `info threads`. Добавлены опции
-stopped и -running для отображения только остановленных или выполняемых потоков.5. Расширения в команде `info sharedlibrary`. На платформах Linux и FreeBSD теперь показываются адреса для всего диапазона памяти, выделенного разделяемой библиотеке, а не только базовый адрес и адреса секции
.text.6. Поддержка снимков состояния (checkpoint) в Linux. Позволяет использовать снимки при одновременной отладке нескольких процессов.
7. Улучшения в Python API. Добавлены новые классы
gdb.Color и gdb.ParameterPrefix, атрибут gdb.Value.is_unavailable, функция gdb.warning(). Прекращена поддержка Python версий ниже 3.4. 8. Улучшения в протоколе DAP (Debugger Adapter Protocol). Реализована поддержка запросов
completions и добавлена опция --binary-output для отключения преобразования символов перевода строки на Windows.9. Новые переменные. Добавлены
_colorsupport (список цветовых пространств, поддерживаемых терминалом), linker_namespace_count и _linker_namespace (список активных пространств имён компоновщика).10. Опции для отключения подсистем. Добавлены
--disable-gdb-compile, --disable-gdb-dwarf-support и --disable-gdb-mdebug-support для отключения определённых функций.11. Прекращение поддержки UST в gdbserver. UST (static tracepoint) больше не поддерживается.
https://www.sourceware.org/gdb/
https://www.mail-archive.com/info-gnu@gnu.org/msg03477.html
❤7🔥4🥰3🤮1
В руководство по языку Java добавил главу про Взаимодействие с нативным кодом с помощью JNI и Foreign Functions и Memory API
https://metanit.com/java/tutorial/16.1.php
#java
https://metanit.com/java/tutorial/16.1.php
#java
🔥13👍5👏1
Реализация кэширования на бэкенде
(продолжение предыдущего поста)
→ Кэширование — это процесс хранения часто используемых данных в быстром слое хранения для снижения задержки и нагрузки на бэкенд.
→ Оно повышает производительность, масштабируемость и удобство использования систем бэкенда с высокой нагрузкой.
✓ Почему кэширование важно
→ Сокращает количество повторяющихся запросов к базе данных.
→ Ускоряет время ответа API.
→ Снижает нагрузку на сервер и базу данных.
→ Повышает масштабируемость системы.
✓ Распространённые уровни кэширования
→ Клиентский кэш → кэш браузера, кэш мобильного приложения.
→ Кэш CDN → хранит статические ресурсы ближе к пользователям.
→ Кэш приложения → кэширование в оперативной памяти внутри сервисов бэкенда.
→ Кэш базы данных → кэширование результатов запросов.
✓ Популярные технологии кэширования
→ Redis → хранилище данных в оперативной памяти, поддерживает сохранение данных и сложные структуры данных.
→ Memcached → простое и высокоскоростное кэширование по принципу «ключ‑значение».
→ Кэши CDN → Cloudflare, CloudFront для статического контента.
✓ Стратегии кэширования
→ Cache‑Aside (отложенная загрузка)
✓ Приложение сначала проверяет кэш.
✓ При отсутствии данных в кэше извлекает их из базы данных и сохраняет в кэш.
→ Write‑Through Cache (запись через кэш)
✓ Данные записываются в кэш и базу данных одновременно.
✓ Обеспечивает согласованность данных.
→ Write‑Behind (Write‑Back) Cache (отложенная запись)
✓ Записи сначала попадают в кэш.
✓ База данных обновляется асинхронно.
→ Read‑Through Cache (чтение через кэш)
✓ Кэш автоматически загружает данные из базы данных при отсутствии в кэше.
✓ Что стоит кэшировать
→ Часто используемые данные.
→ Запросы с преобладанием операций чтения.
→ Конфигурационные данные.
→ Данные сессии.
→ Вычисленные или агрегированные результаты.
✓ Стратегии аннулирования кэша
→ Временное устаревание (TTL) → данные автоматически удаляются по истечении заданного времени.
→ Аннулирование на основе событий → кэш очищается при наступлении определённого события.
→ Ручная очистка кэша → принудительное удаление данных из кэша.
→ Версионированные ключи кэша → использование ключей с версиями для управления актуальностью данных.
✓ Типичные проблемы
→ Использование устаревших данных.
→ Несогласованность кэша.
→ «Штурм кэша» (*cache stampede*) при высокой нагрузке.
→ Ограничения по объёму памяти.
✓ Лучшие практики
→ Всегда указывайте TTL для кэшированных данных.
→ Избегайте кэширования сильно изменчивых данных.
→ Тщательно подбирайте ключи кэша.
→ Отслеживайте соотношение попаданий и промахов в кэш.
→ Комбинируйте кэширование с индексированием базы данных.
(продолжение предыдущего поста)
→ Кэширование — это процесс хранения часто используемых данных в быстром слое хранения для снижения задержки и нагрузки на бэкенд.
→ Оно повышает производительность, масштабируемость и удобство использования систем бэкенда с высокой нагрузкой.
✓ Почему кэширование важно
→ Сокращает количество повторяющихся запросов к базе данных.
→ Ускоряет время ответа API.
→ Снижает нагрузку на сервер и базу данных.
→ Повышает масштабируемость системы.
✓ Распространённые уровни кэширования
→ Клиентский кэш → кэш браузера, кэш мобильного приложения.
→ Кэш CDN → хранит статические ресурсы ближе к пользователям.
→ Кэш приложения → кэширование в оперативной памяти внутри сервисов бэкенда.
→ Кэш базы данных → кэширование результатов запросов.
✓ Популярные технологии кэширования
→ Redis → хранилище данных в оперативной памяти, поддерживает сохранение данных и сложные структуры данных.
→ Memcached → простое и высокоскоростное кэширование по принципу «ключ‑значение».
→ Кэши CDN → Cloudflare, CloudFront для статического контента.
✓ Стратегии кэширования
→ Cache‑Aside (отложенная загрузка)
✓ Приложение сначала проверяет кэш.
✓ При отсутствии данных в кэше извлекает их из базы данных и сохраняет в кэш.
→ Write‑Through Cache (запись через кэш)
✓ Данные записываются в кэш и базу данных одновременно.
✓ Обеспечивает согласованность данных.
→ Write‑Behind (Write‑Back) Cache (отложенная запись)
✓ Записи сначала попадают в кэш.
✓ База данных обновляется асинхронно.
→ Read‑Through Cache (чтение через кэш)
✓ Кэш автоматически загружает данные из базы данных при отсутствии в кэше.
✓ Что стоит кэшировать
→ Часто используемые данные.
→ Запросы с преобладанием операций чтения.
→ Конфигурационные данные.
→ Данные сессии.
→ Вычисленные или агрегированные результаты.
✓ Стратегии аннулирования кэша
→ Временное устаревание (TTL) → данные автоматически удаляются по истечении заданного времени.
→ Аннулирование на основе событий → кэш очищается при наступлении определённого события.
→ Ручная очистка кэша → принудительное удаление данных из кэша.
→ Версионированные ключи кэша → использование ключей с версиями для управления актуальностью данных.
✓ Типичные проблемы
→ Использование устаревших данных.
→ Несогласованность кэша.
→ «Штурм кэша» (*cache stampede*) при высокой нагрузке.
→ Ограничения по объёму памяти.
✓ Лучшие практики
→ Всегда указывайте TTL для кэшированных данных.
→ Избегайте кэширования сильно изменчивых данных.
→ Тщательно подбирайте ключи кэша.
→ Отслеживайте соотношение попаданий и промахов в кэш.
→ Комбинируйте кэширование с индексированием базы данных.
Telegram
METANIT.COM
Реализация кэширования на бэкенде
(продолжение в следующем посте)
(продолжение в следующем посте)
👍7❤3💯2