← На главную

Библиотека BOC в Python ускоряет параллельный код на многоядерных системах

06.05.2026 05:34 · hackernews

Библиотека BOC от Python-разработчиков предлагает новый способ написания параллельных программ, устраняя сложность традиционных блокировок. Авторы используют концепцию concurrent-owned variables или cowns, гарантирующие, что один ресурс доступны только одному процессу за раз. Вместо привычных threading.Lock и условий ожидания, каждый ресурс, например лук или нож в примере с омлетом, обернут в объект Cown. Код шагов превращается в функции с декоратором @when, которые автоматически выполняются на свободных рабочих процессах, как только освобождаются нужные ресурсы. Это позволяет легко моделировать сценарий, где один повар чистит овощи, пока другой взбивает яйца, без риска конфликтов доступа к общему ножу.

Для обмена данными между потоками и интерпретаторами используются неблокирующие функции send и selective receive. Они работают на базе быстрого очереди на C с возможностью использования fallback через pickle. Сообщения содержат метки, позволяющие фильтровать входящие данные, например, операции сложения или вычитания в виртуальном калькуляторе. При блокировке таймер возврата задается через коллбек after, возвращающий специальный сигнал. Библиотека также включает встроенный класс Matrix для работы с плотными матрицами с плавающей точкой, которые хранятся вне кучи Python. Это обеспечивает передачу данных между интерпретаторами без копирования памяти. Матрицы поддерживают привычные математические операции и используются в симуляциях, например, flocking стаи птиц.

Архитектура библиотеки опирается на глобальное хранилище noticeboard для обмена легковесным состоянием между поведенческими блоками. Запись в него происходит асинхронно и не блокирует основной поток, а чтение обеспечивает непротиворечивый снимок данных. Обновления могут быть атомарными, например, увеличение счетчика нацех, что исключает интерференцию потоков. Хранилище поддерживает до 64 ключей и гарантирует eventual consistency. Производительность bocpy на многоядерных системах, таких как AMD с 14 ядрами, демонстрирует почти линейный рост скорости обработки при увеличении числа воркеров благодаря безблокировочному планировщику работы и нулевому копированию данных. Полная реализация кома с омлетом доступна на репозитории GitHub, где можно изучить множество других примеров использования технологий Erlang-стиля в Python.

Читать оригинал →