zoukankan      html  css  js  c++  java
  • [Sw] Swoole-4.2.9 可以尝试愉快应用 Swoole 协程

    大家知道 Swoole 提供了方便于服务器、网络编程的模式,简化了多进程编程。

    这直接让 PHP 的运行很容易变成常驻内存的 Server 程序,执行效率上有了数倍的提升。

    但是这一切还没有让人足够兴奋,直到协程的完整支持,也就是说,可以随时随地并发了。

    swoole-4.2.9 及以上,完整支持了 Go + Chan + Defer 编程模式,给了我们在 PHP 上面不一样的体验。

    (协程 Go+Chan+Defer:https://wiki.swoole.com/wiki/page/1019.html) 

    go :创建一个协程
    chan :创建一个通道
    defer :延迟任务,在协程退出时执行,先进后出

    就下面是一段简短的程序,来领略一下什么是随时随的并发:

    默认允许创建的最大协程数是 3000,超过会有提示,随后循环 1w 次,

    循环中使用 go 创建协程,这就创建了 1w 个协程,运行时占用 350M 左右,CPU 5%左右。

    [ 自动开启协程,同步 IO 切换为异步 IO ]

    通过 `php --ri swoole` 查看拓展的一些配置项,enable_coroutine 是默认开启的。

    下面这些回调中会自动创建协程,不需要使用 Coroutine::create( ) 或者 go( ) 创建:

    • onWorkerStart
    • onConnect
    • onOpen
    • onReceive
    • redis_onReceive
    • onPacket
    • onRequest
    • onMessage
    • onPipeMessage
    • onClose
    • tick/after 定时器

    (enable_coroutine:https://wiki.swoole.com/wiki/page/949.html

    SwooleRuntime::enableCoroutine( ) 作用是将 PHP 提供的 stream、sleep、pdo、mysqli、redis 等功能从同步阻塞切换为协程的异步 IO。

    这样在 go( ) 中的一些函数不一定要使用协程客户端了, 比如可以用 sleep 替代 co::sleep( ) 、PDO 代替 CoroutineMySQL。

    (Runtime:https://wiki.swoole.com/wiki/page/965.html

    如果想要顺利的使用协程编程,我们可能还需要 WaitGroup 功能,将极大方便 Swoole 协程编程。

    - 扩充资料 -

    协程编程须知:https://wiki.swoole.com/wiki/page/851.html

    协程并发调用:https://wiki.swoole.com/wiki/page/p-coroutine_multi_call.html

    MySQL连接池与断线重连:https://wiki.swoole.com/wiki/page/350.html

    Happy coding.

    Link: https://www.cnblogs.com/farwish/p/10236757.html

  • 相关阅读:
    git常用命令及多人协同开发及遇到的问题
    LightOJ
    LightOJ
    LightOJ
    LightOJ
    LightOJ
    LightOJ
    LightOJ
    LightOJ
    Codeforces Round #604 (Div. 2) E. Beautiful Mirrors
  • 原文地址:https://www.cnblogs.com/farwish/p/10236757.html
Copyright © 2011-2022 走看看