masyasmv/otus_moving_objects_multithreaded
Composer 安装命令:
composer require masyasmv/otus_moving_objects_multithreaded
包简介
Домашнее задание Многопоточное выполнение команд
README 文档
README
Manager — это простая и расширяемая реализация диспетчера команд для параллельного (многопоточного) выполнения. Подходит для учебного проекта «Космический бой»: вы можете создавать команды, добавлять их в очередь и управлять жизненным циклом рабочих потоков.
📋 Содержание
Обзор проекта
Класс Manager:
-
Создаёт пул
Nпотоков (runtime), каждый из которых слушает канал команд. -
Позволяет динамически добавлять объекты, реализующие
CommandInterface, в очередь. -
Обрабатывает команды параллельно, безопасно перехватывая любые исключения.
-
Предоставляет два способа остановки:
- Soft stop — дожидается завершения всех запущенных команд (грейсфул-остановка).
- Hard stop — немедленно прерывает работу потоков.
Пример использования: игра «Космический бой», где каждый выстрел или обработка физики представлена командой.
Особенности
- Многопоточность на базе расширения
ext-parallel - Потокобезопасная очередь на основе
Channel - Грейсфул и форсированная остановка рабочих потоков
- Лёгкая интеграция новых видов команд через единый интерфейс
- Юнит-тесты для проверки базовых сценариев
Требования
- PHP ≥ 8.1
- Расширение
parallel - Composer
Установка
git clone https://github.com/MasyaSmv/otus_moving_objects_multithreaded.git
cd otus_moving_objects_multithreaded
composer install
Использование
Запуск Manager
use Masyasmv\Multithreaded\Manager; $manager = new Manager(4); // создаём 4 рабочих потока
Метод enqueue
Добавляет команду в очередь на исполнение:
$manager->enqueue(new MyCommand(...));
Каждая команда должна реализовать интерфейс:
namespace Masyasmv\Multithreaded\Contracts; interface CommandInterface { public function execute(): void; }
Soft Stop
Мягкая остановка: дожидается завершения всех запущенных команд.
$manager->softStop();
Hard Stop
Форсированная остановка: немедленно закрывает каналы и завершает потоки.
$manager->hardStop();
Интеграция новых команд
-
Реализуйте свой класс команды:
class ShootCommand implements CommandInterface { public function execute(): void { // логика выстрела } }
-
Добавьте в менеджер:
$manager->enqueue(new ShootCommand());
-
При
softStop()дожидается завершения всех выстрелов, приhardStop()— мгновенно останавливается.
Тестирование
В проекте настроены PHPUnit-тесты:
vendor/bin/phpunit --colors=always
Покрыты сценарии:
- Запуск нужного количества потоков
- Soft Stop с ожиданием выполнения
- Hard Stop с немедленной остановкой
Архитектура
- Manager — центральный класс, создаёт каналы и потоки, управляет жизненным циклом.
- Channel — потокобезопасная очередь из
ext-parallel. - Runtime — отдельный PHP-поток, выполняющий замыкание-воркер.
- Future — объект, отслеживающий завершение воркера.
Лицензия
MIT © MasyaSmv
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2025-07-30