Как стать автором
Обновить
35.6

Параллельное программирование *

Распараллеливаем вычисления

Сначала показывать
Порог рейтинга
Уровень сложности

Go-like каналы на C++

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров3.7K

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

Смотреть мой велосипед
Всего голосов 21: ↑21 и ↓0+21
Комментарии3

Новости

Часть 1. GPU-Based Fuzzing. Что за зверь такой?

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров1.5K

Всем привет!

При изучении темы фаззинг‑тестирования всегда возникает вопрос, насколько сильно можно увеличить количество выполнений приложения в секунду. Иначе говоря — как ускорить фаззинг?

В последнее время одно из популярных направлений — искусственный интеллект, его создание и обучение. Лично я от этой темы далек, однако имею представление, что лучшего всего он (ИИ) обучается на видеокартах. Более того, обучение может происходить с использованием облака.

И так, с одной стороны мы имеем фаззинг, который надо ускорить, с другой — большое количество вычислительных ресурсов на основе видеокарт из‑за активного развития ИИ. Так почему бы не попробовать использовать эти ресурсы во благо ИБ?

Читать далее
Всего голосов 6: ↑6 и ↓0+6
Комментарии1

На что способны виртуальные потоки Java в обработке файлов

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров5.5K

Привет, Хабр!

Предисловие

Начнем с того,что я не специалист по Java и у меня нет коммерческого опыта на этом языке. Я просто обычный кодер, который по вечерам пилит проекты на Java, а основной мой стек состоит из PHP и смеси Python + Go. В данной статье хочу с вами поделиться опытом с использованием виртуальных потоках (Virtual Threads) в обработке файлов.

Читать далее
Всего голосов 15: ↑13 и ↓2+11
Комментарии9

Как работает multiprocessing в Python под капотом

Уровень сложностиСложный
Время на прочтение12 мин
Количество просмотров6.9K

Я довольно давно пишу на Python и во многих проектах использовал multiprocessing — пакет стандартной библиотеки языка Python, который предоставляет интерфейс для работы с процессами, очередями, пулами процессов и многими другими удобными инструментами для параллельного программирования. В какой-то момент я понял, что мне не хватает более детального понимания работы этой библиотеки.

Мне захотелось залезть в исходники multiprocessing, разобраться и заодно написать статью. Данная статья в основном рассчитана на новичков в Python и тех, кто хочет подробнее разобраться в том, как именно создаются процессы и пулы в Python и погрузиться в детали реализации.

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии2

Истории

Async/await. Куда делся thread.  Инверсия асинхронности. Разоблачение мистификации

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров13K

В прошлый раз мы разобрали пример, когда асинхронная операция использует дополнительный поток. Этот пример многим показался провокационным и даже вредным, что для меня выглядит достаточно странным. Насколько я понял основной претензией является то, что этот пример для многих как бы отрицает «экономное использование потоков», как это сформулировано например здесь-«metanit: Асинхронное программирование» .

Конечно, многие обиделись на меня за то, что я посмел возражать признанному авторитету, который вынес в заголовок своей очень известной работы фразу There is no thread (Там нет потока) ведь хорошо известно, что: «нет пророка в своем отечестве», и, видимо, быть не должно, но это все эмоции.

Давайте я покажу, как преобразовать мой пример, чтобы он продемонстрировал не только то самое «экономное использование потоков», но и откуда оно берется.

Читать далее
Всего голосов 14: ↑2 и ↓12-10
Комментарии25

Механика Async Await

Время на прочтение8 мин
Количество просмотров7.7K
В этом посте исследована механика async await на языке Elixir. Принятая в Elixir модель конкурентности отлично подходит в качестве платформы для реализации такой механики. Тем не менее, не расценивайте этот пост как руководство для разработки реальных приложений на Elixir.

Код к этому посту выложен на GitHub
Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии1

GIL в Python: как его будут отключать

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров16K

Python-разработчики, как правило, хорошо знают, что такое и для чего нужен GIL, вопросы по нему встречаются на большинстве собеседований, я и сам люблю их задавать. Но в CPython его скоро не будет. Да, core-разработчики CPython взяли курс на его удаление.

Разберём основные концепции того, как это будет произведено, с обзором соответствующего PEP 703.

Читать далее
Всего голосов 27: ↑27.5 и ↓-0.5+28
Комментарии37

Сколько точек зрения у  Архитектора в ИТ?

Уровень сложностиПростой
Время на прочтение20 мин
Количество просмотров2.9K

Судя по обилию статей «Кто такой архитектор в ИТ?» — нет общего понимания, чем он занимается, должен ли он вырасти из программиста или его можно сделать из системного аналитика. На самом деле ключевым качеством, которое сразу выделяет его среди остальных в ИТ, является способность смотреть на задачу с разных точек зрения. В статье приводится простой практический архитектурный кейс для очень известной системы, и выводы будут однозначные.

Посмотреть со своей точки зрения
Всего голосов 12: ↑10 и ↓2+8
Комментарии0

