Coroutine

短名称

2.0.132.1.0或更高版本中,增加了协程短名特性,简化了协程相关API的名称书写。可修改php.ini设置swoole.use_shortname来关闭/开启短名,默认为开启。

创建协程

go(function () {
    co::sleep(0.5);
    echo "hello";
});
go("test");
go([$object, "method"]);

通道操作

$c = new chan(1);
$c->push($data);
$c->pop();

协程客户端

$redis = new Co\Redis;
$mysql = new Co\MySQL;
$http = new Co\Http\Client;
$tcp = new Co\Client;
$http2 = new Co\Http2\Client;

其他 API

co::sleep(100);
co::fread($fp);
co::gethostbyname('www.baidu.com');

延迟执行

defer(function () use ($db) {
    $db->close();
});


  • lyy

    每个进程下的协程处理器是一个还是多个?? 同一进程下多个协程是时唤醒是否会并行执行?是否会有资源竞争?

  • zhao

    同一时间只能处理一个协程代码,不是多线程。 协程不会并行执行,是协同执行,比如 任务1 ,任务2 ,执行任务1时,里面有让出代码co::sleep(0.5); 就会暂时退出,这样任务2 先可以处理。任务2 处理完毕,就会恢复到任务1中断处,继续处理。 不存多进程,多线程。 个人理解。