class SystemCall {
protected $callback;
public function __construct(callable $callback) {
$this->callback = $callback;
}
public function __invoke(Task $task, Scheduler $scheduler) {
$callback = $this->callback;
return $callback($task, $scheduler);
}
}```
系统调用是一个匿名函数,在发现任务协程返回值是SystemCall时调用匿名函数
```php
if ($retval instanceof SystemCall) {
$retval($task, $this);
continue;
}```
关联socket与task协程任务,等待事件返回时才继续执行task协程任务
```php
public function waitForRead($socket, Task $task) {
if (isset($this->waitingForRead[(int) $socket])) {
$this->waitingForRead[(int) $socket][1][] = $task;
} else {
$this->waitingForRead[(int) $socket] = [$socket, [$task]];
}
}
在PHP中使用协程实现多任务调度-个人注解
最新推荐文章于 2024-07-24 14:23:54 发布