自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(259)
  • 资源 (13)
  • 收藏
  • 关注

原创 brpc组件bvar源码解析(四)Sampler、SamplerCollector和Window类簇

1.Sampler类

2022-06-01 01:05:19 525 1

原创 brpc组件bvar源码解析(三)Variable、Reducer和Adder

1.Variable类Variable是所有bvar的基类,是一个纯虚类。拥有的唯一的成员变量是_name。Variable类中的接口分为几类:描述相关的子类实现纯虚函数describe,目的是将bvar的值写入ostream。get_description不是纯虚函数,它调用了describe写入ostringstream,返回ostringstream的string。曝光相关的例如:expose,expose_impl,expose_as,list_exposed,count_ex

2022-05-19 17:26:43 644

原创 brpc组件bvar源码解析(二)AgentGroup和AgentCombiner

上一篇:brpc组件bvar源码解析(一)简介、使用和类的关系1.AgentGroupAgentGroup中通过tls数据实际保存了bvar在每个线程中的统计值。AgentGroup类的定义:模板参数Agent实际传入的是AgentCombiner::Agent这个结构体;对于Agent相同的bvar,例如两个bvar::Adder< int >,在AgentGroup中实际的存储空间是同一块buffer,通过AgentId定位(类似一个数组的不同下标)。成员变量都是static的,

2022-05-15 23:47:26 532

原创 brpc组件bvar源码解析(一)简介、使用和类的关系

bvar是brpc中的一个重要组件,brpc内部有很多builtin监控都是bvar实现的。brpc文档介绍bvar“几乎不会给程序增加性能开销,也快于竞争频繁的原子操作”。它的原理是:多线程累加一个计数器时,每个线程只累加私有的变量而不参与全局竞争,因此写时没有锁的竞争;在读取时累加所有线程的私有变量。虽然读比之前慢多了,但写就快多了,因此它使用写多读少的场景,例如统计、监控场景。1.使用// bvar::Adder<T>用于累加,下面定义了一个统计read error总数的Adder。

2022-05-12 11:08:14 1218

原创 C++20 协程coroutine

#1.协程概念协程函数与普通函数的区别:(1)普通函数执行完返回,则结束。协程函数可以运行到一半,返回并保留上下文;下次唤醒时恢复上下文,可以接着执行。协程与多线程:(1)协程适合IO密集型程序,一个线程可以调度执行成千上万的协程,IO事件不会阻塞线程(2)多线程适合CPU密集型场景,每个线程都负责cpu计算,cpu得到充分利用协程与异步:(1)都是不阻塞线程的编程方式,但是协程是用同步的方式编程、实现异步的目的,比较适合代码编写、阅读和理解(2)异步编程通常使用callback

2021-08-04 22:23:46 1952

原创 设计模式备忘录(未完)

组件协作模式组件协作模式通过晚期绑定,来实现框架和应用程序之间的松耦合,是二者之间协作时常用的模式。典型模式:模板方法观察者策略模板方法算法骨架不变,子步骤经常发生变化,或者需要晚期实现。观察者定义对象间的一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新。策略...

2020-10-27 00:52:57 191

转载 linux futex浅析

Futex,Fast Userspace muTEXes,作为linux下的一种快速同步(互斥)机制,已经存在了很长一段时间了(since linux 2.5.7)。它有什么优势?又提供了怎样一些功能,本文就简单探讨一下。futex诞生之前在futex诞生之前,linux下的同步机制可以归为两类:用户态的同步机制 和 内核同步机制。 用户态的同步机制基本上就是利用原子指令实现的spinlock。最简单的实现就是使用一个整型数,0表示未上锁,1表示已上锁。trylock操作就利用原子指令尝试将0改为1

2020-05-28 11:18:50 1294

转载 C++11用户定义字面量

用户定义字面量来看一下下面的程序:C/C++12 lines#include <iostream>long double operator"" _mm(long double x) { return x / 1000; }long double operator"" _m(long double x) { return x; }long double operator"" _km(long double x) { return x * 1000; }int main(){

