METANIT.COM – Telegram
METANIT.COM
5.77K subscribers
1.64K photos
79 videos
9 files
981 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Управление памятью в Linux
(продолжение предыдущего поста)

1. Введение.

→ Система управления памятью в Linux контролирует, как операционная система использует оперативную память (RAM), пространство подкачки (swap) и виртуальную память.
→ Ядро гарантирует, что каждый процесс получает необходимый объём памяти, сохраняя при этом стабильность и производительность системы.
→ В Linux используется система виртуальной памяти, которая предоставляет каждому процессу собственное изолированное адресное пространство.

2. Виртуальная память

→ Виртуальная память позволяет процессам работать так, будто у них есть доступ к большому непрерывному объёму памяти — даже если физическая оперативная память меньше.
→ Linux сопоставляет виртуальную память с физической с помощью таблиц страниц.
→ Обеспечивает:
 → Изоляцию между процессами;
 → Эффективное использование оперативной памяти;
 → Поддержку крупных приложений.

3. Страничная организация памяти (paging)

→ Память разделена на небольшие блоки фиксированного размера — страницы (обычно 4 КБ).
→ Ядро загружает страницы программы в оперативную память по мере необходимости.
→ Если оперативная память заполнена, неиспользованные страницы перемещаются в пространство подкачки.
→ Страничная организация повышает эффективность многозадачности.

4. Роль блока управления памятью (MMU, Memory Management Unit)

→ MMU — это аппаратный компонент, который преобразует виртуальные адреса в физические.
→ Сохраняет преобразования в кэше, называемом TLB (Translation Lookaside Buffer, буфер ассоциативной трансляции).
→ Быстродействие доступа к памяти зависит от эффективного использования MMU и TLB.

5. Распределение физической памяти

→ В Linux используются два основных распределителя памяти:
 → Система buddy (Buddy System) — выделяет большие непрерывные блоки памяти.
 → Распределитель slab (Slab Allocator) — выделяет память для объектов ядра (inodes, дескрипторы файлов).

→ Обеспечивает минимальную фрагментацию и более быстрое выделение памяти.

6. Пространство подкачки (swap)

→ Swap — это область на диске, используемая как буфер переполнения, когда физическая оперативная память заполнена.
→ Неактивные страницы перемещаются в swap.
→ Помогает системе работать стабильно, но работает значительно медленнее, чем оперативная память.

→ Команды:
 → swapon -s — просмотр информации о swap;
 → free -h — проверка использования swap.

7. Зоны памяти

→ Linux разделяет физическую память на зоны в зависимости от аппаратных ограничений:
 → ZONE_DMA — память, используемая для прямого доступа к памяти (DMA).
 → ZONE_NORMAL — обычная память, доступная ядру.
 → ZONE_HIGHMEM — верхняя память, не отображаемая напрямую ядром (в 32‑битных системах).

→ Помогает ядру распределять память в зависимости от архитектуры системы.

8. Кэширование и буферы

→ Linux использует свободную память для кэширования, чтобы повысить производительность.
→ Типы:
 → Page Cache — хранит недавно использованные файлы.
 → Buffer Cache — хранит метаданные для ускоренного доступа к диску.

→ Кэшированные данные автоматически освобождаются, когда программам требуется больше памяти.

9. OOM Killer (Out‑of‑Memory Killer, «убийца при нехватке памяти»)

→ Когда память и swap полностью использованы, Linux запускает OOM Killer.
→ Выбирает и завершает процессы, потребляющие много памяти, чтобы освободить оперативную память.
→ Предотвращает зависание системы.

10. Инструменты мониторинга памяти

→ Распространённые команды для проверки использования памяти:
 → free -h — обзор оперативной памяти и swap;
 → top — использование памяти процессами в реальном времени;
 → htop — интерактивный монитор памяти;
 → vmstat — статистика виртуальной памяти;
 → cat /proc/meminfo — подробная информация о памяти.

11. Интерфейсы памяти в /proc

