Memcached представляет распространенную систему кэширования в памяти.
Memcached изначально был создан 2003 для решения проблемы производительности в LiveJournal, популярной платформе для ведения блогов. Изначално он был написан на 𝐏𝐞𝐫𝐥, но вскоре переписан на 𝐂.
Идея была проста => хранить часто используемые данные в памяти, чтобы избежать повторного обращения к базе данных.
В 2004 году Memcached стал проектом с открытым исходным кодом.
Основные характеристики:
◾️ Memcached — это быстрая распределенная система кэширования в памяти, используемая для ускорения работы приложений за счет хранения данных в оперативной памяти.
◾️ Он работает путем хранения пар «ключ-значение» и их быстрого извлечения при необходимости.
◾️ Это снижает необходимость доступа к более медленным источникам данных, таким как базы данных, что приводит к сокращению времени отклика и повышению производительности.
◾️ Memcached особенно эффективен для кэширования часто используемых данных, таких как результаты запросов к базе данных, ответы API и информация о сеансе.
Вкратце процесс работы
Приложение отправляет команду 𝐬𝐞𝐭
◾️ Приложение указывает ключ, значение и (необязательно) срок действия.
◾️ Узел Memcached вычисляет хэш ключа, чтобы определить, где хранить элемент в своей хэш-таблице.
Приложение отправляет команду 𝐠𝐞𝐭 -
◾️ Приложение предоставляет ключ.
◾️ Узел Memcached вычисляет хэш, находит элемент в хэш-таблице и возвращает значение приложению.
Основные компоненты
[1.] Хэш-таблица
◾️ Memcached использует большую хеш-таблицу, находящуюся в оперативной памяти, для хранения пар ключ-значение.
◾️ Это обеспечивает быстрый поиск со сложностью O(1).
[2.] Алгоритм удаления LRU
◾️ Memcached имеет фиксированный объем памяти.
◾️ Когда он заполняется, он применяет алгоритм LRU, который удаляет старые, наименее используемые элементы, освобождая место для новых.
[3.] Распределение памяти на блоки
◾️ Для эффективного управления памятью Memcached делит выделенную память на «блоки» разных размеров.
◾️ Это предотвращает фрагментацию памяти и повышает производительность.
[4.] Простой текстовый протокол
◾️ Memcached взаимодействует с клиентами (вашими приложениями) с помощью простого текстового протокола.
[5.] Распределенная архитектура
◾️ Memcached можно развернуть на нескольких серверах.
◾️ Это позволяет масштабировать его горизонтально и обеспечивает отказоустойчивость.
Ограничения
[1.] Данные не сохраняются
◾️ Данные теряются в случае сбоя или перезапуска сервера, поскольку Memcached хранит данные исключительно в памяти.
[2.] Отсутствие резервирования данных
◾️ Если вы используете один экземпляр Memcached, то нет встроенного резервирования для защиты от потери данных.
[3.] Ограниченные типы данных
◾️ Данные хранятся в виде простых пар «ключ-значение», что может не подходить для сложных структур данных.
Если несколько клиентов одновременно запрашивают кэшированный элемент, срок действия которого истек, они все могут одновременно обратиться к внутренней базе данных, что приведет к проблемам с производительностью.
Memcached изначально был создан 2003 для решения проблемы производительности в LiveJournal, популярной платформе для ведения блогов. Изначално он был написан на 𝐏𝐞𝐫𝐥, но вскоре переписан на 𝐂.
Идея была проста => хранить часто используемые данные в памяти, чтобы избежать повторного обращения к базе данных.
В 2004 году Memcached стал проектом с открытым исходным кодом.
Основные характеристики:
◾️ Memcached — это быстрая распределенная система кэширования в памяти, используемая для ускорения работы приложений за счет хранения данных в оперативной памяти.
◾️ Он работает путем хранения пар «ключ-значение» и их быстрого извлечения при необходимости.
◾️ Это снижает необходимость доступа к более медленным источникам данных, таким как базы данных, что приводит к сокращению времени отклика и повышению производительности.
◾️ Memcached особенно эффективен для кэширования часто используемых данных, таких как результаты запросов к базе данных, ответы API и информация о сеансе.
Вкратце процесс работы
Приложение отправляет команду 𝐬𝐞𝐭
◾️ Приложение указывает ключ, значение и (необязательно) срок действия.
◾️ Узел Memcached вычисляет хэш ключа, чтобы определить, где хранить элемент в своей хэш-таблице.
Приложение отправляет команду 𝐠𝐞𝐭 -
◾️ Приложение предоставляет ключ.
◾️ Узел Memcached вычисляет хэш, находит элемент в хэш-таблице и возвращает значение приложению.
Основные компоненты
[1.] Хэш-таблица
◾️ Memcached использует большую хеш-таблицу, находящуюся в оперативной памяти, для хранения пар ключ-значение.
◾️ Это обеспечивает быстрый поиск со сложностью O(1).
[2.] Алгоритм удаления LRU
◾️ Memcached имеет фиксированный объем памяти.
◾️ Когда он заполняется, он применяет алгоритм LRU, который удаляет старые, наименее используемые элементы, освобождая место для новых.
[3.] Распределение памяти на блоки
◾️ Для эффективного управления памятью Memcached делит выделенную память на «блоки» разных размеров.
◾️ Это предотвращает фрагментацию памяти и повышает производительность.
[4.] Простой текстовый протокол
◾️ Memcached взаимодействует с клиентами (вашими приложениями) с помощью простого текстового протокола.
[5.] Распределенная архитектура
◾️ Memcached можно развернуть на нескольких серверах.
◾️ Это позволяет масштабировать его горизонтально и обеспечивает отказоустойчивость.
Ограничения
[1.] Данные не сохраняются
◾️ Данные теряются в случае сбоя или перезапуска сервера, поскольку Memcached хранит данные исключительно в памяти.
[2.] Отсутствие резервирования данных
◾️ Если вы используете один экземпляр Memcached, то нет встроенного резервирования для защиты от потери данных.
[3.] Ограниченные типы данных
◾️ Данные хранятся в виде простых пар «ключ-значение», что может не подходить для сложных структур данных.
Если несколько клиентов одновременно запрашивают кэшированный элемент, срок действия которого истек, они все могут одновременно обратиться к внутренней базе данных, что приведет к проблемам с производительностью.
👍7❤1
Как масштабировать компонент?
✅ Вертикальное и горизонтальное масштабирование
Самый простой способ масштабирования компонента — вертикальное масштабирование.
Стандартная стратегия - увеличение объема оперативной памяти., больший диск или более мощный процессор.
Экономически эффективно в краткосрочной перспективе. Плюс, избегаем усложения, которое есть в распределенных архитектурах
Но в долгосрочной перспективе становится дорогостоящим и не позволяет увеличить отказоустойчивость
Горизонтальное масштабирование компонента происходит путем добавления большего количества машин.
✅ Горизонтальное масштабирование приложений без сохранения состояния
Компонент без сохранения состояния не сохраняет клиентские данные из одного сеанса для использования в следующем сеансе. Это облегчает горизонтальное масштабирование.
Для распределения запросов между несколькими компонентами без сохранения состояния можно использовать балансировщик нагрузки.
✅ Горизонтально масштабируемые компоненты с отслеживанием состояния
Компонент с отслеживанием состояния сохраняет данные из одного сеанса в следующий.
Например, веб-приложение, которое хранит информацию о сеансе. Или база данных/хранилище ключей и значений.
Для масштабирования компонентов с отслеживанием состояния придется использовать такие методы, как репликация, сегментирование и т. д.
👉 НЕкоторые аспекты:
- Вертикальное масштабирование менее сложное, и обычно подходит для большинства приложений.
- На горизонтальное масштабирование обычно переходят, когда вертикальное масштабирование больше не является экономически эффективным.
- Сначала лучше построить уровень приложения без сохранения состояния, иак как его легче масштабировать.
- Для компонентов с сохранением состояния, таких как базы данных, лучше выбирать современные варианты, разработанные для горизонтальной масштабируемости.
✅ Вертикальное и горизонтальное масштабирование
Самый простой способ масштабирования компонента — вертикальное масштабирование.
Стандартная стратегия - увеличение объема оперативной памяти., больший диск или более мощный процессор.
Экономически эффективно в краткосрочной перспективе. Плюс, избегаем усложения, которое есть в распределенных архитектурах
Но в долгосрочной перспективе становится дорогостоящим и не позволяет увеличить отказоустойчивость
Горизонтальное масштабирование компонента происходит путем добавления большего количества машин.
✅ Горизонтальное масштабирование приложений без сохранения состояния
Компонент без сохранения состояния не сохраняет клиентские данные из одного сеанса для использования в следующем сеансе. Это облегчает горизонтальное масштабирование.
Для распределения запросов между несколькими компонентами без сохранения состояния можно использовать балансировщик нагрузки.
✅ Горизонтально масштабируемые компоненты с отслеживанием состояния
Компонент с отслеживанием состояния сохраняет данные из одного сеанса в следующий.
Например, веб-приложение, которое хранит информацию о сеансе. Или база данных/хранилище ключей и значений.
Для масштабирования компонентов с отслеживанием состояния придется использовать такие методы, как репликация, сегментирование и т. д.
👉 НЕкоторые аспекты:
- Вертикальное масштабирование менее сложное, и обычно подходит для большинства приложений.
- На горизонтальное масштабирование обычно переходят, когда вертикальное масштабирование больше не является экономически эффективным.
- Сначала лучше построить уровень приложения без сохранения состояния, иак как его легче масштабировать.
- Для компонентов с сохранением состояния, таких как базы данных, лучше выбирать современные варианты, разработанные для горизонтальной масштабируемости.
Microsoft не будет поддерживать в Windows 11 24H2 процессоры Intel 8-го, 9-го и 10-го поколений от OEM производителей
Microsoft представила официальный список поддерживаемых процессоров в Windows 11 24H2. В него вошли процессоры AMD Ryzen 2019 года (Ryzen 2000, Ryzen 3000 и Ryzen 5000) и новее, но НЕ вошли процессоры Intel Core 8-го, 9-го и 10-го поколений от OEM производителей. Официально новая Windows 11 теперь поддерживает только Intel 12-го поколения и новее.
Если же у пользователя уже есть компьютер со старым процессором, то проблем с обновлениями Windows 11 не будет, когда пользователи подпишут отказ от ответственности за любой ущерб, который может произойти после установки на старый компьютер новой операционной системы. Но если производитель выпустит новый ПК со старыми процессорами, включая чипы Intel 8-10-го поколений, то ПК на этой сборке не сможет получить последнюю версию Windows 11.
Microsoft заявил, что Windows 11 будет поддерживать только те процессоры, которые отвечают принципам обеспечения безопасности и надёжности. Тем, кто использует Windows 11 на На ПК с Intel Core 8-го, 9-го и 10-го поколений (причём эти процессоры поддерживают TPM 2.0, который является аппаратной функцией безопасности, необходимой для установки новой ОС), включая Core i9-9900K и Core i9-10900K, рекомендуется перейти на более актуальное оборудование.
https://learn.microsoft.com/en-us/windows-hardware/design/minimum/supported/windows-11-24h2-supported-intel-processors
Microsoft представила официальный список поддерживаемых процессоров в Windows 11 24H2. В него вошли процессоры AMD Ryzen 2019 года (Ryzen 2000, Ryzen 3000 и Ryzen 5000) и новее, но НЕ вошли процессоры Intel Core 8-го, 9-го и 10-го поколений от OEM производителей. Официально новая Windows 11 теперь поддерживает только Intel 12-го поколения и новее.
Если же у пользователя уже есть компьютер со старым процессором, то проблем с обновлениями Windows 11 не будет, когда пользователи подпишут отказ от ответственности за любой ущерб, который может произойти после установки на старый компьютер новой операционной системы. Но если производитель выпустит новый ПК со старыми процессорами, включая чипы Intel 8-10-го поколений, то ПК на этой сборке не сможет получить последнюю версию Windows 11.
Microsoft заявил, что Windows 11 будет поддерживать только те процессоры, которые отвечают принципам обеспечения безопасности и надёжности. Тем, кто использует Windows 11 на На ПК с Intel Core 8-го, 9-го и 10-го поколений (причём эти процессоры поддерживают TPM 2.0, который является аппаратной функцией безопасности, необходимой для установки новой ОС), включая Core i9-9900K и Core i9-10900K, рекомендуется перейти на более актуальное оборудование.
https://learn.microsoft.com/en-us/windows-hardware/design/minimum/supported/windows-11-24h2-supported-intel-processors
Docs
Windows processor requirements Windows 11, version 24H2 supported Intel processors
This specification details the Intel processors that can be used with Windows 11, version 24H2 customer systems that include Windows products, including custom images.
🤡23😁13🤣7👍1
Исследование сотрудников Microsoft и Университета Карнеги показало, что, чем больше люди полагаются на инструменты генеративного ИИ для выполнения своих задач, тем меньше у них наблюдается навыков критического мышления.
Исследователи опросили 319 работников умственного труда, связанных с обработкой данных или информации. Их попросили подробно рассказать об использовании GenAI на рабочем месте. Так, нужно было уточнить, для каких конкретно задач применяется ИИ, каким образом, а также оценить уверенность в способности инструмента справиться с задачей. Наконец, участников просили уточнить, как они оценивают свои способности по выполнению каждой задачи без участия ИИ.
В ходе исследования выявилась, что, чем больше работник уверен в способности ИИ выполнить задачу, то тем меньше он полагается на критическое мышление и склонен проверять результаты работы инструмента. Чаще всего речь шла о выполнении простых задач.
Ещё один вывод исследования заключается в том, что у пользователей с доступом к генеративным инструментам, как правило, меньше вариантов решений одной задачи по сравнению с теми, у кого нет такого доступа. Исследователи объяснили это тем, что генеративный ИИ ограничен обучающими данными, поэтому выдаёт более однообразные результаты. Работа с таким материалом также может негативно сказываться на навыках критического мышления у работников.
Исследователи резюмировали, что хотя ИИ-инструменты и помогают повысить эффективность работы, но могут препятствовать критическому вовлечению и в долгосрочной перспективе могут также вызвать чрезмерную зависимость и снизить навыки поиска решения проблем.
https://www.microsoft.com/en-us/research/uploads/prod/2025/01/lee_2025_ai_critical_thinking_survey.pdf
Исследователи опросили 319 работников умственного труда, связанных с обработкой данных или информации. Их попросили подробно рассказать об использовании GenAI на рабочем месте. Так, нужно было уточнить, для каких конкретно задач применяется ИИ, каким образом, а также оценить уверенность в способности инструмента справиться с задачей. Наконец, участников просили уточнить, как они оценивают свои способности по выполнению каждой задачи без участия ИИ.
В ходе исследования выявилась, что, чем больше работник уверен в способности ИИ выполнить задачу, то тем меньше он полагается на критическое мышление и склонен проверять результаты работы инструмента. Чаще всего речь шла о выполнении простых задач.
Ещё один вывод исследования заключается в том, что у пользователей с доступом к генеративным инструментам, как правило, меньше вариантов решений одной задачи по сравнению с теми, у кого нет такого доступа. Исследователи объяснили это тем, что генеративный ИИ ограничен обучающими данными, поэтому выдаёт более однообразные результаты. Работа с таким материалом также может негативно сказываться на навыках критического мышления у работников.
Исследователи резюмировали, что хотя ИИ-инструменты и помогают повысить эффективность работы, но могут препятствовать критическому вовлечению и в долгосрочной перспективе могут также вызвать чрезмерную зависимость и снизить навыки поиска решения проблем.
https://www.microsoft.com/en-us/research/uploads/prod/2025/01/lee_2025_ai_critical_thinking_survey.pdf
👍14😁4🤔3💯2😭2
Сервис ХабрКарьера подвел зарплатные итоги второго полугодия 2024 на основании 66 008 зарплат. Некоторые итоги:
Медианная зарплата IT-специалистов сейчас — 180 000 ₽, это на 19% больше, чем в первом полугодии 2024, когда медиана выросла на 8%.
Зарплаты ощутимо выросли как по городам, так и по специализациям. В регионах IT-специалистам сейчас платят в среднем 150 000 ₽, в Москве средняя зарплата — 221 000 ₽, а в Санкт-Петербурге — 184 000 ₽.
Ощутимее всего рост — в Нижнем Новгороде (+21%), Самаре (+18%), Красноярске (+17%) и Ростове-на-Дону (+15%).
Ощутимее всего выросли зарплаты специалистов по информационной безопасности (+21%) и тестировщиков (+20%).
По специализациям. Наиболее ощутимый рост зарплаты был у системных инженеров — на 39%, до 200 000 ₽. Заметно выросли зарплаты веб-разработчиков (+20%) — до 120 000 ₽ и фронтендеров (+18%) — до 200 000 ₽. Незначительно выросли зарплаты у ERP-программистов и программистов 1С (+2%). Не изменились зарплаты разработчиков баз данных.
Зарплаты в Objective-С продолжают оставаться самыми высокими, но во второй пол. 2024 медиана снизилась на 2% — до 350 000 ₽. 2-е место делят зарплаты в Elixir и Golang — 300 000 ₽. На 3-ем месте зарплаты Kotlin — 296 000 ₽.
На одну позицию выше поднялись зарплаты в Swift за счёт прироста на 7% и Ruby за счёт роста на 16%. Kotlin и Golang также поднялись выше с небольшим приростом в 2%. А вот оклады разработчиков в Scala снизились на 6% и потеряли третье место.
Если смотреть на динамику, то во втором полугодии 2024 года самый ощутимый рост зарплат был у разработчиков в Ruby — на 16%, до 290 000 ₽. У разработчиков Swift зарплаты выросли на 7%, до 295 000 ₽, а у разработчиков С — на 11%, до 200 000 ₽, хотя оклад в этом языке по-прежнему остается одним из самых низких среди представленных.
Незначительный рост зарплат был у разработчиков в Golang, Kotlin и Javanoscript (+2%).
Совсем не изменились зарплаты разработчиков на PHP.
Зарплаты снизились у программистов Scala — на 6%, до 270 000 ₽, Elixir — на 1%, до 300 000 ₽ и Oblective-C — на 2%, до 350 000 ₽.
По компаниям. Иннотех, Райффайзен Банк и VK по-прежнему входят в топ-5 компаний с самыми высокими зарплатами IT-специалистов, а Авито возглавляет рейтинг с медианной зарплатой в 360 000 ₽.
Зарплата в ИТ-Холдинге Т1 снизилась на 7% и спустилась с третьего места на шестое. А в пятерку компаний-лидеров по зарплате вошел Альфа-Банк с ростом на 10%, до 296 000 ₽.
https://habr.com/ru/specials/883242/
Медианная зарплата IT-специалистов сейчас — 180 000 ₽, это на 19% больше, чем в первом полугодии 2024, когда медиана выросла на 8%.
Зарплаты ощутимо выросли как по городам, так и по специализациям. В регионах IT-специалистам сейчас платят в среднем 150 000 ₽, в Москве средняя зарплата — 221 000 ₽, а в Санкт-Петербурге — 184 000 ₽.
Ощутимее всего рост — в Нижнем Новгороде (+21%), Самаре (+18%), Красноярске (+17%) и Ростове-на-Дону (+15%).
Ощутимее всего выросли зарплаты специалистов по информационной безопасности (+21%) и тестировщиков (+20%).
По специализациям. Наиболее ощутимый рост зарплаты был у системных инженеров — на 39%, до 200 000 ₽. Заметно выросли зарплаты веб-разработчиков (+20%) — до 120 000 ₽ и фронтендеров (+18%) — до 200 000 ₽. Незначительно выросли зарплаты у ERP-программистов и программистов 1С (+2%). Не изменились зарплаты разработчиков баз данных.
Зарплаты в Objective-С продолжают оставаться самыми высокими, но во второй пол. 2024 медиана снизилась на 2% — до 350 000 ₽. 2-е место делят зарплаты в Elixir и Golang — 300 000 ₽. На 3-ем месте зарплаты Kotlin — 296 000 ₽.
На одну позицию выше поднялись зарплаты в Swift за счёт прироста на 7% и Ruby за счёт роста на 16%. Kotlin и Golang также поднялись выше с небольшим приростом в 2%. А вот оклады разработчиков в Scala снизились на 6% и потеряли третье место.
Если смотреть на динамику, то во втором полугодии 2024 года самый ощутимый рост зарплат был у разработчиков в Ruby — на 16%, до 290 000 ₽. У разработчиков Swift зарплаты выросли на 7%, до 295 000 ₽, а у разработчиков С — на 11%, до 200 000 ₽, хотя оклад в этом языке по-прежнему остается одним из самых низких среди представленных.
Незначительный рост зарплат был у разработчиков в Golang, Kotlin и Javanoscript (+2%).
Совсем не изменились зарплаты разработчиков на PHP.
Зарплаты снизились у программистов Scala — на 6%, до 270 000 ₽, Elixir — на 1%, до 300 000 ₽ и Oblective-C — на 2%, до 350 000 ₽.
По компаниям. Иннотех, Райффайзен Банк и VK по-прежнему входят в топ-5 компаний с самыми высокими зарплатами IT-специалистов, а Авито возглавляет рейтинг с медианной зарплатой в 360 000 ₽.
Зарплата в ИТ-Холдинге Т1 снизилась на 7% и спустилась с третьего места на шестое. А в пятерку компаний-лидеров по зарплате вошел Альфа-Банк с ростом на 10%, до 296 000 ₽.
https://habr.com/ru/specials/883242/
Хабр
Зарплаты IT-специалистов во второй половине 2024: +19% к предыдущему полугодию
Подвели зарплатные итоги второго полугодия 2024 — выгрузили 66 008 зарплат, которые IT-специалисты оставили в калькуляторе и посмотрели, сколько они зарабатывали в разных городах, специализациях, языках программирования и даже компаниях. А еще изучили, как…
👍6❤3🤡2
7 шаблонов проектирования многопоточности
Многопоточность — это вычислительная модель, которая позволяет одной программе (процессу) выполнять несколько потоков (действий) одновременно. Потоки совместно используют одни и те же ресурсы процесса (пространство памяти, открытые файлы и т. д.).
Хотя многопоточность открывает огромные возможности для повышения производительности и повышения отзывчивости приложений, она также создает такие сложности, как синхронизация, связь и потенциальные условия гонки.
Шаблоны проектирования многопоточности представляют собой многоразовые решения, позволяющие решать такие распространенные проблемы.
[1.] Модель «Производитель-Потребитель» (Producer-Consumer)
◾️ Этот шаблон включает два типа потоков: производители, которые генерируют данные, и потребители, которые обрабатывают эти данные.
◾️ Эти два типа потоков взаимодействуют через общую очередь, которая действует как буфер между ними.
Когда использовать?
◾️ Когда задачи можно разделить на отдельные этапы производства и потребления, и надо отвязать эти действия друг от друга для повышения параллелизма и эффективности.
[2.] Пул потоков (Thread Pool)
◾️ Поддерживает пул рабочих потоков, которые можно повторно использовать для выполнения задач.
◾️ Это позволяет избежать накладных расходов на создание и уничтожение потоков для каждой задачи.
Когда использовать?
◾️ Когда есть большое количество краткосрочных задач и надо управлять количеством потоков для лучшего использования ресурсов и производительности.
[3.] Future и Promise (промисы)
◾️ Представляет результат асинхронной операции.
◾️ Промис — это объек, содержащий конечный результат, а future предоставляет способ доступа к этому результату, когда он станет доступен.
Когда использовать?
◾️ При работе с длительными операциями, которые необходимо выполнять одновременно, не блокируя основной поток.
[4.] Монитор (Monitor Object)
◾️ Предоставляет механизм синхронизации доступа к общим ресурсам.
◾️ Позволяет только одному потоку выполнять критическую секцию кода одновременно, предотвращая возникновение состояний гонки.
Когда использовать?
◾️ Когда вам необходимо защитить общие данные или ресурсы от одновременного доступа и обеспечить безопасность потоков.
[5.] Блокировка чтения-записи (Read-Write Lock)
◾️ Позволяет нескольким потокам одновременно читать данные из общего ресурса, но позволяет записывать данные в него только одному потоку одновременно.
Когда использовать?
◾️ Если у вас есть общий ресурс, где операции чтения выполняются чаще, чем записи, и вы хотите оптимизировать его для одновременного чтения.
[6.] Барьер (Barrier)
◾️ Синхронизирует группу потоков для ожидания в общей точке перед продолжением работы.
Когда использовать?
◾️ Когда у вас есть параллельные задачи, которые необходимо выполнить на определенном этапе, прежде чем перейти к следующему этапу.
[7.] Активный объект (Active Object)
◾️ Разделяет выполнение метода и вызов метода для параллельных систем.
◾️ Он включает в себя объект с собственным потоком управления и планировщик для постановки в очередь и выполнения запросов.
Когда использовать?
◾️ Когда надо инкапсулировать управление потоками и логику планирования в объекте, предоставляя более понятный интерфейс для параллельных операций.
Многопоточность — это вычислительная модель, которая позволяет одной программе (процессу) выполнять несколько потоков (действий) одновременно. Потоки совместно используют одни и те же ресурсы процесса (пространство памяти, открытые файлы и т. д.).
Хотя многопоточность открывает огромные возможности для повышения производительности и повышения отзывчивости приложений, она также создает такие сложности, как синхронизация, связь и потенциальные условия гонки.
Шаблоны проектирования многопоточности представляют собой многоразовые решения, позволяющие решать такие распространенные проблемы.
[1.] Модель «Производитель-Потребитель» (Producer-Consumer)
◾️ Этот шаблон включает два типа потоков: производители, которые генерируют данные, и потребители, которые обрабатывают эти данные.
◾️ Эти два типа потоков взаимодействуют через общую очередь, которая действует как буфер между ними.
Когда использовать?
◾️ Когда задачи можно разделить на отдельные этапы производства и потребления, и надо отвязать эти действия друг от друга для повышения параллелизма и эффективности.
[2.] Пул потоков (Thread Pool)
◾️ Поддерживает пул рабочих потоков, которые можно повторно использовать для выполнения задач.
◾️ Это позволяет избежать накладных расходов на создание и уничтожение потоков для каждой задачи.
Когда использовать?
◾️ Когда есть большое количество краткосрочных задач и надо управлять количеством потоков для лучшего использования ресурсов и производительности.
[3.] Future и Promise (промисы)
◾️ Представляет результат асинхронной операции.
◾️ Промис — это объек, содержащий конечный результат, а future предоставляет способ доступа к этому результату, когда он станет доступен.
Когда использовать?
◾️ При работе с длительными операциями, которые необходимо выполнять одновременно, не блокируя основной поток.
[4.] Монитор (Monitor Object)
◾️ Предоставляет механизм синхронизации доступа к общим ресурсам.
◾️ Позволяет только одному потоку выполнять критическую секцию кода одновременно, предотвращая возникновение состояний гонки.
Когда использовать?
◾️ Когда вам необходимо защитить общие данные или ресурсы от одновременного доступа и обеспечить безопасность потоков.
[5.] Блокировка чтения-записи (Read-Write Lock)
◾️ Позволяет нескольким потокам одновременно читать данные из общего ресурса, но позволяет записывать данные в него только одному потоку одновременно.
Когда использовать?
◾️ Если у вас есть общий ресурс, где операции чтения выполняются чаще, чем записи, и вы хотите оптимизировать его для одновременного чтения.
[6.] Барьер (Barrier)
◾️ Синхронизирует группу потоков для ожидания в общей точке перед продолжением работы.
Когда использовать?
◾️ Когда у вас есть параллельные задачи, которые необходимо выполнить на определенном этапе, прежде чем перейти к следующему этапу.
[7.] Активный объект (Active Object)
◾️ Разделяет выполнение метода и вызов метода для параллельных систем.
◾️ Он включает в себя объект с собственным потоком управления и планировщик для постановки в очередь и выполнения запросов.
Когда использовать?
◾️ Когда надо инкапсулировать управление потоками и логику планирования в объекте, предоставляя более понятный интерфейс для параллельных операций.
👍11👨💻3❤1👏1