brpc(1)—bthread和brpc
brpc 是百度开源的一个网络框架, 它几乎是开源的C++高性能网络框架的唯一选择。它是国内C++最优秀的开源作品之一,我相信国内大厂内部的闭源RPC网络库也参考过它
brpc 是百度开源的一个网络框架, 它几乎是开源的C++高性能网络框架的唯一选择。它是国内C++最优秀的开源作品之一,我相信国内大厂内部的闭源RPC网络库也参考过它
前面提到,CPU运算的瓶颈往往不在于计算,而在于内存、存储和网络。相比于设计算法模型,CPU计算更侧重于工程。
由于本人是存储方向,前面的文章大多数是关于存储的。计算机系统=计算+存储,其中计算包括计算单元(CPU、GPU)、cacheline和内存态的处理, 而存储特指IO处理。计算可分为CPU计算和GPU计算两部分,前者的典型场景是操作系统处理、进程执行、互联网业务处理和大数据和OLAP处理等。后者的典型场景是大模型的训练推理。
C++右值和右值引用是最容易用错的特性之一,相关教程普遍写得不清晰。实际上,只有在所有权转移时才需要使用右值引用,移动语义移动的是所有权,完美转发转发的也是所有权。
C++可以写出性能高效的程序,一个原因来自语言本身的因素,例如 1. C++程序编译器可以进行优化,编译直接得到机器码,这让编译后需要执行的指令更少(解释器性能比编译期差的主要原因就是是解释器单行编译执行,而编译器是文件编译执行,获得的信息更多,优化空间更大。明确的类型信息也让编译期获得内存信息,可以在无须创建对象情况下进行优化) 2. 没有虚函数的C...
文件系统是组织磁盘的形式, 文件系统提供了文件元数据信息,以及文件内容寻址能力(即将文件offset+length映射为磁盘位置);另一方面适配不同的磁盘硬件,让用户程序无须考虑硬件的区别。对用户程序来说,存储等于文件系统。
leveldb前台可并发读,但只能串行写。
redis 通过网络服务接收远程命令,进行处理,将执行结果返回。
redis 是最值得学习的开源项目, 1. 它广泛应用 2. 它实现了单机缓存数据库,同时支持网络访问、复制、集群、订阅等高级特性 3. redis依赖很少,数据结构、日志等基础库也是自行实现,有利于学习 4. redis代码精悍、质量高,甚至很难找到优化点。
leveldb 可分为五大块。db, iterator,version, memtable+log, tablefile。
分布式存储底座包括分布式文件系统和分布式一致性KV存储。对外满足的条件 1. 提供数据可靠性,底座之上不需要担心数据损坏 2. 提供数据可用性,节点崩溃不影响数据读写 3. 集群级接口,多机节点可访问
写完了代码第一件事是编译,编译失败只能根据编译器通知修改代码;编译通过了第二件事是跑UT,UT不过需要进行调试。调试包括debug和release包的调试,线上进程的运行问题有时候也需要调试,调试的主要方式是调试工具和日志(包括print大法)。为了发现问题,有时候还需要添加报警日志。
linux系统的文件接口是十分重要的抽象, 也就是“一切都是文件”。借助文件IO,用户程序可以读写磁盘设备、网络设备、甚至管道、内存等。
缓存存放的是临时数据,相比主存,缓存往往速度更快,容量更小。
简谈编程语言中的静态变量和函数
并发可分成并发对象和并发协调两部分。并发对象可以是进程、线程、协程、以及多机并发。并发协调包括锁(进程锁、线程锁、协程锁、分布式锁),信号,信号量,条件变量,通信队列等。
并发编程是提高程序处理能力的重要手段,也是编程语言必备的能力。并发的对象是函数,函数作为任务被多个并发计算对象执行。
数据结构(容器)库和算法库是最基础的库之一。字符串是人类语言的记录,是计算机处理的主要对象。
映射是最重要的数据结构之一,动态数组也可以看做特殊的映射。映射的优势是,它的增删改查性能都很好。增 增加key,删 删除key,改 更改某key的vakue,查 给定key查询value。
本文介绍linux系统的监控工具和问题排查的一般步骤,文章大体内容 1. 用户程序一定要丰富trace和日志,并对trace做监控。正常情况下如果程序处理出现问题,会在监控告警中显示,介入排查可以通过trace和日志,判断出问题的文件、执行的线程等信息,绝大多数排查可以在这里停止,根本不用抓栈抓core。trace和日志必须包含的, 1. 时间戳 2....
程序=数据+计算。类型确定了数据的定义、数据支持的计算。是程序的基础。
简谈C、C++、JAVA、Go、Python、Rust编程语言
块存储、对象存储、文件存储是云计算云存储的概念,我想基于云存储,但也不限于云存储,谈谈自己的想法。
B+树和LSM树是最常见的单机存储引擎,前者代表是Mysql等事务性数据库,后者代表是Rocksdb等nosql KV数据库。
linux操作系统大致可分为进程管理、进程协调、内存管理、文件系统、网络管理等五大部分。本文讲述内存管理、文件系统、IO/网络管理。
linux操作系统大致可分为进程管理、进程协调、内存管理、文件系统、网络管理等五大部分。本文讲述进程管理和进程协调。
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ...
使用hexo 搭建博客