2020-05-20 11:58:08 877

原创 【cpp-taskflow】源码分析

一、简介cpp-taskflow 源码:https://github.com/cpp-taskflow/cpp-taskflow(后面简称taskflow)taskflow一个写的比较好的基于task有向无环图(DAG)的并行调度的框架,之所以说写的比较好,个人觉得有几点原因:1.是一个兼具学术研究和工业使用的项目,并非一个玩具2.现代C++开发,风格简洁(源码要求编译器支持C++1...

2020-02-07 01:07:08 9228 4

转载 【整理】Flex使用方法

背景知识Flex 和 Bison 是两个在编译前期最常实验的工具,分别是用来做 lexical analyse 和 semantic analyse 的,这两个工具的使用基本不需要很深的编译知识,只需要掌握正则表达式的书写(lexical analyse阶段使用)和上下文无关文法(semantic analyse 阶段使用),就可以完成这两个阶段的分析了。Flex大体介绍Flex 主要是用在...

2019-12-19 11:14:44 2234

转载 断路器模式

作者: Martin Fowler译者: java达人来源: https://martinfowler.com/bliki/CircuitBreaker.html软件系统对运行在不同进程或者网路中不同的机器的软件进行远程调用是很常见的。内存中调用和远程调用之间的一个主要区别是,远程调用可能会失败,或者在达到某个超时限制之前挂起而没有响应。更糟糕的是,如果一个响应延迟的服务提供方上有许多...

2019-12-17 00:36:51 831

转载 Circuit Breaker模式

Circuit Breaker模式会处理一些需要一定时间来重连远程服务和远端资源的错误。该模式可以提高一个应用的稳定性和弹性。问题在类似于云的分布式环境中,当一个应用需要执行一些访问远程资源或者是远端服务的时候,是很容易碰到一些偶然的错误的,比如说,网络连接速度很慢,超时,或者是资源的过量使用,或者临时资源不再可用等等。这一类的错误通常来说会在短暂的时间内,自动恢复过来。一个健壮的云应用也该能...

2019-12-17 00:31:22 1239

原创 C++11与C++14遍历tuple

tuple,元组类型。头文件,tuple是一个固定大小的不同类型(异质,heterogeneous)值的集合(这一点是tuple与其他常规STL容器的最大不同,即它可以同时存放不同类型的数据),是泛化的std::pair(也即std::pair是tuple的一个特例,长度受限为2)。对tuple的遍历输出template<typename... Args>std::ostream...

2019-04-25 10:55:12 7818 1

原创 CPU Cache分享

不能上传ppt,只好发图片格式:关于CPU Cache的分享

2018-08-29 11:46:40 435

原创 C++11利器

由于CSDN blog不能上传ppt格式,只能转成图片格式来发了。 【参考:《深入应用C++:代码优化与工程级应用》】...

2018-08-29 11:27:19 1375

原创 GO语言分享

取之于网,用之于网

2018-08-27 11:23:04 2038

原创 降低redis内存使用与减少请求延迟

最近阅读了《Redis实战》,总结一下里面提到的一些优化的方法如何降低Redis内存使用:使用正确的数据结构key长度越小占用内存越小(积少成多)value的值是否可以进行处理部分数据结构在长度较小、个数较少的情况下会采用节省空间的算法存储,可以与sharding结合减少总内存使用sharding:减少单机可使用内存量(虽然不会减少总内存量)如何减少请求Redis的延迟...

2018-04-13 15:35:43 1660

原创 lock-free编程

取之于网,用之于网

2018-03-16 22:52:12 579

转载 GDB(设置断点)

启动GDB后,首先就是要设置断点,程序中断后才能调试。在gdb中,断点通常有三种形式:断点(BreakPoint):在代码的指定位置中断,这个是我们用得最多的一种。设置断点的命令是break,它通常有如下方式:break     在进入指定函数时停住break     在指定行号停住。break +/-offset    在当前行号的前面或后面的offs

