传统的apache2handler或php-fpm本质上都是短生命周期(请求后释放资源)的FastCGI运行模式. 请求来了,master进程会调用worker进程来处理,处理完后释放资源. 假设你在functions.php里定义了1000个函数,那么每次请求,都要重新定义一次,有一定的性能损失. 好处则是修改保存代码后,下一个请求立即生效. 不过,PHP内置了opcache扩展,可以把functions.php对应的二进制中间码opcode缓存在内存,避免每个请求重复解析一次functions.php. 每次请求,只需重新执行一次functions.php对应的opcode指令. 另外,为了避免每次请求都重复建立MySQL/Redis等外部资源的连接,PHP引入了持久连接的机制. 让内存常驻的Apache工作进程或者PHP-FPM工作进程来维持到MySQL/Redis的长连接, 下次代码中出现 new PDO() 或者 new Redis() 时,连接存在则直接返回,连接超时断开则自动重连并返回. 这些操作对PHP开发者来说是透明的,但也有一些注意事项,因为一个MySQL长连接对应一次MySQL会话, MySQL会话中修改的东西(比如事务是否自动提交)会影响到下一次请求.

而Swoole内置的服务器(HTTP/WebSockets/MQTT/TCP/UDP),需要运行在php-cli下,是一个php-cli下的daemon守护进程服务. 也就是说,PHP逻辑是内存常驻的,服务启动后,只需加载和执行一次functions.php. 所以在函数和类以及其他全局资源的定义上,内存常驻的服务有性能优势. 但缺点是修改functions.php代码,必须重启PHP服务才能生效.

除了内存常驻外,异步当然也是Swoole高性能的一个原因,也是Swoole核心竞争力所在. 但需要明确的是,异步是用来解决IO阻塞的场景的有效手段,所以异步最直观的性能优势就是: 无需多线程,一个进程在同一时间就能维持成千上万(C10K)甚至百万(C1000K)个连接,这就是所谓的"并发". 另外,Swoole也内置了很多异步的客户端(HTTP/Redis/MySQL等),用这些客户端能够异步发起多个请求访问外部资源(API),而不会阻塞当前工作进程. 而且,Swoole还内置了异步毫秒定时器,让开发者在PHP里实现定时任务变得轻而易举. 还有,Swoole内置了task进程池,能让开发者把CPU计算密集或其他一些还没有实现异步的操作(比如SMTP发送邮件)放到task进程池里跑, 避免阻塞worker进程,让worker尽量保持异步非阻塞的状态. 总而言之,Swoole就是尽量利用异步思想来减少阻塞对服务吞吐量的影响,从而提升性能.

Swoole高性能的三大因素:

底层用C实现 + PHP逻辑内存常驻 + 异步服务器端和客户端

mysql异步非阻塞方式_如何理解swoole异步非阻塞?相关推荐

  1. python异步回调实现原理_快速理解Python异步编程的基本原理

    第一个例子 假设你需要用电饭煲煮饭,用洗衣机洗衣服,给朋友打电话让他过来吃饭.其中,电饭煲需要30分钟才能把饭煮好,洗衣机需要40分钟才能把衣服洗好,朋友需要50分钟才能到你家.那么,是不是你需要在这 ...

  2. 深入理解python异步编程_深入理解Python异步编程

    1 什么是异步编程 1.1 阻塞程序未得到所需计算资源时被挂起的状态. 程序在等待某个操作完成期间,自身无法继续干别的事情,则称该程序在该操作上是阻塞的. 常见的阻塞形式有:网络I/O阻塞.磁盘I/O ...

  3. delphi 异步 调用 带参数_如何在 Spring 异步调用中传递上下文

    什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行.异步调用指,在程序在执行时,无 ...

  4. mysql 左外连接原理_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  5. mysql子查询的方式_分布式系统中一种迭代处理MYSQL子查询的方法

    1.技术背景 1.1 背景技术 在分布式mysql中间件系统,DML语句中,子查询需要可能涉及到多个数据分片,如果在DML语句使用子查询,需要首先解析出子查询的具体内容,然后根据路由把子查询发往到各个 ...

  6. mysql数据库约束详解_深入理解mysql数据库的约束

    摘要:MYSQL添加约束,删除约束添加列,修改列,删除列 添加主键约束: altertable表名addconstraint主键(形如:PK_表名)primarykey表名(主键字段); 添加外键约束 ...

  7. mysql是一门编程语言吗_掌握一门编程语言对非程序员的工作和生活有多大好处?...

    编程的作用之一,就是可以减少重复性的劳动,所以非程序员如果能够掌握一门编程语言的话,可以大幅度地提高工作效率和质量:甚至有些时候不需要掌握编程语言,只要懂一些程序员常用的软件,就可以让你的工作事半功倍 ...

  8. 怎么运用索引查处mysql表中的数据_深入理解MySQL数据库索引原理及实现,快速检索数据库 MySQL数据库使用教程...

    免费学习推荐: 一.索引的概念 1.索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址 (类似于C语言的链表通过指针指向数据记录的内存地址) . 2.使用索引后可以不用 ...

  9. mysql数据库事务的概念_如何理解数据库事务中的一致性的概念?

    比较支持@Kai Peng 的答案,只是缺少例子说明. 而其他一些人的答案甚至有明显的错误.最近正好也在研究这方面的东西,不算是回答,就是跟大家讨论讨论. 首先,我们需要搞清楚为什么会出现事务.[1] ...

最新文章

  1. mysql hy000 1005,mysql – ERROR 1005(HY000):无法创建表(errno:150)
  2. 多样性计算时代,怎样的技术生态才能满足发展需求
  3. nginx禁止对写操作timeout时retry
  4. ReadDirectoryChangesW监控目录文件操作
  5. AI理论知识整理(3)-正定矩阵
  6. 实现一个 DFA 正则表达式引擎 - 4. DFA 的最小化
  7. 在 Kubernetes 集群中使用 MetalLB 作为 Load Balancer(上)
  8. AlexNet原理和实现
  9. Hive记录-Hive on Spark环境部署
  10. 推荐一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数...
  11. LeetCode——remove-duplicates-from-sorted-list
  12. flash电脑安装包_flash控件下载特色众多flash控件下载使用评估
  13. MT6757_MT6763处理器资料分享
  14. 超市仓库管理系统(过期提醒)
  15. cesium显示帧率FPS控件
  16. Java,图片在table中显示并缩放2.0
  17. android win10 投屏,安卓手机投影win10不成功,版本升级前可以
  18. 11.7亿、苹果仅20%、1/4的时间看短视频...关于互联网,你必须知道的几个数字......
  19. Basler相机Sdk采图的演示例程(C#)
  20. 四大思维工具,SWOT、PDCA、DISC、时间管理

热门文章

  1. MATLAB画图命令zz
  2. 计算机资源管理器课件,计算机基础课件ppt-第5讲控制面板与资源管理器.pdf
  3. aac fhg lc哪一个模式_旅游没电别发愁,一个充电头,助你游遍全球
  4. 内存压力测试软件_日常游戏,毫无压力,荣耀Magicbook 14锐龙版性能测试
  5. thinkphp+mysql+join+where_thinkphp5.0 多join时where无法between
  6. 在 Gitee 上使用 GPG公钥(Beta版)
  7. this到底指向哪里
  8. ajax请求拿到多条数据拼接显示在页面中
  9. JS里面的懒加载(lazyload)
  10. 正确判断js数据类型 总结记录