Swoole\Coroutine::create (callable $callback, [] $params = null)

Declaration

<?php
Swoole\Coroutine::create (callable $callback)

Parameters

callback

The function will be executed within the coroutine.

params

The array of params of the callback function

Return

Description

Create and execute the closure function in a coroutine. A coroutine is a light weight thread running within a Linux process.

Go can be used to create new coroutine which is the short name of Swoole\Coroutine::create. Co is the short name of Swoole\Coroutine.

Coroutines must be executed within a coroutine context.

Co\run can be used to create a context to execute coroutines.

A coroutine context is created for each callback function of Swoole Server.

Since version 4.1.0, you can use any IO libraries using php_stream within a coroutine context.

Supported libraries:

  • Redis
  • mysqlnd, PDO, mysqli
  • SOAP
  • file_get_contents, fopen
  • stream_socket_client
  • fsockopen
  • curl
  • fread, fwrite, fgets

Not supported:

  • MySQL with libmysqlclient
  • curl with libcurl
  • MongoDB with mongo-c-client
  • pdo_pgsql, pdo_ori, pdo_odbc, pdo_firebird

Coroutine execution order

Mutliple corotuines created with go are executed concurrently.

<?php
Co\run(function() {
    go(function () {
        co::sleep(3.0);
        go(function () {
            co::sleep(2.0);
            echo "co[3] end\n";
        });
        echo "co[2] end\n";
    });

    co::sleep(1.0);
    echo "co[1] end\n";
});

Coroutine execution cost

Each coroutine use 8KB memory stack to store variables by default in PHP 7.2+.

Example

<?php
Co\run(function () {
    co::sleep(0.5);
    echo "hello";
    go("test");
    go([$object, "method"]);
});