Jackarain / proxy

Implementation of http, https, socks4/socks4a, socks5 server and client proxy protocols using modern c++ (使用现代 c++ 实现 http、https、socks4/socks4a、socks5 服务端和客户端完整的代理协议。)
Boost Software License 1.0
202 stars 84 forks source link

性能改进更新 #23

Closed microcai closed 3 days ago

microcai commented 4 days ago

一共 3 个改进:

  1. 完全使用 utf-8 内码。利用 boost.nowide 实现。在 unix 平台,nowide 是个 no op 操作。避免了 utf16 和 utf8 之间来回转换。在 win 平台, boost.nowide 会对utf8 进行 转 utf16 操作,然后调用 utf16 版的 win api. 相比之前的代码,只有 win 平台有编码转换的问题。主力运行的linux平台,则 避免了转换。而且此修改代码改动极少。很多地方都是直接删除 wide_utf8/utf8_wide 之类的调用。删代码是最好的优化。

  2. 对 HTTP server 部分使用了 PMR 分配器。做到内存一次大分配,多次小碎片分配,然后连接完成再一次大释放。相比 非pmr 版本,性能有 50% 的提升。尤其是 列举一个超大的文件夹的时候。

  3. 使用asio的异步文件 stream_file 替换之前的 ifstream, 极大的提高了文件传输的效率。同时避免磁盘IO比较高的情况下卡住 web 服务器。对于不支持异步文件IO的平台,还是 fallback 到老的 ifstream。