1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yurunsoft-swoole-co-pool

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

swoole-co-pool

Latest Version License

Введение

Этот проект представляет собой пул корутин Swoole, который включает в себя некоторые полезные операции с корутинами Swoole. Он прост в использовании.

  • Пул корутин

Используется для сценариев, требующих большого количества задач корутины. Он может ограничивать количество одновременно работающих корутин и уменьшать потери, связанные с частым созданием и уничтожением корутин.

  • Пакетный исполнитель корутин

Предназначен для одновременного выполнения нескольких корутин и позволяет получить все их возвращаемые значения.

Группа полного стека PHP Yurun: 17916227 нажмите, чтобы присоединиться к группе, если у вас есть вопросы, вам помогут найти ответ и решить проблему.

Ежедневная группа по плаванию программистов: 74401592 нажмите, чтобы присоединиться к группе.

Установка

Добавьте конфигурацию в ваш composer.json:

{
    "require": {
        "yurunsoft/swoole-co-pool": "^1.3.0"
    }
}

Затем выполните команду composer update.

Использование

Пул корутин

use Yurun\Swoole\CoPool\CoPool;
use Yurun\Swoole\CoPool\Interfaces\ICoTask;
use Yurun\Swoole\CoPool\Interfaces\ITaskParam;

$coCount = 10; // количество одновременно работающих корутин
$queueLength = 1024; // длина очереди
$pool = new CoPool($coCount, $queueLength,
    // определение задачи анонимного класса, конечно, вы также можете определить его как обычный класс, передав полное имя класса
    new class implements ICoTask
    {
        /**
         * Выполнение задачи
         *
         * @param ITaskParam $param
         * @return mixed
         */
        public function run(ITaskParam $param)
        {
            // выполнение задачи
            return true; // необязательно возвращать результат выполнения задачи
        }

    });
$pool->run();

$data = 1; // можно передать любой параметр

// добавить задачу и приостановить корутину, ожидая возврата результата выполнения задачи
$result = $pool->addTask($data);

// добавить задачу асинхронно
$result = $pool->addTaskAsync($data, function(ITaskParam $param, $data){
    // асинхронный обратный вызов
});

// добавить групповую задачу и приостановить корутину, ожидая возвращения результата выполнения задачи
$result = $pool->addTask($data, 'групповое название');

// добавить групповую задачу асинхронно
$result = $pool->addTaskAsync($data, function(ITaskParam $param, $data){
    // асинхронный обратный вызов
}, 'групповое название');

$pool->wait(); // ожидание остановки пула корутин, без ограничения времени, true/false
$pool->wait(60); // ожидание остановки пула корутин в течение 60 секунд, если -1, то без ограничения времени, true/false

Пакетный исполнитель корутин

Каждая функция выполняется в отдельной корутине, а затем результаты могут быть объединены.

$batch = new CoBatch([
    function(){
        return 'imi';
    },
    'a' =>  function(){
        return 'niu';
    },
    'b' =>  function(){
        return 'bi';
    },
]);
$results = $batch->exec();
// $timeout = -1; // поддержка тайм-аута
// $limit = -1; // ограничение количества одновременно работающих корутин
// $results = $batch->exec($timeout, $limit);
var_dump($results);
// значение $results:
// [
//     'imi',
//     'a' =>  'niu',
//     'b' =>  'bi',
// ]

Быстрые функции:

use function Yurun\Swoole\Coroutine\batch;
batch([
    function(){
        return 'imi';
    },
    'a' =>  function(){
        return 'niu';
    },
    'b' =>  function(){
        return 'bi';
    },
]);
// batch($callables, $timeout, $limit);

Выполнение одной корутины и ожидание возвращаемого значения

use function Yurun\Swoole\Coroutine\goWait;
$result = goWait(function(){
    \Swoole\Coroutine::sleep(1);
    return 'результат ожидания';
});
echo $result; // результат ожидания

Контейнер канала

use Yurun\Swoole\CoPool\ChannelContainer;

go(function(){
    $channelContainer = new ChannelContainer;

    $id = 'abc';
    $data = [
        'время'  =>  time(),
    ];

    go(function() use($id, $data, $channelContainer){
        echo 'Подождите 3 секунды...', PHP_EOL;
        \Swoole\Coroutine::sleep(3);
        $channelContainer->push($id, $data);
    });
    var_dump($channelContainer->pop($id));

});

Примеры кода

Смотрите каталог example

Пожертвования

Открытый исходный код не требует прибыли, сколько бы ни было, это всё от души, жизнь непроста, пусть будет как будет…

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Swoole: пул рабочих процессов — от Urun PHP FullStack. *Примечание: для точного и корректного перевода необходим контекст.* Развернуть Свернуть
PHP
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/yurunsoft-swoole-co-pool.git
git@api.gitlife.ru:oschina-mirror/yurunsoft-swoole-co-pool.git
oschina-mirror
yurunsoft-swoole-co-pool
yurunsoft-swoole-co-pool
develop