异步非堵塞IO

为什么需要异步

优势

  • 1、更高的并发

高并发,同步阻塞IO模型的并发能力依赖于进程/线程数量,例如 php-fpm开启了200个进程,理论上最大支持的并发能力为200,异步非阻塞的并发能力几乎是无限的,可以发起或维持大量并发TCP连接

  • 2、无IO等待,更好的用户体验

通常我们进行 http 请求都是通过 curl 或者 file_get_contents,但是并发的性能都不好,都是同步执行,需要等待请求执行完成才能执行下一步操作,Swoole 内置的异步客户端没有并发限制,当你的程序读取网络或磁盘时。swoole会加入到事件监听中,完全不需要等待,你的代码可以取做别的事情。当网络或磁盘读取完成,返回数据时,再继续向下执行你的代码。

劣势

  • 1、编码复杂

传统的PHP同步方式实现功能和逻辑是最简单的,也是最佳的方案。像node.js这样到处callback,只是牺牲可维护性和开发效率。

  • 2、不可控

同步模式的程序具有良好的过载保护机制,下面的情况异步程序就会出问题

Accept保护,同步模式下一个TCP服务器最大能接受 进程数+Backlog 个TCP连接。一旦超过此数量,Server将无法再接受连接,客户端会连接失败。避免服务器Accept太多连接,导致请求堆积

Last updated