【发布时间】:2013-07-19 09:34:08
【问题描述】:
websocket 规范将取消屏蔽数据定义为
j = i MOD 4
transformed-octet-i = original-octet-i XOR masking-key-octet-j
其中掩码为 4 个字节长,并且必须对每个字节应用取消掩码。
有没有比循环字节更有效的方法?
可以假设运行代码的服务器是 Haswell CPU,操作系统是内核 > 3.2 的 Linux,因此 SSE 等都存在。编码是用 C 完成的,但如果需要,我也可以做 asm。
我曾尝试自己查找解决方案,但无法确定是否在数十个 SSE1-5/AVE/ 中的任何一个中都存在适当的指令(无论扩展名 - 多年来都失去了踪迹)
非常感谢!
编辑:在重新阅读规范几次之后,它似乎实际上只是对数据字节与掩码字节进行异或运算,我可以一次执行 8 个字节,直到最后几个字节。问题仍然悬而未决,因为我认为可能仍有一种方法可以使用 SSE 或类似方法来优化它(可能一次处理甚至 16 个字节?让进程执行 for 循环?...)
【问题讨论】: