Пакет · thread

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 — обеспечивает безопасную сериализацию анонимных классов и замыканий

Установка

bash
composer require flytachi/winter-thread

Быстрый старт

Определите задачу, оберните её в Thread и запустите — ваш скрипт никогда не блокируется:

php
$thread = new Thread(new ReportGenerator(42));

$pid = $thread->start();   // выполняется в фоне, возвращает управление сразу
$thread->join();           // опционально: дождаться завершения

Пройдите весь путь от начала до конца — от установки до проверенной фоновой задачи за пять минут — в Быстром старте.

Исходники и ссылки

Продолжите с Установки и требований, Быстрого старта и Ментальной модели.