Async/await, There is no thread – легко обмануть тех, кто сам обманываться рад

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров13K

Когда нам показывают на некотором примере, что асинхронная операция не создает потока, нам пытаются внушить, что асинхронная операция НИКОГДА не создает потока и в принципе не может его создать, но это не правда! Простой пример с работающим кодом доказывает обратное. Давайте разберем этот пример.

Логика тех, кто поддается такому внушению мне вполне понятна, они хотят упростить себе жизнь, сократить объем теории, с которой надо разбираться.

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

Читать далее
Всего голосов 21: ↑11 и ↓10+1
Комментарии56

Самый простой и подробный гайд по конкурентным коллекциям в C#

Уровень сложностиПростой
Время на прочтение18 мин
Количество просмотров15K


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

Конкурентные коллекции в C# предлагают встроенные механизмы для обработки конкурентного доступа, что делает их мощным инструментом в программировании с конкурентным доступом.

В рамках статьи я попробую объяснить System.Collections.Concurrent настолько, насколько это возможно, включая примеры и сценарии использования. Также будет затронута тема сравнения с неизменяемыми (immutable) и замороженными (frozen) коллекциями.
Читать дальше →
Всего голосов 64: ↑62 и ↓2+60
Комментарии26

Другой способ понять, как работает async/await в C#

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров7.9K

Про закулисье async/await написано предостаточно. Как правило, авторы декомпилируют IL-код, смотрят на IAsyncStateMachine и объясняют, вот дескать какое преобразование случилось с нашим исходным кодом. Из бесконечно-длинной прошлогодней статьи Стивена Тауба можно узнать мельчайшие детали реализации. Короче, всё давно рассказано. Зачем ещё одна статья?

Я приглашаю читателя пройти со мной обратным путём. Вместо изучения декомпилированного кода мы поставим себя на место дизайнеров языка C# и шаг за шагом превратим async/await в код, который почти идентичен тому, что синтезирует Roslyn.

Читать далее
Всего голосов 21: ↑21 и ↓0+21
Комментарии26

Какой язык программирования выбрать? Обзор Go

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров9.7K

Продолжаем серию статей про особенности, применение, плюсы и минусы языков, которые используются в «Криптоните». В этой статье наш инженер департамента инфраструктуры Алексей Косов расскажет про Golang.

Ранее наши разработчики делали обзоры Rust, Scala, JavaScript и Spark.

Читать далее
Всего голосов 12: ↑9 и ↓3+6
Комментарии4

ВКПа. Введение, ч.3. Графика. Имитационное моделирование

Время на прочтение12 мин
Количество просмотров525

Наконец‑то мы добрались до конечной цели — графики, которая достаточно близко к реальности моделирует интересующие нас объекты. Речь пойдет об объектах систем управления (СУ). Это датчики, переключатели, индикаторы, моторы, конвейеры, объекты типа рассматриваемой нами гильотины и т. д. и т. п.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Ближайшие события

PG Bootcamp 2024
Дата16 апреля
Время09:30 – 21:00
Место
МинскОнлайн
EvaConf 2024
Дата16 апреля
Время11:00 – 16:00
Место
МоскваОнлайн
Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн

ВКПа. Введение, ч.2. Копирование автоматов и начала имитационного моделирования

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.5K

Данный цикл статей - не техническая документация, не подробное описание научных идей. Это краткое, обобщенное описание возможностей среды ВКПа на простом примере. Демонстрация процессов и принципов работы в ней. Идеи - проверенная временем часть. Они описаны в статьях, ссылки на основные из них приведены в  первой части [1]. Без понимания этого материала невозможно разобраться, зачем вообще нужна подобная среда. Ведь, существует и другое автоматное программирование. Но только идеи, положенные в их основу, другие.

Отличие идей - это главное, чем объясняется необходимость среды ВКПа. Другой такой просто нет, как нет по большому счету и таких идей. И,  вообще, без понимания основ теории автоматов невозможно объяснить необходимость данной модели вычислений. Ведь, без автоматов программисты когда-то вполне обходились, а большая часть без них обходится и до сих пор.

Среду ВКПа нужно воспринимать, как программное ядро, реализующее параллельную модель вычислений  и оболочку над ним, которая могла быть вполне другой. И среда позволяет это легко сделать. Имеющаяся оболочка кому-то может показаться весьма неудобной - то же обилие диалогов. Но, во-первых, объективно оценить это можно лишь поработав в ней. А, во-вторых, как показывает опыт, восприятие - больше дело привычки. Для автора она удобна. Здесь многолетняя привычка и больший опыт работы с технологией автоматного программирования. Но и то и другое - основные тренды, влияющие на внешний вид и на функциональность оболочки.

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии17

ВКПа. Введение, ч.1. Визуальное проектирование автоматов

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров2K

В моих статьях часто используется аббревиатура ВКПа. Это сокращение названия программной среды проектирования по канонам технологии автоматного программирования - среды автоматного Визуально-Компонентного Программирования (подробно основы ее теории описаны в статьях [1, 2]). Объяснение, что это за среда, конечно, дается, но, признаю, что делается это часто по ходу, достаточно поверхностно и разбросанно по многим статьям.

