libevent:事件通知库,主要有以下几个亮点:事件驱动(event-driven),高性能;轻量级,专注于网络,不如ACE那么臃肿庞大;源代码相当精炼、易读;跨平台
glog:google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活,而且功能也比较完善。
spdlog:logger库,重点推荐!为什么呢因为好使!没有废话.而且是headeronly的.
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高效内存分配器,尤其多线程场景*jerasureReedSolomon编解码,给存储系统实现erasurecode*murmurhash…实现hash摘要*crc32数据存储或传输时的数据校验*cJSON解析json格式配置文件*libBSONJSON序列化/反序列化,MongoDB使用这种格式存储数据*boost功能丰富的C++基础库,轻度使用,C++11/14后基本不用了。*libRedisredis是一个数据库服务,并不是单独的库,但其代码精简,质量非常高,里面很多代码都可以拿出来直接复用,比如网络,各种数据结构的实现。
为什么——
A.自己写一遍太累B.写得很好C.实用且满足我的需求D.好用不折腾E.代码有深度且可读性高,可以挖宝贝
用过才敢推荐,其中B/E读过才敢评价重点推荐microprofile,不只用来分析性能好用,用来帮助理解引擎运行流程也是极其特别好用,往Unreal里面随便一放,它哪个线程什么时候在做什么事情、调用关系、调度状况、依赖关系一切都看得清清楚楚明明白白真真切切——而且本身性能影响极小,可以远程监控,报表可以存下来慢慢研究,神器
不管怎么看Unreal代码,都没这一幅图清晰
Update:再加两个没人提的
Catch2:著名的单元测试框架,那么它和boost或者google的单元测试框架有什么不同呢
就在于它首先是headeronly的,其次是没有废话,直击要害!你要测试对吧给你!
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的源代码,百分之一百的ANSIC,一点都不掺杂。在任何支持ANSIC编译器的平台上都可以轻松编译通过。我试过,真是一点废话都没有。Lua的代码数量足够小,5.1.4仅仅1.5W行,去掉空白行和注释估计能到1W行。
SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。
UNIXV6的内核源代码包括设备驱动程序在内约有1万行,这个数量的源代码,初学者是能够充分理解的。有一种说法是一个人所能理解的代码量上限为1万行,UNIXV6的内核源代码从数量上看正好在这个范围之内。看到这里,大家是不是也有“如果只有1万行的话没准儿我也能学会”的想法呢?
另一方面,最近的操作系统,例如Linux最新版的内核源代码据说超过了1000万行。就算不是初学者,想完全理解全部代码基本上也是不可能的。
NetBSD是一个免费的,具有高度移植性的UNIX-like操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从64bitalpha服务器到手持设备和嵌入式设备。NetBSD计划的口号是:”OfcourseitrunsNetBSD”。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSDPackagesCollection获得。
关于C++框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。
C++标准库,包括了STL容器,算法和函数等。
C++通用框架和库
音频,声音,音乐,数字化音乐库
生物信息,基因组学和生物技术
压缩和归档库
并发执行和多线程
数据库,SQL服务器,ODBC驱动程序和工具
调试库,内存和资源泄露检测,单元测试
动力学仿真引擎
XML就是个垃圾,xml的解析很烦人,对于计算机它也是个灾难。这种糟糕的东西完全没有存在的理由了。-LinusTorvalds
一些有用的库或者工具,但是不适合上面的分类,或者还没有分类。