Thread
Winter Thread предоставляет чистый, объектно-ориентированный API для запуска фоновых
процессов в PHP и управления ими — воспроизводя традиционную модель потоков для
параллельных и длительных задач. Он абстрагирует сложности proc_open
и POSIX-сигналов в мощный и удобный интерфейс.
Философия
В основе — удобная для разработчика Java-подобная модель потоков в языке, где встроенной многопоточности традиционно нет. Это достигается за счёт использования отдельных процессов уровня ОС:
- Настоящий параллелизм — каждая задача выполняется в собственном процессе и может быть запланирована на другом ядре CPU, обеспечивая реальное параллельное выполнение.
- Изоляция — процессы полностью изолированы. Фатальная ошибка или утечка памяти в одном дочернем процессе никогда не затрагивает основное приложение или другие дочерние процессы.
- Простота — чистый API
ThreadиRunnableпозволяет сосредоточиться на логике задачи, а не на пайпах, сигналах и сериализации.
Основные концепции
- Thread — объект, управляющий дочерним процессом: запуск, остановка, мониторинг.
- Runnable — интерфейс, представляющий единицу работы. Любой класс, реализующий его, может
быть выполнен через
Thread; ваша логика живёт вrun(). - Runner-скрипт — внутренний исполняемый файл (
wRunner), который инициализирует новый процесс, десериализует задачу и запускает её. - Engine — единый корень конфигурации на стороне родителя, который выбирает транспорт payload
и launcher; используемый по умолчанию
AdaptiveEngineсамонастраивается для CLI, FPM и Swoole.
Ключевые возможности
- Гибкий, объектно-ориентированный API — управляйте фоновыми процессами как объектами.
- Полный контроль над процессом —
start(),join(),pause(),resume(),terminate(),kill(). - Продвинутое именование процессов — идентифицируйте процессы через пространства имён, имена и теги.
- Безопасность по умолчанию — вывод направляется в
/dev/null, поэтому нет риска Broken pipe для задач по принципу «запустил и забыл». - Совместимость со Swoole / event-loop — подключаемые транспорты payload (
PipeTransport,TempFileTransport,ShmTransport) исключают повреждение файловых дескрипторов подSWOOLE_HOOK_ALL;AdaptiveEngineавтоматически определяет активный рантайм Swoole. - Подключаемый engine — замените транспорт, launcher или путь к runner через единый
Engineдля глубокой интеграции с фреймворком или пользовательских бэкендов (Docker, SSH). - Java-подобный API — знакомые имена методов, такие как
isAlive()иjoin().
Хорошо подходит для
Независимых задач, которым не нужен сложный IPC: тяжёлые вычисления (кодирование изображений/видео, генерация отчётов), задачи с интенсивным I/O (пакетная отправка писем, внешние API) или вынос любой длительной операции, чтобы основной поток оставался отзывчивым.
Требования
- PHP ≥ 8.4
ext-pcntl,ext-posix- POSIX-совместимая ОС (Linux, macOS, BSD) — несовместимо с Windows
opis/closure^4.5— обеспечивает безопасную сериализацию анонимных классов и замыканий
Установка
composer require flytachi/winter-threadБыстрый старт
Определите задачу, оберните её в Thread и запустите — ваш скрипт никогда не блокируется:
$thread = new Thread(new ReportGenerator(42));
$pid = $thread->start(); // выполняется в фоне, возвращает управление сразу
$thread->join(); // опционально: дождаться завершенияПройдите весь путь от начала до конца — от установки до проверенной фоновой задачи за пять минут — в Быстром старте.
Исходники и ссылки
- GitHub — github.com/flytachi/winter-thread
- Packagist — packagist.org/packages/flytachi/winter-thread
Продолжите с Установки и требований, Быстрого старта и Ментальной модели.