METANIT.COM – Telegram
METANIT.COM
5.98K subscribers
1.69K photos
81 videos
9 files
1.08K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Вкратце о семантическом версионировании
👍15
7 шаблонов проектирования многопоточности
Многопоточность — это вычислительная модель, которая позволяет одной программе (процессу) выполнять несколько потоков (действий) одновременно. Потоки совместно используют одни и те же ресурсы процесса (пространство памяти, открытые файлы и т. д.).
Хотя многопоточность открывает огромные возможности для повышения производительности и повышения отзывчивости приложений, она также создает такие сложности, как синхронизация, связь и потенциальные условия гонки.
Шаблоны проектирования многопоточности представляют собой многоразовые решения, позволяющие решать такие распространенные проблемы.

[1.] Модель «Производитель-Потребитель» (Producer-Consumer)
◾️ Этот шаблон включает два типа потоков: производители, которые генерируют данные, и потребители, которые обрабатывают эти данные.
◾️ Эти два типа потоков взаимодействуют через общую очередь, которая действует как буфер между ними.

Когда использовать?
◾️ Когда задачи можно разделить на отдельные этапы производства и потребления, и надо отвязать эти действия друг от друга для повышения параллелизма и эффективности.

[2.] Пул потоков (Thread Pool)
◾️ Поддерживает пул рабочих потоков, которые можно повторно использовать для выполнения задач.
◾️ Это позволяет избежать накладных расходов на создание и уничтожение потоков для каждой задачи.

Когда использовать?
◾️ Когда есть большое количество краткосрочных задач и надо управлять количеством потоков для лучшего использования ресурсов и производительности.

[3.] Future и Promise (промисы)
◾️ Представляет результат асинхронной операции.
◾️ Промис — это объек, содержащий конечный результат, а future предоставляет способ доступа к этому результату, когда он станет доступен.

Когда использовать?
◾️ При работе с длительными операциями, которые необходимо выполнять одновременно, не блокируя основной поток.


[4.] Монитор (Monitor Object)
◾️ Предоставляет механизм синхронизации доступа к общим ресурсам.
◾️ Позволяет только одному потоку выполнять критическую секцию кода одновременно, предотвращая возникновение состояний гонки.

Когда использовать?
◾️ Когда вам необходимо защитить общие данные или ресурсы от одновременного доступа и обеспечить безопасность потоков.


[5.] Блокировка чтения-записи (Read-Write Lock)
◾️ Позволяет нескольким потокам одновременно читать данные из общего ресурса, но позволяет записывать данные в него только одному потоку одновременно.

Когда использовать?
◾️ Если у вас есть общий ресурс, где операции чтения выполняются чаще, чем записи, и вы хотите оптимизировать его для одновременного чтения.


[6.] Барьер (Barrier)
◾️ Синхронизирует группу потоков для ожидания в общей точке перед продолжением работы.

Когда использовать?
◾️ Когда у вас есть параллельные задачи, которые необходимо выполнить на определенном этапе, прежде чем перейти к следующему этапу.

[7.] Активный объект (Active Object)
◾️ Разделяет выполнение метода и вызов метода для параллельных систем.
◾️ Он включает в себя объект с собственным потоком управления и планировщик для постановки в очередь и выполнения запросов.

Когда использовать?
◾️ Когда надо инкапсулировать управление потоками и логику планирования в объекте, предоставляя более понятный интерфейс для параллельных операций.
👍11👨‍💻31👏1
Процесс загрузки Linux
🔥9👍5👏1
Исследование состояния Rust 2024: большинство разработчиков Rust беспокоятся о будущем языка, отмечают его недостаточное распространение, сложность и слабую поддержку.

В рамках опроса State of Rust за 2024 год было опрошено около 10000 разработчиков на Rust на тему состояния экосистемы. И как показал опрос, что использование Rust не растет так, как ожидалось, несмотря на его преимущества в плане безопасности и несмотря на рекомендации известных организаций, включая правительство США и компании, включая Microsoft, в основном по соображениям безопасности.

Только 38,2% (из программистов) и 45,5% (из организаций) заявили, что используют Rust более менее на постоянной основе. Хотя эти цифры выросли с 2023 года, они также показывают, что многие респонденты пока не могут в полной мере использовать Rust для работы.

На вопрос о том, что их больше всего беспокоит в будущем Rust, 45,5% указали «недостаточное использование в технологической отрасли», что выше 42,5% в прошлом году, что немного больше 45,2%, которые назвали сложность проблемой. Другие существенные опасения включают в себя слишком слабую поддержку разработчиков и сопровождающих Rust, а также проблемы управления проектом. Только 18,6% заявили, что их «ничего не беспокоит», хотя это небольшое улучшение по сравнению с 17,8% в 2023 году.
Таким образом, сложность языка и недостаточная поддержка сдерживают распространение языка Rust.

Rust подходит для системного программирования, но, судя по опросу, он также популярен для общего использования. Самая большая категория использования — серверные приложения (53,4%), за которыми следуют распределенные системы (25,3%) и приложения облачных вычислений (24,3%).
Разработчики Rust в основном используют Linux (73,7 процента). Далее идут macOS (32,4 процента) и Windows (29,8 процента), хотя 13,3 процента разработчиков на Windows используют WSL (подсистема для Linux).
#rust
https://devclass.com/2025/02/18/state-of-rust-survey-2024-most-rust-developers-worry-about-the-future-of-the-language/
🤔6💊2
Шпаргалка по классам в JavaScript #javanoscript #js
👍6
.NET 10 увеличил производительность IEnumerable в 8 раз
В .NET 9 стоимость цикла по массиву через IEnumerable составляла 83% по сравнению с прямой итерацией массива, тогда как в .NET 10 стоимость составляла всего 10%
#dotnet #csharp
👍16😱13🙏2🔥1
Ключевые алгоритмы для анализа AI

🔹 Анализ текста — извлечение информации из текстовых данных
🔹 Регрессия — прогнозирование непрерывных значений
🔹 Классификация — разбиение на классы при принятии решений
🔹 Обнаружение аномалий — выявление редких закономерностей
🔹 Рекомендательные системы — прогнозирование предпочтений пользователей
🔹 Классификация изображений — распознавание объектов с использованием глубокого обучения
🔹 Кластеризация — группировка схожих точек данных
🤝4👍2👏1🤯1
Команды по управлению дисками в Linux #linux
👍8
Как работает PostgreSQL #postgresql
👍5🔥21
Команда разработчиков языка Rust выпустила новую версию языка - 1.85.0 и вместе с тем новое издание языка - Rust 2024.
Издания языка — это механизм для внесения изменений, которые могут представлять риск обратной совместимости. Предыдущее издание Rust 2021 вышло 3 с половиной года назад.
Новое издание (1.85.0) содержит ряд небольших изменений языка, новые API и изменения в стандартной библиотке, а также в инфраструктуре пакетного менеджера Cargo и форматировщике Rustfmt
https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html
Во многих случаях для автоматизации изменений необходимо только выполнить команду cargo fix
#rust
👍16🤮21🔥1👏1
ОТрисовка различных диаграмм и графиков на языке Python #python
👍17🔥84