→ Linux предоставляет информацию о памяти через файловую систему proc:
 → /proc/meminfo — обзор памяти;
 → /proc/<pid>/maps — структура памяти процесса;
 → /proc/<pid>/smaps — детальное использование по сегментам памяти.
8👍2💯2
→ Полезно для отладки утечек памяти и анализа распределения памяти процессами.

12. NUMA (Non‑Uniform Memory Access, неоднородный доступ к памяти)

→ На серверах с несколькими процессорами время доступа к памяти зависит от процессора.
→ Linux поддерживает распределение памяти с учётом NUMA для оптимизации производительности.
→ Гарантирует, что процессы используют память, расположенную ближе к процессору, на котором они выполняются.
6🔥1🥰1
Как с помощью Python проверить использование памяти
#python
💩20👍5🔥3👏2
This media is not supported in your browser
VIEW IN TELEGRAM
Теория графов наглядно на примере кубика-рубика
🤓32🤔176👍3🤯3😐1
AOT-компиляция приложения на C# с каждой новой версии .NET все производительнее и производительнее. Так, .NET 10 показывает снижение размера бинарника на 13,9%
С другой стороны, обычный Hello World размером в 1 Мб по сравнению с 10 Кб аналогичной программы на Си это, конечно, дико.
👍32🔥2👏1🤔1🤡1
Хабр и ЭКОПСИ провели масштабное исследование на основании опроса более 30000 айтишников и составили новый рейтинг IT-брендов работодателей.

Основные тренды: компании перестраиваются, команды меняются, новых работодателей почти нет, а конкуренция обострилась и среди специалистов, и среди компаний, рост зарплат в IT-сфере замер, повышение производительности труда (прежде всего, за счёт сокращения издержек). Из-за высокой ключевой ставки ЦБ многим закредитованным компаниям трудно поддерживать инвестпроекты и развивать новые направления. В результате за этот год мы увидели серию масштабных сокращений сотрудников. Часть компаний прекратила активный найм, другие существенно сокращают бюджеты на «нецелевые расходы».

1-ое место рейтинга заняла Авиасейлс (привлекательность — 91%, узнаваемость — 97%). Авито на 2-м (привлекательность — 88%, узнаваемость — 98%). На 3-м месте 2ГИС: ее привлекательность — 86%, узнаваемость — 97%.

Полный обзор: https://habr.com/ru/specials/965986/
🔥2🥰2👏1😁1
Rust опередил C/C++ по объёму кода, добавляемого в платформу Android

Использование Rust при разработке системных компонентов Android началось в 2020 году. В 2025 году объём нового кода на Rust в Android превысил объём добавляемого за год кода на C и C++.

Кроме того, в 2025 году впервые доля уязвимостей, вызванных ошибками при работе с памятью, оказалось меньше 20% от общего числа уязвимостей. Для сравнения в 2024 году этот показатель в Android составлял 24%, а в 2019 году - 76%. При этом средний показатель по индустрии продолжает оставаться на уровне 70%.

Также внедрение Rust положительно повлияло на скорость, продуктивность и качество разработки. Для кода на Rust зафиксировано в 4 раза меньше откатов изменений в результате выявления непредвиденных ошибок, а также снижение времени рецензирования на 25%.

https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html
26🤮15👍4🔥2🤔2👎1💊1
Пример стека микросервисов для продакшена

1. API‑шлюз (API Gateway)
Единая точка входа для всех клиентских запросов. Обеспечивает маршрутизацию, фильтрацию и балансировку нагрузки.

2. Реестр сервисов (Service Registry)
Каталог всех доступных сервисов. Шлюз использует его для обнаружения сервисов. Примеры: Consul, Eureka, Zookeeper.

3. Сервисный слой (Service Layer)
Отдельные микросервисы, выполняющие конкретные бизнес‑функции.

4. Сервер авторизации (Authorization Server)
Обеспечивает безопасность микросервисов и управляет контролем доступа.

5. Хранилище данных
Базы данных приложения.