Отсюда вполне закономерный вопрос - что собой представляет ВКПа? В результате созрело решение, а, может, просто пришло время, дать достаточно концентрированное, пусть не столь подробное, описание среды. Будет это не техническая документация, т.к. речь все же не о ней, а о расстановке акцентов, точек, которые могли бы дать правильное представление о технологии и среде автоматного программирования, в которой, за очень редким исключением, создается мой программный код.   Но это одна сторона дела. Есть и другая...

Буквально за последние месяцы была проделана объемная целенаправленная работа по развитию среды и, что особенно важно, по повышению качества ее работы.  Раньше она была рассчитана на одного пользователя, который с ее проблемами легко мирился. Но, как говорится, до поры до времени... Теперь этот пользователь, а заодно и разработчик, решил сконцентрировать силы на доведении ее до нормального рабочего состояния.  Пришло, так сказать, время перейти на новый уровень качества среды. И, может, это прозвучит нескромно, но захотелось заодно поделиться также удовольствием от нынешней работы в ВКПа...

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии24

Разработка синхронизированных многопоточных приложений на C# и .NET

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров9.2K

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

Читать далее
Всего голосов 16: ↑10 и ↓6+4
Комментарии7

Повышаем быстродействие расчётов на примере медианного фильтра

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.5K
Рассмотрим некоторые приёмы повышения быстродействия вычислительных программ на примере алгоритма медианного фильтра.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии1

Тестируем многоядерный процессор методом Кнута и Python’а

Время на прочтение11 мин
Количество просмотров7.1K

В 1978 году вышел третий том монографии Дональда Кнута «Искусство программирования», где автор рассматривает алгоритмы сортировки и поиска. Помимо самих алгоритмов описаны аппаратные характеристики компьютера и их влияние на производительность при работе с алгоритмами.

В 2024 году мы с вами возьмём классические алгоритмы сортировки и посмотрим, как работает современный многоядерный процессор при сортировке нескольких массивов на одном и нескольких логических ядрах. Мы напишем приложение с графическим интерфейсом (GUI) на фреймворке Qt, обойдем глобальную блокировку интерпретатора (GIL), воспользуемся несколькими потоками, на один из которых переложим выполнение асинхронного цикла событий, и распараллелим этот поток для реализации параллельных вычислений.

Читать далее
Всего голосов 21: ↑19 и ↓2+17
Комментарии13

Построение планов параллельного выполнения программ для процессоров со сверхдлинным машинным словом (проект)

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров2.2K

Процессоры архитектуры  сверхдлинного машинного слова (VLIW - Very Long Instruction Word) относятся к специфическим классам архитектур, прямо нацеленным на использование внутреннего параллелизма в алгоритмах (программах), причём параллелизм этот анализируется и планируется к рациональному использованию при вычислениях на программном уровне; собственно аппаратная часть освобождается от процедур распараллеливания  (и поэтому должна стать проще и экономичнее использующих внутреннее распараллеливание).

VLIW-подход основан на идее загрузки во входной буфер процессора одновременно набора (bundle) допускающих параллельное выполнение  машинных команд и исполнения этого ряда команд аналогично единой команде в процессорах классической архитектуры. VLIW-процессоры реализуют параллелизм уровня ILP (Instruction-Level Parallelizm, параллелизм уровня машинных инструкций) и SMP (Symmetric MultiProcessing, системы с общей памятью)   идеологему работы с оперативной памятью. Несмотря на выпуклое преимущество (программным путём дешевле реализовать сложные процедуры параллелизации), работа VLIW-процессоров сопряжена с известными проблемами. Среди них называют статичность полученных планов параллельного выполнения и проблемы с излишней неравномерностью времени доступа к оперативной памяти разных вычислительных ядер   (временна́я антиплотность кода,   следствием является резкое снижение производительности из-за неизбежности  определять время выполнения всей связки команд сверхдлинного слова по продолжительности наиболее длинной из них).

Читать далее
Всего голосов 14: ↑13 и ↓1+12
Комментарии26

Разобраться раз и навсегда: Task.WhenAll или Parallel.ForEachAsync в C#

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров15K


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

Если быстро посмотреть на результаты, которые появляются в интернете при поиске советов по реализации подобных вещей, то можно увидеть, что есть как много похожих, так и различных предложений от различных программистов. В какой-то момент поиска вы, вероятно, столкнётесь с поиском идеей использования Task.WhenAll или Parallel.ForEachAsync.

При чтении некоторых из этих материалов будет видно много различных противоречивых ответов как на StackOverflow, так и по всему интернету. Сегодня я собираюсь сравнить эти два метода с помощью определённых бенчмарков, которые стравят их друг против друга, чтобы, наконец, выяснить применимость каждого из двух методов.
Читать дальше →
Всего голосов 58: ↑57 и ↓1+56
Комментарии18
1
23 ...
Изменить настройки темы

Вклад авторов