首先压测时要根据手册优化后linux内核,并安装event扩展,否则系统通讯性能会有很大影响。
Gateway::sendToUid 和 Gateway::sendToClient不同,Gateway::sendToUid是向所有gateway进程发送一条发送指令,Gateway::sendToClient是向对应的那一个client_id发送指令。Gateway::sendToUid性能要比Gateway::sendToClient差很多。但是在GatewayWorker中环境里Gateway::sendToUid 接口都是异步非阻塞的,系统负载正常的情况下不会耗时这么长时间。
另外看下是不是用了GatewayClient,如果是GatewayClient,通讯过程是阻塞的,而且要与register连接,然后与所有gateway连接通讯,耗时要长一些,但是这个是GatewayClient的问题,不是GatewayWorker问题。
最后并不是任何压力程序都能运行飞快,当系统因压测负载很高时,可能平时不耗时的操作都非常慢,原因很简单,系统处理不过来了,当有复杂业务或者业务本身性能很差时会更明显。