6. Распределённое кэширование
Повышает производительность за счёт уровней кэширования.

7. Асинхронная коммуникация
Очереди сообщений обеспечивают асинхронное взаимодействие между сервисами.

8. Визуализация метрик
Сервисы передают метрики в Prometheus, которые отображаются на панелях Grafana.

9. Агрегация логов
Централизованное логирование с использованием стека ELK.
❤‍🔥4👍42🤡1
Сравнение различных форматов данных. JSON vs CSV vs TOON sv YAML
👍24🤔3👏2🤡1
Machine Learning vs Deep Learning vs Generative AI (Машинное обучение vs Глубокое обучение vs Генеративный ИИ)
(продолжение в следующем посте)
1👍1
Machine Learning vs Deep Learning vs Generative AI (Машинное обучение vs Глубокое обучение vs Генеративный ИИ)
(продолжение предыдущего поста)

В чем реальная разница? Краткий обзор:

1️⃣ Машинное обучение (ML)
* Работает с структурированными данными (например, CSV‑файлы, файлы Excel).
* Использует простые алгоритмы, такие как деревья решений, метод опорных векторов (SVM) и др.
* Лучше всего подходит для таких задач, как выявление мошенничества, одобрение кредитов, классификация спама.
* Быстрое обучение, простая интерпретация результатов.
* Инструменты: scikit‑learn, XGBoost.

2️⃣ Глубокое обучение (DL)
* Подраздел машинного обучения, использующий нейронные сети (CNN, RNN, трансформеры).
* Работает со сложными данными — изображениями, аудио, длинными текстами.
* Лежит в основе систем распознавания лиц, голосовых помощников, машинного перевода.
* Требует больше вычислительных ресурсов и данных.
* Инструменты: TensorFlow, PyTorch, Keras.

3️⃣ Генеративный ИИ (GenAI)
* Подраздел глубокого обучения, создающий новый контент — текст, изображения, видео.
* Построен на трансформерах, таких как GPT, DALL·E, Stable Diffusion.
* Лежит в основе ChatGPT, Claude, Midjourney.
* Требует огромных объёмов данных и графических процессоров (GPU)/тензорных процессоров (TPU).
* Результат — не просто метка, а полноценный контент.
* Инструменты: Hugging Face, OpenAI API, Midjourney.
1👍1
Простой способ запомнить основные синусы и косинусы
🦄28🔥19🤓7👏54🥴3🤔1🤣1
В руководство по языку C# и .NET добавлены новые статьи:

Определение составных операторов присваивания
https://metanit.com/sharp/tutorial/3.63.php

Типизированные блоки расширений
https://metanit.com/sharp/tutorial/3.64.php

#csharp #dotnet
25👍10🫡3🤮2
4 типа виртуализации
(описание в следующем посте)
7👍3🥰1
4 типа виртуализации
(продолжение предыдущего поста)

1. Традиционная (Bare Metal) :
* Приложения используют одну операционную систему без изоляции процессов друг от друга.
* На рисунке показаны 3 приложения (APP 1, APP 2, APP 3), работающие в рамках одной ОС.
* Архитектура включает:
- Операционная система (Operating System);
- Физический сервер (Physical Server);
- Сетевая инфраструктура (Networking).
* Ключевая особенность: отсутствие изоляции между приложениями.

2. Виртуализированная(VM-based / на основе виртуальных машин):
* Используется аппаратная виртуализация: для каждой виртуальной машины (VM) запускается полноценная ОС.
* Пример: VM 1 с приложениями APP 1 и APP 2, VM 2 с приложением APP 3 и ОС Fedora.
* Архитектура включает:
- Гипервизор (Hypervisor) — эмулирует аппаратное обеспечение для каждой гостевой ОС (Guest OS);
- Гостевые ОС (Guest OS) в каждой VM;
- Физический сервер (Physical Server);
- Сетевая инфраструктура (Networking).
* Ключевая особенность: полная изоляция ОС в каждой VM благодаря гипервизору.