2018-01-25 21:09:21 16726 1

原创 mac xcode安装使用protobuf

安装安装过程完全参照这里:https://www.jianshu.com/p/0a70eef1bd4a 贴一下:怎么判断有没有安装过protobuf?终端中执行:protoc --version``` ####如何安装安装protobuf-2.4.1下载链接: http://download.csdn.net/download/yockie/10224567安装proto

2018-01-25 21:04:30 2993

原创 C++11研究vector插入元素尽量减少对象构造

在阅读之前可以可以先看这篇文章复习一下std::move与std::forward: 理解std::move和std::forward背景遇到以下场景,Bar类中有成员变量foo是Foo类的对象,在项目代码中需要申请一个Bar对象,给其中foo中的变量复制,并插入到vector中,定义如下:struct Foo { std::string name; std:

2018-01-11 21:33:00 1174

原创 python连接自建redis服务器

步骤先在linux机器上自建redis服务器 1.1. 先在官网下载了最新稳定版的源码压缩包http://download.redis.io/releases/redis-4.0.6.tar.gz, 1.2 解压,make,生成bin在src/下 1.3 执行 ./src/redis-server1.4 测试是否成功 >./src/redis-cli >ping若回显PONG

2018-01-03 21:56:53 1600

转载 控制反转与依赖注入

一、引述IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP、声明式事务等功能在此基础上开花结果。但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义,这不能不说是一大遗憾。不过IoC确实包括很多内涵,它涉及代码解耦、设计模式、代码优化等问题的考量,我们打算通过一个小例子来说明这个概念。二、通过实例理解IoC的概念贺岁大片在中国已经形成了一个传统,每到年底总

2017-09-01 14:47:44 371

转载 vs内存泄露检测方法

方法一、通过内存状态比较1、功能:可以检测某段代码间的内存泄露.2、描述: 若要确定代码中某一部分是否发生了内存泄漏,可以在该部分之前和之后对内存状态拍快照,然后使用 _CrtMemDifference 比较这两个状态: _CrtMemState s1, s2, s3; _CrtMemCheckpoint(&s1); // memory allocations take plac

2017-03-22 12:27:02 1476

转载 Boost::circular_buffer——循环缓冲区

一、概述Boost.Circular_buffer维护了一块连续内存块作为缓存区,当缓存区内的数据存满时,继续存入数据就覆盖掉旧的数据。 它是一个与STL兼容的容器,类似于 std::list或std::deque,并且支持随机存取。circular_buffer 被特别设计为提供固定容量的存储大小。当其容量被用完时,新插入的元素会覆盖缓冲区头部或尾部(取决于使用何种插入操作)的元素。逻辑存储结构

2017-03-22 11:37:50 14394 1

转载 git将当前分支上修改的东西转移到新建分支

比如我在A分支做了一些修改,现在由于某种原因(如A分支已经合并到master)不能把A分支上修改的东西保留下来但是需要把A分支上修改的东西继续在新分支继续修改。那么现在我们可以有两种简单的做法完成这一需求。第一种方法我们不需要在A分支做commit,只需要在A分支新建B分支,然后切换过去。这个时候你会发现修改的东西在A,B分支都有。这个时候在B分支commit,那么这些修改保留在B

2017-03-06 16:26:30 18544 5

转载 2>&1使用

2>&1使用一 相关知识1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |)。2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号(backquotes `)。3) 默认地,标准的错误输出到终端,但是也可以重定向到文件。4)标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来

2017-02-20 16:24:41 462

转载 网络编程:Reactor与Proactor的概念

1、标准定义两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件

2017-01-03 17:24:23 400

转载 SMP中多线程程序的性能衰退现象之False Sharing

这次我们来聊一聊多核CPU运行多线程程序时,可能会产生的一种性能衰退现象——False Sharing. 貌似很高大上?No No No,我相信看完这篇文章之后你会完全理解False Sharing,并且能够在设计和编写多线程程序的时候意识到并完美解决这个问题。 OK,我们开始吧。首先,False Sharing的产生需要几个特定条件:CPU具有多个核心,其上运行着的同一个程序的多个线程分别运行在

2016-11-29 22:35:47 834

翻译 C++并发编程

C++11相比之前的版本具有很多优秀的特性,比如lambda表达式,初始化列表,右值引用,自动类型推导。同时,C++11标准库现在也支持正则表达式、智能指针、多线程库。但现代C++在并行和异步计算方面依然较为薄弱,特别是与C#等语言相比。异步的需要为什么需要支持异步呢?多核处理器几乎无处不在、并在云中分布的核,使得计算机体系结构变得越来越并行化和分布式化。软件程序往往越来越多的由使用了位于单个机器或

2016-11-24 23:27:32 7968 3

转载 学习何时以及如何使用 POSIX AIO API

AIO 简介Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。I/O 模型在深入介绍 AIO API 之前,让我们先来探索一下

2016-11-16 21:26:04 940

转载 【转】浅谈对协程的理解

我心中的协程最近在研究网络服务框架方面的东西,发现了一个神奇的东西-协程。一句话说明什么是线程:协程是一种用户态的轻量级线程。一句话并不能完全概括协程的全部,但是起码能让我们对协程这个概念有一个基本的印象。从硬件发展来看,从最初的单核单CPU,到单核多CPU,多核多CPU,似乎已经到了极限了,但是单核CPU性能却还在不断提升。server端也在不断的发展变化。如果将程序分为IO密集型应用和CPU密集

2016-11-16 15:10:10 824

转载 在Linux下判断系统当前是否开启了超线程

在判断当前是否开启了超线程之前,需要先判断另外几个数据:1,物理CPU个数:123[root@localhost ~]# cat /proc/cpuinfo | grep "physical id" | sort | uniqphysical id : 0 physical id : 1

2016-11-11 11:33:23 10730 2

转载 Linux下cp目录下的带隐藏文件的子目录

何在Linux下拷贝一个目录呢?这好像是再简单不过的问题了。 比如要把/home/usera拷贝到/mnt/temp,首先想到的就是cp -R /home/usera/* /mnt/temp但是这样有一个问题,/home/usera下的隐藏文件都不会被拷贝,子目录下的隐藏文件倒是会的。那如何才是正确的方法呢?有人说用-a选项,有人说用find加管道。 其实没这么复杂,Google了之后,学了一招

2016-10-20 14:53:49 19973

转载 vsnprintf和snprintf

vsnprintf和snprintf是C语言printf家族函数的成员,相关函数列表如下:#include <stdio.h> int printf(const char *format, ...); //输出到标准输出 int fprintf(FILE *stream, const char *format, ...); //输出到文件 int sprin

2016-10-12 14:16:24 34739

原创 gtest与gmock学习资料

玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制Google Mock 入门

2016-09-27 17:13:01 1202

原创 C++11使用emplace_back代替push_back

最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多。首先,写了一个类用于计时,//time_interval.h#pragma once#include <iostream>#include <memory>#include <string>#ifdef

2016-09-26 21:32:26 59688 8

转载 桥接模式(别名Handle/Body)、与接口、抽象接口

一、背景在C++中封装的概念是把一个对象的外观接口同实际工作方式(实现)分离开来,但是C++的封装是不完全的,编译器必须知道一个对象的所有部分的声明,以便创建和管理它。我们可以想象一种只需声明一个对象的公共接口部分的编程语言,而将私有的实现部分隐藏起来。C + +在编译期间要尽可能多地做静态类型检查。这意味着尽早捕获错误,也意味着程序具有更高的效率。然而这对私有的实现部分来说带来两个影响:是即使程

2016-09-22 22:24:59 2125

转载 Linux下查看.so和可执行文件是否debug编译

如何判断一个.so是否是debug编译的?如果用此方法:用file来查看一个.so, 根据是否包含”not stripped”来判断该.so是否是debug编译的。然而stripped/not stripped并不是debug/release编译的判断标准. 对debug和release的.so运行file后可得出几乎相同的输出, 都是not stripped。所以此方法是不准确的。debug/re

2016-09-07 20:17:28 8339

原创 Windows客户端性能分析与优化入门

两年前写的《客户端性能分析与优化入门》,分享出来,希望能得到大家的认可~地址:http://download.csdn.net/detail/yockie/9619239

2016-09-01 17:55:15 2009 2

protobuf-2.4.1

Google提供一个具有高效的协议数据交换格式工具库(类似Json)。 但相比于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍。

2018-01-25

《客户端性能分析与优化入门.pdf》

在原部门写的《客户端性能分析与优化入门》,分享出来,希望能得到大家的认可~

2016-09-01

很全的驱动开发工具大全

除DriverStudio、WinDriver和DDK(主要太大了,我只能上传小于20M的)的所有驱动开发工具,在网上找了,还没有这么全面的,不信去搜~~包括:VXDWriter、Vtoolsd、Soft-ice、 Trw2000、DbgView、IRPTrace、Monitor、WinObj等

2009-06-19

BMP图片的打开、处理及保存(MFC程序)

对BMP图片数据的读取实现打开,并可以做直方图均衡化、中值滤波处理,对BMP图片数据的写实现保存(注:程序皆为原创,非网上流传)

2009-06-08

MFC有界面RSA加密解密算法实现

公钥密码算法RSA的加密解密,特意写了详细的注释,使用方法:先“生成一对密钥”,用户需要记住这对密钥并保密,然后在“输入”里面输入你想要处理的字符,若要加密,则点“加密”,若解密则点“解密”,注意密钥,前者输入公钥,后者输入私钥。

2009-05-22

MFC编的DES加密解密程序

有界面的DES加密解密算法的实现程序,算法很麻烦,都是各种置换,我写了注释,理解应该不难。

2009-04-23

华为3com内部绝密培训资料linux 基础

这个linux培训教程非常好,是华为3com内部绝密培训资料,我是托了一个好朋友才搞到的,估计外面基本找不到,是pdf格式的,我自己为了便于学习还亲自去打印了,相当不错,强烈推荐,虽然资源分3分有点多,但物有所值啊~~

2008-12-30

学生成绩单存取(MFC单文档文件的保存和打开的两种方法)

通过编写学生成绩单存取软件学习MFC单文档保存和打开的两种方法:第一种是在新建project时在step4中选择"Anvanced...",其中“File extension”就是让你输入你想要保存文件时的默认扩展名,而保存和打开是通过串行化(自己可以查资料)实现的;第二种方法是通过CFileDialog类的一些函数实现保存和打开以及扩展名的。

2008-12-30

司机售票员PV操作MFC程序模拟

这是操作系统的实验,主要是模拟司机售票员PV操作的程序,用MFC实现的,所以比API或者命令行下的程序的一些函数不一样,比较复杂一点,希望可以帮助到大家。

2008-12-30

基于对话框的MFC程序加载位图为背景图案

我也算是MFC的初学者,最近学习了一个小问题,就是基于对话框的MFC程序加载位图为背景图案的问题,简单的说就是给界面换“皮肤”的问题,虽然简单,但是还是不错的

2008-12-28

白中英计算机组成原理课后习题答案

白中英的计算机组成原理是国内计算机组成原理教材中的经典之经典,在学习之后重要做下习题检验一下成果,这个时候需要它的课后习题答案来检测!

2008-12-25

模拟内存页式存储管理

内存有很多的管理方式,其中一种经典的管理方式就是页式管理,本程序模拟模拟页式管理

2008-12-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除