对于先进先出的内存分配场景分配内存的策略可以简单很多例如消息队列的内存分配问题 思考消息队列中的元素内存大小差异巨大无法预先分配确定的内存块来传递数据 在此提出一种基于计数的...
对于先进先出的内存分配场景分配内存的策略可以简单很多例如消息队列的内存分配问题 思考消息队列中的元素内存大小差异巨大无法预先分配确定的内存块来传递数据 在此提出一种基于计数的...
背景 例如分配一片内存,一般是顺序申请,乱序回收 如果是跨线程的话,一般需要引入锁来解决并发访问的问题 然而锁的使用,极大的限制住了最高的访问并发量 在此提出了无锁解决的方案...
一般来说server单机,实现30w qps算很高了, 但是受摩尔定律的限制,单核的性能已经发挥到了极致,市场上,也出现了大量多核的服务器 那么对于单线程epoll的服务器架...
当程序在操作文件,网络传输时,都会发生系统调用 系统调用会让线程切换用户态和内核态,并且当系统调用长时间没返回,会导致线程阻塞,并无法处理其他事情 system call l...
使用方法 创建一个拥有五个线程的线程池 提交一个任务到线程池执行 取消线程池中的所有任务 具体实现
设计原理 初始化 建立2048个元素的数组,用于传输数据 为每个元素分配一个版本号:turn turn为奇数是,为可读 turn为偶数时,为可写 生产者 抢夺head原子变量...
CPU Cache有L1/L2/L3 cache,它们是为了减缓CPU高速与Ram低速之间的数据运输成本的buffer speed L1: 4 CPU cyclesL2: 1...
出自:https://www.brendangregg.com/perf.html[https://www.brendangregg.com/perf.html] 简介 pe...
出自:https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10...
简介 对于短时间的locking,spin lock可以提供更好的性能,对比mutex lock。因为spin lock不会让线程陷于睡眠,从而提供更好的性能 实现过程 一个...
背景 多线程通讯,如果是单读单写,一般使用带atomic操作的ring buffer来实现 ring buffer原理非常简单,而然,如果需要实现高性能,则需要在原始的设计上...
背景 C++的设计具备面向对象的思想 通过面向对象的抽象,可以很好解耦和扩展。 然而对于某些高性能设计,面向对象并不是很好的设计 而面向数据的思想在某种程度,解决了高性能的问...
背景 协程分为有栈协程和无栈协程 有栈协程在每次挂起的时候,都需要保存一份堆栈,来存储当前的上下文 当协程频繁的挂起时,就会消耗大量的计算在保存堆栈上。 为了解决这个问题,提...
问题 在写一个us级别的系统,需要考虑什么因素 因素 线程 通过中断的方式处理线程,会让线程不断的从睡眠和唤醒来回,这些行为虽然可以提高CPU的使用率,在无事可做的时候,CP...
背景 在程序运行的过程中,经常会遇到使用std::queue的情况,例如线程之间的交互 而std::queue内的元素,一般会使用std::unique_ptr来维护内存的生...
介绍 实现多进程单读单写共享内存无锁队列不使用信号量来同步而是通过原子操作来同步 performance 优化点 使用局部变量,而不是类成员,减少编译优化的难度 使用padd...
编译器会对代码做很多优化,根据统计,应用百分之八十的时间落在循环体中,因此循环优化变得尤为重要。 循环优化的目的 移动非必要的计算到循环体外 使用最廉价的指令 使用SIMD来...
背景 编译器会为代码做编译优化 一般来说,编译器的工作会做得很好 但是由于C++过于灵活,导致编译器不敢过度优化 opt-viewer是llvm提供的一款显示编译优化的工具 ...