3. Containerized — Контейнеризация:
* Виртуализация на уровне ОС: изоляция процессов, а не полноценных ОС.
* На рисунке показаны контейнеры с приложениями (APP 1, APP 2) и базой данных (MySQL).
* Архитектура включает:
- Контейнеры (Container) с приложениями;
- Контейнерный движок (Container Engine) — управляет жизненным циклом контейнеров, сетевым взаимодействием и изоляцией;
- Хост-операционная система (Host Operating System) с общим ядром (shared kernel);
- Физический сервер (Physical Server);
- Сетевая инфраструктура (Networking).
* Ключевая особенность: лёгкость и быстрота запуска за счёт использования общего ядра ОС.

4. Контейнеры на виртуальных машинах:
* Комбинация виртуализации и контейнеризации, часто используется в облачных решениях.
* Пример: VM 1 с контейнерами APP 1 и APP 2, VM 2 с контейнером APP 3.
* Архитектура включает:
- Виртуальные машины (VM 1, VM 2) с гостевыми ОС (Guest OS, например, Fedora);
- Контейнерные движки (Container Engine) внутри каждой VM;
- Контейнеры с приложениями;
- Гипервизор (Hypervisor) для эмуляции аппаратного обеспечения гостевых ОС;
- Физический сервер (Physical Server);
- Сетевая инфраструктура (Networking).
* Ключевая особенность: сочетание изоляции VM и лёгкости контейнеров — баланс между безопасностью и производительностью.
7👍3🔥1
Крупные IT-компании обяжут к 1 июня 2026 года заключить с вузами и колледжами соглашения о мерах поддержки, сообщил замминистра цифрового развития Сергей Кучушев. Речь идет как о финансовой поддержке, так и помощи в подготовке кадров. Если же IT-компании не сделают это, их лишат льгот и брони для сотрудников от военной службы.

Представитель Минцифры сообщил, что нововведение коснется только IT-компаний с выручкой более 1 млрд руб. в год и с численностью сотрудников не менее 100 человек. Они должны будут выделять на поддержку высших учебных заведений до 5% от средств, сэкономленных благодаря налоговым льготам.

Помимо финансовой поддержки, IT-компании смогут помочь вузам в обновлении образовательной программы по профильным специальностям и дисциплинам. Их сотрудники смогут проводить в вузах занятия, устраивать студентов на стажировки.

https://www.vedomosti.ru/technology/articles/2025/11/17/1155350-krupnie-it-kompanii-dolzhni-dogovoritsya-s-vuzami
🤡19👍6😁51👎1🔥1
В новой статье Института Брукингса предполагается, что революция искусственного интеллекта может развиваться по классической схеме «подъём-спад» — хотя и не на рынках, а в заработной плате.

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

Однако по мере того, как системы ИИ осваивают всё больше задач, спрос на работников в этих областях может снижаться, что потенциально вынуждает людей переходить на менее ценные или менее перспективные должности и сводит на нет эти первоначальные достижения.

Производство продолжает расти, даже несмотря на рост заработной платы, что показывает, как выгоды всё больше перетекают в капитал, а не в рабочую силу.

По мере автоматизации когнитивных процессов люди переходят на более медленно растущие физические виды деятельности — от строительства до ухода за больными, — что приводит к снижению заработной платы.

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

«Даже если автоматизация сначала повышает заработную плату, в конечном итоге она может привести к её значительному снижению», — отмечают авторы.

Чтобы предотвратить негативный эффект от этой кривой, авторы предлагают замедлить темпы автоматизации и инвестировать в физический капитал — машины, оборудование и инструменты — чтобы человеческий труд оставался продуктивным даже в условиях исчезновения цифровых задач.
Они также предлагают обложить налогом виртуальные заменители личных услуг, чтобы предотвратить опустошение целых отраслей искусственным интеллектом.

https://www.businessinsider.com/ai-impact-on-wages-boom-bust-academic-analysis-2025-11
10👍5🤔2🤡2