feature-1-不需容器,没有多余的网络开销
传统 PHP 应用程序,需要借助 apache、nginx 等容器才能对外提供网络服务。
导致多了一层 apache、nginx 等容器到 PHP 进程的数据传输开销。
并且由于运行了 apache 或者 nginx 容器,进一步消耗服务器的资源。workerman 便没有这部分开销。
workerman 自身便是一个服务器容器,具有 PHP 进程管理以及网络通讯功能,完全不依赖于 apache、nginx、php-fpm 等这些容器,便可以独立运行。
feature-2-一次编译
workerman 运行过程中,单个进程生命周期内只要 PHP 文件被载入编译过一次,便会常驻内存,不会再进行磁盘读取或者再编译。
workerman 省去了重复的请求初始化、创建执行环境、词法解析、语法解析、编译生成 opcode 以及去请求关闭等诸多耗时的步骤。
workerman 运行起来后,便几乎没有磁盘 IO 及 PHP 文件编译开销,剩下的只是简单的计算过程。
feature-3-数据或资源共享
workerman 中多个请求是可以共享数据或者资源的,当前请求产生的全局变量或者类的静态成员在下一次请求中仍然有效。
这对于减少开销,提高运行效率非常有用。例如,业务只要初始化一次数据库连接,那么全局都可以共享这个连接,这实现了真正意义上的数据长连接。
从而不必每次用户请求都去创建新的连接,避免了连接时三次握手、连接后权限验证以及断开连接时四次挥手等耗时的交互过程。
对 redis、memcache 等同样有效。
feature-4-进程模型
workerman 是多进程的(也有多线程的),可以充分利用服务器多核资源。
workerman 进程模型是,主进程只负责监控子进程,而每个子进程独自接受维护客户端的链接,独自读取链接上发来的数据,独自处理。
子进程间默认没有任何数据通讯,主进程和子进程之间只有一次信号通讯。