全部
常见问题
产品动态
精选推荐

easyswoole协程环境介绍

管理 管理 编辑 删除

协程

4.0 版本开始 Swoole 提供了完整的协程(Coroutine)+ 通道(Channel)特性,带来全新的 CSP 编程模型。应用层可使用完全同步的编程方式,底层自动实现异步IO。

协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。Swoole 可以为每一个请求创建对应的协程,根据 IO 的状态来合理的调度协程,这会带来了以下优势:

  • 开发者可以无感知的用同步的代码编写方式达到 异步IO 的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护;
  • 同时由于底层封装了协程,所以对比传统的 PHP 层协程框架,开发者不需要使用 yield 关键词来标识一个 协程IO操作,所以不再需要对 yield 的语义进行深入理解以及对每一级的调用都修改为 yield,这极大地提高了开发效率;
  • 可以满足大部分开发者的需求。对于私有协议,开发者可以使用协程的 TCP 或者 UDP 接口去方便的封装。

注意事项

  • 全局变量:协程使得原有的异步逻辑同步化,但是在协程中的切换是隐式发生的,所以在协程中切换的前后不能保证 全局变量 以及 static 变量 的一致性。
  • swoole 协程与 xdebug、xhprof、blackfirezend 扩展不兼容,例如不能使用 xhprof协程 server 进行性能分析采样。

在 EasySwoole 中使用和创建协程

当提示类似 PHP Fatal error: Uncaught Swoole\Error: API must be called in the coroutine in /root/easyswoole/test_coroutine.php:7 错误时,说明该 API 必须在协程环境下使用。

EasySwoole 框架主进程中使用协程

这里所说的主进程主要指的是在 EasySwoole 服务启动前调用协程 API 的需求,包括在 EasySwoolebootstrap 事件initialize 事件mainServerCreate 事件 中使用协程。关于前文提到的事件详细请看 全局事件

简单使用示例如下:

<?php
$scheduler = new \Swoole\Coroutine\Scheduler();
$scheduler->add(function() {
    /* 调用协程API */

    // 用户可以在这里调用上述协程 API

});
$scheduler->start();
// 清除全部定时器
\Swoole\Timer::clearAll();

EasySwoole 框架 Worker 进程中使用协程

这里所说的 Worker 进程是指 EasySwoole 服务启动之后的进程中调用协程 API 的需求,主要包括在 Http 控制器自定义进程 等进程中调用协程 API

简单使用示例如下:

<?php
\Swoole\Coroutine::create(function () {
    /* 调用协程API */

    // 用户可以在这里调用上述协程 API
});

// 或者使用如下:
go(function() {
    /* 调用协程API */

    // 用户可以在这里调用上述协程 API
});


请登录后查看

CRMEB-慕白寒窗雪 最后编辑于2023-07-12 15:25:49

快捷回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
回复从新到旧

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest==1? '取消推荐': '推荐'}}
{{item.floor}}#
{{item.user_info.title}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

作者 管理员 企业

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}   {{itemc.ip_address}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
回复
回复
2023
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

CRMEB-慕白寒窗雪 作者
社区运营专员---高冷のBoy | 呆萌のGirl

回答

7341

发布

1830

经验

66632

快速安全登录

使用微信扫码登录
{{item.label}} {{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
加精
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 开源下载 CRMEB官方论坛 帮助文档
返回顶部 返回顶部
CRMEB客服