2017 © Pedro Peláez
 

library xcoroutine

The PHP Coroutine.

image

xtlsoft/xcoroutine

The PHP Coroutine.

  • Thursday, August 17, 2017
  • by xtlsoft
  • Repository
  • 1 Watchers
  • 2 Stars
  • 6 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 50 % Grown

The README.md

XCoroutine

XCoroutine, the PHP Coroutine., (*1)

install 安装

composer require xtlsoft/xcoroutine

Intro 介绍

  • Task: 任务实例。您可以向里面传入一个Generator,然后通过我们的封装对他进行操作。
  • Scheduler: 多任务执行封装。您可以往里面add许多Task,然后执行。每个Task有唯一的ID,一个Task进行部分计算调用yield后,让下一个Task进行计算,以此循环,实现多任务管理。
  • SystemCall: Task之间和Task与Scheduler之间传递数据、互相操作的接口。
  • DynamicObject: 动态编程类,让你的类支持动态定义/销毁变量和方法。

Usage 使用

  1. 初识yield 例子:, (*2)

    <?php
    
        foreach(range(1,10) as $i){
            echo $i." ";
        }
        echo "<br>\n";
    
        function xrange($a,$b,$c=1){
            for($i = $a; $a <= $b; $i+=$c){
                yield $i;
            }
        }
    
        foreach(xrange(1,10) as $i){
            echo $i." ";
        }
    
    

    输出:, (*3)

    1 2 3 4 5 6 7 8 9 10
    1 2 3 4 5 6 7 8 9 10
    
  2. Task 使用 例子:, (*4)

    <?php
        require "vendor/autoload.php";
        use Coroutine\Task;
    
        function TaskExample(){
            while(true){
                $text = (yield);
                echo "TaskRecv $text <br />\n";
            }
        }
    
        $Task = new Task(TaskExample());
        $Task->run();
        $Task->run("A Test Text 1");
        $Task->setSendValue("Another Test Text");
        $Task->run();
    
    

    输出:, (*5)

    TaskRecv A Test Text 1 
    TaskRecv Another Test Text 
    
  3. Scheduler 使用 例子#1:, (*6)

    <?php
        require_once "vendor/autoload.php";
        use Coroutine\Scheduler;
    
        function TaskExample($num){
            for($i=0; $i<10; ++$i){
                echo "Task$num RUN $i <br>\n";
                yield;
            }
        }
    
        $scheduler = new Scheduler();
        $scheduler->newTask(TaskExample(1));
        $scheduler->newTask(TaskExample(2));
        $scheduler->newTask(TaskExample(3));
    
        $scheduler->run();
    

    例子#2:, (*7)

    <?php
        require_once "vendor/autoload.php";
        use Coroutine\Scheduler;
    
        function t1(){
            for($i=0; $i<10; ++$i){
                echo "t1 RUN $i <br>\n";
                yield;
            }
        }
        function t2(){
            for($i=0; $i<10; ++$i){
                echo "t2 RUN $i <br>\n";
                yield;
            }
        }
    
        $scheduler = new Scheduler();
        $scheduler->newTask(t1());
        $scheduler->newTask(t2());
    
        $scheduler->run();
    
  4. SystemCall 使用 例子:, (*8)

    <?php
        require_once "vendor/autoload.php";
        use Coroutine\Scheduler;
        use Coroutine\SystemCall;
    
        function TaskExample($num){
            //获取TaskId
            $tid = (yield SystemCall::getTaskId());
    
            for($i=0; $i<10; ++$i){
                echo "Task$num $tid RUN $i <br>\n";
                if($i == 3){
                    yield SystemCall::killTask(1);
                }
                if($i == 5){
                    yield SystemCall::newTask(Task2());
                }
                yield;
            }
        }
    
        function Task2(){
            $tid = (yield SystemCall::getTaskId());
            for($i=0; $i<3; ++$i){
                echo "Another Task $tid RUN $i <br>\n";
            }
        }
    
        $scheduler = new Scheduler();
        $scheduler->newTask(TaskExample(1));
        $scheduler->newTask(TaskExample(2));
        $scheduler->newTask(TaskExample(3));
    
        $scheduler->run();
    
  5. DynamicObject 使用 例子:, (*9)

    <?php
        require("vendor/autoload.php");
        use Coroutine\DynamicObject;
    
        $obj = new DynamicObject;
    
        $obj->abcd = 123;
    
        $obj->myFunc = function($a) use ($obj){
            return ("\$a * abcd = ".($a * $obj->abcd)."<br />\n");
        };
    
        echo $obj->myFunc(2);
    
        unset($obj->abcd);
    
        echo $obj->myFunc(1);
    
        $obj->myFunc = function($a, $b){
            return ("\$a + \$b = ".($a+$b)."<br />\n");
        };
    
        $obj->myFunc(123,321);
    
    

The Versions

17/08 2017

dev-master

9999999-dev

The PHP Coroutine.

  Sources   Download

MIT

The Requires

  • php >=5.5

 

by Avatar xtlsoft

17/08 2017

v0.1.1-stable

0.1.1.0

The PHP Coroutine.

  Sources   Download

MIT

The Requires

  • php >=5.5

 

by Avatar xtlsoft

15/08 2017

v0.1.0-alpha

0.1.0.0-alpha

The PHP Coroutine.

  Sources   Download

MIT

The Requires

  • php >=5.5

 

by Avatar xtlsoft