
Почему ваш Parallel.ForEach впустую сжигает CPU — ускоряем обработку данных до 600+ раз
arhip1986 53 минуты назад Почему ваш Parallel.ForEach впустую сжигает CPU — ускоряем обработку данных до 600+ раз 7 мин 1.8K .NET * C# * Алгоритмы * Высоконагруженные системы * Параллельное программирование * Туториал...
Вот важная новость с фронта ИИ: arhip1986 53 минуты назад Почему ваш Parallel. ForEach впустую сжигает CPU — ускоряем обработку данных до 600+ раз 7 мин 1. NET * C# * Алгоритмы * Высоконагруженные системы * Параллельное программирование * Туториал Практически в каждом высоконагруженном .
NET-проекте рано или поздно появляется один и тот же паттерн:Есть коллекция данных. Для каждого элемента нужно выполнить дорогую операцию. Например:вычислить хэш;получить эмбеддинг;обратиться к ИИ-модели;построить отчёт;обработать изображение;выполнить финансовый расчёт;провести нормализацию данных.
Технические детали
На первый взгляд решение очевидно:Parallel. ForEach(items, item => { Process(item); });Но проблема возникает тогда, когда внутри коллекции появляются дубликаты. Например:один и тот же пользователь встречается десятки раз;один и тот же документ приходит из разных источников;одинаковые сообщения попадают в очередь;одинаковые строки требуют одинакового преобразования.
В такой ситуации Parallel. ForEach честно пересчитывает всё заново. Даже если вычисление уже выполнялось секунду назад.
Даже если результат уже лежит в памяти. Даже если в коллекции 99% одинаковых данных. Именно эту проблему решает Principium.
Отраслевые последствия
Когда это действительно нужноБиблиотека не пытается заменить TPL. Если у вас уникальные данные и дешёвая обработка — используйте обычный Parallel. Но есть несколько сценариев, где выигрыш может достигать десятков и сотен раз.
Генерация эмбеддинговДопустим, вы строите RAG. В коллекции 100 000 документов. Из них 80 000 уже индексировались раньше.
Без кэша:100 000 вызовов embedding modelС Principium:20 000 вызовов embedding model20 000 вызовов embedding modelОстальное берётся из памяти. Массовая обработка сообщенийВ очереди постоянно встречаются повторяющиеся события:User 1 updated User 1 updated User 1 updated User 1 updated User 1 updatedВ большинстве случаев интересует только последнее состояние. Повторные вычисления просто сжигают CPU.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





