协程
协程,又称微线程,纤程。英文名 Coroutine,MixPHP 从 v1.1.0 开始支持协程开发。
优势
协程模式与常驻模式/传统模式相比:
常驻模式/传统模式都属于同步阻塞编程,由于同一个进程不能并行处理请求,所以为了提高并发,只能开启更多的进程,通常超过 100 甚至更多,每个进程都有基础的内存消耗,加起来就很多了,而且受限于 Linux 总进程数限制,并发总数无法突破,加上进程非常多之后,CPU 需要更多的线程切换,浪费了很多性能,当然相比 FPM 的传统模式每次都需从头开始,常驻模式还是要好非常多的,但是协程显然更加优秀。
协程模式的执行方式:
协程模式中一个进程可以同时执行 N 个请求,但同一时刻只执行其中的某一个请求,也就是说,当执行到 MySQL/Redis 这些客户端时,由于需要等待客户端响应,常驻模式/传统模式通常是在傻傻的等待响应,而协程这个时候会挂起当前协程,切换到其他协程中去处理其他请求,所以协程能同时处理 N 个请求,每增加一个请求只需增加一些内存消耗,相比增加一个进程的内存消耗,显然是少太多的,由于协程能并行处理,所以通常只需配置于 CPU 数量 1~2 倍左右的进程数即可,更少的进程带来更少的 CPU 线程切换,又减少很多性能损耗。
如何开启协程
需 Swoole >= 4.2.2 才可开启。
MixPHP 默认是关闭协程的,可按下面操作开启协程。
打开 mix-httpd 服务器的配置文件:
apps/httpd/config/httpd.php
HTTP 协程开发
MixPHP 的 HTTP 协程开发,简单到不可思议,协程变量隔离什么的都处理好了,用户只需直接使用协程客户端即可,而且协程客户端使用方法于常驻模式完全一致,也就是说协程模式与常驻模式只有配置文件上的差别,还有多了一个连接池的配置而已。
协程客户端请阅读 “客户端” 章节的内容。