杂项
mongols主要是网络库,其他一切设施均直接或间接为此而存在。
使用是pkg-config —libs —cflags mongols openssl
即可。
线程池
多线程化核心依赖。
不要迷信多线程;对真正高性能的服务器来说,使用多线程的结果通常就是将并发性能打8折——线程越多,打折越多;多线程的合适场景是后台多任务而非提高并发吞吐率。
这也是为什么libevent、libev、nodejs、nginx、redis等项目只使用单线程的真正原因。如果多线程在提供并发吞吐率方面是有效的,那么你很难解释以上项目的作者为什么不使用多线程。
实际上,mongols所提供的所有服务器在单线程情况下都会有更好的性能表现。因此,mongols在version-1.3.4之后,对多线程机制的使用做了调整,仅当需要将消息在各个连接之间转发时,才把相关任务作为后台任务由线程池执行。
线程安全队列
它是线程池的一个依赖。
RE2
正则表达式处理。
zlib
解、压缩处理。
jsoncpp
已经用到ws_server中。还有个json11,看喜欢哪个吧,都能用。我更喜欢jsoncpp。
fmt
字符串格式化。
msgpack
序列化。
http-parser
http 协议处理
simple_resp
RESP协议处理
util
满足一些零碎而必要的需求。
性能优化建议
开启缓存:set_enable_cache
或set_enable_lru_cache
。这个不是一般有效,是非常有效。