C++编译与链接 本文详细介绍了C++编译与链接的过程,包括预处理、编译、汇编和链接四个阶段。预处理阶段处理源代码中的预处理指令,如包含头文件和宏替换;编译阶段将预处理后的代码转换为汇编语言;汇编阶段将汇编代码转换为机器语言,生成可重定位目标程序;链接阶段将多个目标文件合并,解析符号引用,生成可执行文件。此外,文章还讨论了库文件的静态链接和动态链接,以及动态链接中的位置无关代码和延迟绑定机制。 2024-05-21 C/C++ #C/C++ #编译链接
Makefile笔记 本文首先介绍了C/C++的编译过程,包括生成可重定位目标文件、静态库文件、动态库文件和可执行文件的步骤及命令。接着,详细讲解了Makefile的基本运行方式和依赖关系定义。通过这些内容,读者可以了解如何有效地使用Makefile来管理C/C++项目的构建过程。 2024-05-17 C/C++ #Makefile #C/C++
RPC框架 本文介绍了RPC(远程过程调用)框架的基础概念,包括网络编程接口、服务器架构、分发与动态代理、网络协议、序列化和服务注册等关键组成部分。特别聚焦于PhxRPC框架,阐述了其如何整合协程、HTTP协议和Protobuf序列化工具以实现高效的远程调用。文章还概述了PhxRPC的服务器架构,介绍了Protobuf。 2024-05-13 RPC #PhxRPC #Protobuf
Raft Raft是一种分布式一致性算法,用于在多个服务器节点间达成共识。Raft集群中的节点可以是领导者(Leader)、跟随者(Follower)或候选人(Candidate)。领导者处理所有请求,跟随者被动接收更新,而候选人在领导者失效时发起选举。Raft通过任期和RPC通信来管理选举和日志复制。领导人选举通过心跳机制触发,确保每个任期内只有一个领导者。日志复制确保所有节点上的日志一致,而安全性通过选 2024-05-12 分布式 #Raft
Linux:文件IO Linux文件I/O操作涉及同步/异步、阻塞/非阻塞等模型,包括同步阻塞IO、同步非阻塞IO、IO多路复用、信号驱动式IO和异步非阻塞IO。基础IO方式如read/write默认阻塞,可通过参数变为非阻塞。高级接口如fread/fwrite减少系统调用开销。零拷贝技术如mmap和sendfile减少数据拷贝,提高性能。网络模式如Reactor和Proactor用于高效处理网络事件。 2024-05-12 Linux #Linux
Linux:同步与锁 Linux同步与锁机制包括互斥量、条件变量、死锁预防、可重入锁和读写锁。互斥量通过futex实现,结合用户态和内核态操作,减少不必要的系统调用。条件变量用于线程间同步,与互斥量结合使用,处理虚假唤醒问题。死锁预防通过破坏产生死锁的四个必要条件之一来实现。可重入锁允许同一进程多次获取锁,而读写锁允许多个读操作或单个写操作,提高并发效率。乐观锁与悲观锁是控制并发访问的理念,悲观锁通过加锁防止冲突,乐观 2024-05-12 Linux #Linux
Linux:进程管理 Linux进程管理涵盖了进程的创建与终结、进程调度算法(包括CFS等)、进程间通信方式(如管道、消息队列、共享内存、信号量、信号及socket),以及上下文切换和线程管理等关键领域,共同构成了操作系统中进程生命周期的核心机制。 2024-05-12 Linux #Linux
Linux:高速缓存 Linux内核中的高速缓存(Cache)技术,包括L1、L2、L3三级Cache,用于缓解CPU与DRAM之间的速度差距。Cache操作以Cache Line为单位,通常大小为4-128 Bytes。映射模式有直接映射、两路组相连和全相连,更新策略包括写直通和写回。组织方式涉及VIVT、PIPT和VIPT。TLB用于加速虚拟地址到物理地址的转换。多核缓存一致性通过MESI协议等硬件机制保证,原子操 2024-05-12 Linux #Linux #memory model
协程库 协程是用户态的轻量级线程,允许多个协程在一个线程内运行,分为对称和非对称。C20前,C/C++通过开源库如coroutine、libco实现协程。协程解决IO密集型程序的CPU阻塞问题,提高效率。libco库通过汇编实现上下文切换,提供socket函数hook,实现异步化。协程操作包括创建、恢复和挂起,调度基于事件模型,如libco的epoll机制。协程是提高IO密集型应用性能的有效技术。 2024-05-12 插件 #协程
RocksDB:事务管理 RocksDB事务管理涵盖隔离性、MVCC、锁机制和两阶段提交。隔离性解决脏读、不可重复读和幻读问题,通过不同隔离级别实现。MVCC通过版本快照提升读事务并发性能。RocksDB实现包括WriteBatch、Snapshot,支持Read Uncommitted、Read Committed和Repeatable Read。锁管理涉及点锁和范围锁,通过LockManager接口确保并发访问正确性。 2024-05-12 数据库 #RocksDB