# create
~~~
int|false Warriorman\Coroutine::create(callable $function, ...$args)
~~~
## 别名
~~~
int|false void work(callable $function, ...$args)
~~~
## 说明:
创建一个新的协程,并立即执行。协程执行的代码,必须为`callable` ,暂时协程没有数量上限
### 参数
**`callable $function`**
* **功能**:协程执行的代码,必须为`callable`
**`...$args`**
* **功能**:callable的参数值
### 返回值
* 创建失败返回`false`
* 创建成功返回协程的`ID`
## 执行顺序
在一个协程中使用 work嵌套创建新的协程。因为 WarriorMan的协程是单进程单线程模型,因此:
* 使用`work`创建的子协程会优先执行,子协程执行完毕或挂起时,将重新回到父协程向下执行代码
* 如果子协程挂起后,父协程退出,不影响子协程的执行
~~~
use Warriorman\Coroutine;
work(function() {
work(function () {
Coroutine::sleep(3.0);
work(function () {
Coroutine::sleep(2.0);
echo "co[3] end\n";
});
echo "co[2] end\n";
});
Coroutine::sleep(1.0);
echo "co[1] end\n";
});
Coroutine::wait();
~~~
## 协程开销
每个协程包括C栈和PHP栈,C栈申请`2M`内存,PHP栈默认会分配`8K`的`stack`来存储协程的变量,`zval`的尺寸为`16字节`,因此`8K`的`stack`最大可以保存`512`个变量。协程栈内存占用超过`8K`后`ZendVM`会自动扩容。
协程退出时会释放申请的`stack`内存。
- 序言
- 启动停止
- 简单的开发示例
- 性能测试
- 性能测试-数据库
- 通讯协议
- Coroutine类
- create
- getCid
- yield
- resume
- sleep
- wait
- getTotalNum
- isExist
- defer
- Runtime类
- Worker类
- 构造函数
- 属性
- workerId
- id
- name
- protocol
- transport
- reusePort
- backlog
- connections
- stdoutFile
- pidFile
- logFile
- user
- reloadable
- daemonize
- globalEvent
- 回调属性
- onWorkerStart
- onWorkerReload
- onConnect
- onMessage
- onClose
- onBufferFull
- onBufferDrain
- onError
- 方法
- rename
- runAll
- stopAll
- listen
- TcpConnection类
- 属性
- id
- protocol
- worker
- maxSendBufferSize
- defaultMaxSendBufferSize
- defaultMaxPackageSize
- 方法
- set
- send
- getRemoteIp
- getRemotePort
- close
- destroy
- pauseRecv
- resumeRecv
- pipe
- Timer定时器类
- add
- del
- 定时器注意事项
- Channel类
- 构造方法
- push
- pop
- length
- isEmpty()