
Сообщество независимых разработчиков представило открытую библиотеку Runloom. Проект внедряет стековые корутины в стиле языка Go в режим free-threaded Python 3.13t+ с отключенной глобальной блокировкой интерпретатора (GIL). Над инструментом работают пользователи GitHub, Reddit и Lobsters, однако к проекту уже проявили интерес инженеры из крупных технологических компаний, включая Cloudflare, Vercel и Hugging Face.
Технические особенности и архитектура
Runloom помогает эффективно обрабатывать высокие нагрузки, ограниченные операциями ввода-вывода. Обычно при обращении к внешним ресурсам поток просто простаивает в ожидании ответа, а процессор тратит время вхолостую. Runloom решает эту проблему: пока одна корутина ждет данные из сети или с диска, планировщик переключает процессор на другие полезные задачи. При этом библиотека позволяет писать привычный синхронный код без конструкций async и await.
Разработчики заложили в основу инструмента сложную архитектуру, которая включает переключение контекста на Assembler, планировщик задач на языке C с алгоритмом work-stealing, интеграцию с сетевым стеком netpoll и поддержку средств синхронизации потоков.
Чтобы обеспечить совместимость, разработчики предусмотрели изменение модуля во времени исполнения без изменения оригинального исходного кода (monkeypatching) на базе метода monkey.patch(). Инструмент подменяет стандартные блокирующие вызовы — например, в библиотеках socket, time или threading — на их кооперативные аналоги без необходимости переписывать все приложение. При возникновении блокировки корутина ставится на паузу и процессор переключается на другую задачу. Поток операционной системы при этом продолжает работать без остановок. Кроме того, разработчики встроили в библиотеку специальный мост для интеграции с asyncio — это позволяет запускать уже готовый асинхронный код с помощью Runloom.

30+ бесплатных курсов на ИТ-темы в Академии Selectel
Для начинающих и опытных специалистов.
Изучить →
Производительность и технические ограничения
По результатам тестов автора проекта, библиотека показывает результаты, сопоставимые с производительностью планировщика языка Go. Рекордная скорость создания задач достигает 2,29 миллиона операций в секунду по сравнению с 2,10 миллиона у Go. Однако такого показателя разработчики добились исключительно при запуске бенчмарка из чистого C. Если создавать корутины напрямую из Python-кода, скорость падает до 1,35 миллиона операций в секунду, что составляет около 65% от производительности Go. При этом пропускная способность при обработке запросов держится на уровне эталонных значений: она составляет 596 тысяч против 603 тысяч запросов в секунду на тестах keep-alive.
Несмотря на высокую скорость, у проекта есть два существенных ограничения. Первым стало повышенное потребление оперативной памяти: приостановленная корутина runloom требует примерно в 3,3 раза больше ресурсов, чем горутина, что связано с необходимостью хранить структуру кадров вызова CPython.
Второе ограничение — зависимость от режима интерпретатора. Чтобы достичь истинной многопоточности и распараллелить вычисления на все ядра процессора, придется собирать Python с отключенной глобальной блокировкой интерпретатора (GIL). При работе в стандартном режиме инструмент выступает лишь удобной альтернативой базовым асинхронным библиотекам без значительного прироста скорости.
Сферы применения
Библиотека находится на ранней стадии разработки, но уже подходит для масштабирования бэкенд-сервисов, ML-систем и конвейеров обработки данных. Проект развивается как open-source инициатива, поэтому опробовать Runloom в действии и внести свой вклад в разработку планировщика может любой желающий в репозитории на GitHub.
Источник: habr.com