最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 什么是协程及swoole中协程的性能

    一、内容知识点

    1、什么是协程

    2、为什么需要协程

    3、协程的性能

    二、协程介绍

    2.1、什么是协程

    协程(Coroutine)也叫用户级线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低

    Swoole可以为每一个请求创建对应的协程,根据IO的状态来合理的调度协程,线程和进程的调度是由操作系统来调控, 而协程的调度由用户自己调控。

    协程调度器可以在协程A即将进入阻塞IO操作, 将该协程挂起,把当前的栈信息 StackA 保存下来,然后切换到协程B,等到协程A的该 IO操作返回时, 再根据 Stack A 切回到之前的协程A当时的状态。协程相对于事件驱动是一种更先进的高并发解决方案,把复杂的逻辑和异步都封装在底层,让程序员在编程时感觉不到异步的存在。

    协程的执行流程:

    什么是协程及swoole中协程的性能

    2.2、协程带来的优势

    1、开发者可以无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护。

    2、同时由于swoole是在底层封装了协程,所以对比传统的php层协程框架,开发者不需要使用yield关键词来标识一个协程IO操作,所以不再需要对yield的语义进行深入理解以及对每一级的调用都修改为yield,这极大的提高了开发效率

    注意:

    1、Swoole的协程在底层实现上是单线程的,因此同一时间只有一个协程在工作,协程的执行是串行的。这与线程不同,多个线程会被操作系统调度到多个CPU并行执行。

    2、协程遇到io才会切换,单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其他线程运行

    2.3、协程适用场景

    高并发服务,如秒杀系统、高性能API接口、RPC服务器,使用协程模式,服务的容错率会大大增加,某些接口出现故障时,不会导致整个服务崩溃

    爬虫,可实现非常巨大的并发能力,即使是非常慢速的网络环境,也可以高效地利用带宽

    即时通信服务,如IM聊天、游戏服务器、物联网、消息服务器等等,可以确保消息通信完全无阻塞,每个消息包均可即时地被处理

    2.4、协程实现

    1、swoole的两种命名空间形式

    Swoole支持两种形式的命名空间一种是SwooleCoroutine2.2.0以上可使用Co命名空间短命名简化类名。

    2、协程默认支持的位置

    目前Swoole4仅有部分事件回调函数底层自动创建了协程,以下回调函数可以调用协程客户端,可以查看这里https://wiki.swoole.com/wiki/page/696.html

    在不支持协程的位置可以使用goCo::create创建协程

    3、协程的性能测试

    通过多个协程连接redis操作对比没有使用协程的方式

    4、协程并发

    协程其实也是阻塞运行的,如果,在一个执行中,比如同时查redis,再去查mysql,即使用了上面的协程,也是顺序执行的。那么可不可以几个协程并发执行呢?

    通过延迟收包的形式获取,遇到到IO 阻塞的时候,协程就挂起了,不会阻塞在那里等着网络回报,而是继续往下走,swoole当中可以用setDefer()方法声明延迟收包然后通过recv()方法收包。

    5、协程通讯

    使用本地内存,不同的进程之间内存是隔离的。只能在同一进程的不同协程内进行push和pop操作

    向通道中写入数据。

    function CoroutineChannel->push(mixed $data) : bool;

    从通道中读取数据。

    function CoroutineChannel->pop() : mixed;

    对协程调用场景,最常见的“生产者-消费者”事件驱动模型,一个协程负责生产产品并将它们加入队列,另一个负责从队列中取出产品并使用它。

    6、协程的注意问题

    如果在多个协程间共用同一个协程客户端,同步阻塞程序不同,协程是并发处理请求的,因此同一时间可能会有很多个请求在并行处理,一旦共用客户端连接,就会导致不同协程之间发生数据错乱。

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 什么是协程及swoole中协程的性能
    • 20会员总数(位)
    • 16193资源总数(个)
    • 961本周发布(个)
    • 0 今日发布(个)
    • 116稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情