pedrogaldino/php-thread-pool

实现PHP中线程池接口的利用

v1.0-beta.4 2020-04-01 05:38 UTC

This package is auto-updated.

Last update: 2024-09-29 05:20:55 UTC


README

本包是一个简单的PHP线程池管理器,通过一个简单且强大的接口轻松创建并发任务。

它需要PHP 7.4线程安全以及PHP并行扩展。

安装

您可以使用PECL在PHP上安装所需扩展。

pecl install paralell

包安装

composer require pedrogaldino/php-thread-pool

快速入门

任务

任务是将代码放入队列中执行的地方。基本上是您需要以并发方式运行而不阻塞父代码执行的代码。

让我们创建我们的任务

<?php

namespace App\Tasks;

use Galdino\Threads\Pool\Task;

class MyTask extends Task {

    public function onExecute()
    {
        print "Task is started" . PHP_EOL;  
        sleep(10);  
        print "Task is finished" . PHP_EOL;  
    }
    
}

现在,让我们创建任务池并将任务调度到待处理中

<?php
  
use Galdino\Threads\Pool\Bootstrap;  
use Galdino\Threads\Pool\Pool;
use App\Tasks\MyTask;

$bootstrap = new Bootstrap();  
$pool = new Pool($bootstrap);

$myTask = new MyTask('Task name');

$pool->addTask($myTask);

就是这样。池将自动创建一个队列来处理这个任务。

引导

引导包含应用程序在任务执行时需要运行的文件。您可以传递构造函数中所需的所有文件。

$bootstrap = new Bootstrap([
    'boostrap/my_application_bootstrap.php'
]);

引导类将自动尝试自动加载composer自动加载文件,如果存在。如果您想禁用此功能,请将false设置为第二个参数

$bootstrap = new Bootstrap([
    'boostrap/my_application_bootstrap.php'
], false);

另一种初始化引导的方法

$bootstrap = Bootstrap::addFiles([  
    'bootstrap_file.php'  
]);

池将自动管理队列和任务执行。

您可以向池指示自动创建多少个队列。

// auto create 5 queues according to the tasks demand
$pool = new Pool($bootstrap, 5);  

队列

每个队列一次处理一个任务。

您可以手动向池中添加新队列

$pool->addQueue('My queue name');

如果您不需要池,也可以单独创建一个队列

use Galdino\Threads\Pool\Bootstrap;
use Galdino\Threads\Pool\Queue;

$bootstrap = new Bootstrap();
$queue = new Queue('My queue name', $bootstrap);

$queue->addTask($myTask);

记住,任务与父线程不共享内存。因此,始终加载应用程序需要的任何引导文件是很重要的。