libevent:事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台
glog:google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活,而且功能也比较完善。
spdlog: logger库, 重点推荐! 为什么呢? 因为好使! 没有废话. 而且是header only的.
gRPC:是由Google主导开发的RPC框架,使用HTTP/2协议并用ProtoBuf作为序列化工具。
abseil:谷歌的库,可以看作是STL的扩充
OpenCV:视觉图像处理库
FFTW :号称最快的FFT!
深度学习:推荐Eigen,它也是tensorflow的基础组件之一。
单元测试
caffe
header-only 的 HTTP 网络库!!! s/c 端都支持一些常用方法。
效率跟 curl/cpp-netlib/cpprestsdk 之类的重器没得比,但胜在写 demo 之类的小东西很方便。
喏,一个服务端完整示例:
gzip压缩zlib
json序列化nlohmann/json
二进制序列化protobuf
嵌入式数据库sqlite
日志库glog
参数解析库gflags
消息队列zmq
rpc库brpc
tcp网络库evpp
做存储, 数据库系统方面的开发,主要用到
* grpc/libevent/libev/libasio 实现高性能网络服务器 * protobuf 数据结构序列化/反序列化,方便数据交换 * LevelDB/RocksDB 嵌入式KV数据库 * snappy/zlib/lz4 数据压缩,解压缩 * jemalloc/tcmalloc 高效内存分配器,尤其多线程场景 * jerasure Reed Solomon编解码,给存储系统实现erasure code * murmurhash… 实现hash摘要 * crc32 数据存储或传输时的数据校验 * cJSON 解析json格式配置文件 * libBSON JSON序列化/反序列化,MongoDB使用这种格式存储数据 * boost 功能丰富的C++基础库,轻度使用,C++11/14后基本不用了。 * libRedis redis是一个数据库服务,并不是单独的库,但其代码精简,质量非常高,里面很多代码都可以拿出来直接复用,比如网络,各种数据结构的实现。
为什么 ——
A. 自己写一遍太累 B. 写得很好 C. 实用且满足我的需求 D. 好用不折腾 E. 代码有深度且可读性高,可以挖宝贝
用过才敢推荐,其中 B/E 读过才敢评价 重点推荐 microprofile,不只用来分析性能好用,用来帮助理解引擎运行流程也是极其特别好用,往 Unreal 里面随便一放,它哪个线程什么时候在做什么事情、调用关系、调度状况、依赖关系一切都看得清清楚楚明明白白真真切切 —— 而且本身性能影响极小,可以远程监控,报表可以存下来慢慢研究,神器
不管怎么看Unreal代码,都没这一幅图清晰
Update: 再加两个没人提的
Catch2: 著名的单元测试框架, 那么它和boost或者google的单元测试框架有什么不同呢?
就在于它首先是header only的, 其次是没有废话,直击要害! 你要测试对吧? 给你!
Celero: 简单清晰的benchmark库, 特点就是简单易用没有废话.
bundle: 把几乎所有常见的压缩库封装成了一个库, 接口完全统一, 想用哪个用哪个.
就一个h和一个巨TM大的cpp文件,巨好使巨方便.
Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。
cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。
cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。
cmockery是google发布的用于C单元测试的一个轻量级的框架。它很小巧,对其他开源包没有依赖,对被测试代码侵入性小。cmockery的源代码行数不到3K,你阅读一下will_return和mock的源代码就一目了然了。
主要特点:
libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。
Lua很棒,Lua是巴西人发明的,这些都令我不爽,但是还不至于脸红,最多眼红。
让我脸红的是Lua的源代码,百分之一百的ANSI C,一点都不掺杂。在任何支持ANSI C编译器的平台上都可以轻松编译通过。我试过,真是一点废话都没有。Lua的代码数量足够小,5.1.4仅仅1.5W行,去掉空白行和注释估计能到1W行。
SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。
UNIX V6 的内核源代码包括设备驱动程序在内 约有1 万行,这个数量的源代码,初学者是能够充分理解的。有一种说法是一个人所能理解的代码量上限为1 万行,UNIX V6的内核源代码从数量上看正好在这个范围之内。看到这里,大家是不是也有“如果只有1万行的话没准儿我也能学会”的想法呢?
另一方面,最近的操作系统,例如Linux 最新版的内核源代码据说超过了1000 万行。就算不是初学者,想完全理解全部代码基本上也是不可能的。
NetBSD是一个免费的,具有高度移植性的 UNIX-like 操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从 64bit alpha 服务器到手持设备和嵌入式设备。NetBSD计划的口号是:”Of course it runs NetBSD”。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。
关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。
C++标准库,包括了STL容器,算法和函数等。
C++通用框架和库
音频,声音,音乐,数字化音乐库
生物信息,基因组学和生物技术
压缩和归档库
并发执行和多线程
数据库,SQL服务器,ODBC驱动程序和工具
调试库, 内存和资源泄露检测,单元测试
动力学仿真引擎
XML就是个垃圾,xml的解析很烦人,对于计算机它也是个灾难。这种糟糕的东西完全没有存在的理由了。-Linus Torvalds