自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 编译 arm 版 perl

文章目录一. 准备工作1.1. 下载 perl 和 perl-cross1.2. 安装交叉工具链二. 配置和编译2.1. 解压2.2. 编译参考 一. 准备工作 环境: Ubuntu 16.04 perl-5.30.0 perl-cross-1.3 1.1. 下载 perl 和 perl-cr...

2019-06-20 16:44:05 504 0

原创 C++ 返回值优化

文章目录背景Copy elision 和 RVO编译器无法优化返回值的场景参考 背景 使用函数返回非内置类型对象时总是担心因拷贝对象而带来的性能问题。 因此经常使用方式一传递对象的引用作为函数的参数,然后在函数里为对象赋值,而不使用方式二 方式一: void f(std::vector<in...

2019-05-20 21:20:59 359 0

翻译 编译 arm 版本 protobuf

文章目录准备下载编译参考 准备 $ sudo apt install autoconf automake libtool curl make g++ unzip git 安装 arm 工具链 $ sudo apt install gcc-arm-linux-gnueabihf 下载 下载 pr...

2019-03-19 21:36:34 683 0

原创 map 中结构体或指针做 key

文章目录一. 问题背景1.1. 问题描述1.2. 问题分析二. 解决方案2.1. 方案一2.2. 方案二三. 参考 一. 问题背景 1.1. 问题描述 朋友今天问了一个关于 map 的问题,假设有个 Person 结构体如下: typedef struct { std::string name...

2019-02-16 01:33:32 1951 0

原创 cmake protobuf

一. 简介 Protocol Buffers 是一种数据序列化的格式。特点是语言无关,平台无关。 相比于 XML 的优势是更小,更快和更简单。适合数据存储或 RPC 数据交换,可用于通信协议。 支持的语言包括:C++,C#,Dart,Go,Java,Python 等。 二. 安装 https://...

2019-01-29 13:08:09 1608 0

原创 coturn 简介

文章目录一. 安装1.1. 下载1.2. 安装二. 配置三. 启动 &amp;amp; 测试3.1. Server3.2. Client四. 代码流程4.1. 大体框架涉及的函数4.2. 设置 relay 相关4.3. 处理请求或数据4.4. 分析请求并构造返回数据4.5. 真正的返回数据...

2019-01-15 17:03:29 2277 0

原创 UPnP 端口映射原理

文章目录一. 简介二. 协议2.1. 发现2.2. 控制三. miniupnp3.1. upnpc 常用命令介绍3.2. miniupnp 映射部分代码简单逻辑参考 一. 简介 实现 UPnP 条件: 路由器需支持 UPnP,且需启用该功能。 操作系统需支持 UPnP,且操作系统需启用该功能。 ...

2018-12-14 21:06:44 3420 0

原创 DHCP 分配 IP 初探

文章目录一. 概念1.1. 作用1.2. 为什么要使用 DHCP二. DHCP 原理2.1. DHCP 分配 IP 过程2.1.1. DISCOVER2.1.2. OFFER2.1.3. REQUEST2.1.4. ACK2.1.5. 完成配置2.1.6. DHCP Client 和 Server...

2018-12-05 21:19:26 282 0

原创 减少 golang 二进制文件大小

文章目录一. Go VS C 二进制ELF二. 如何减小 go 二进制文件大小2.1. -ldflags2.2. UPX参考 环境: $ go version go version go1.11.2 linux/amd64 $ gcc --version gcc (Ubuntu 5.4.0-6u...

2018-11-28 12:08:34 2895 2

原创 NUMA

文章目录一. 概念二. NUMA 带来的新问题三. 设置 NUMA参考 一. 概念 非一致性内存访问(Non-Uniform Memory Access,简称 NUMA) 特点: 内存划分为多个内存节点。 内存的访问时间取决于访问 CPU 和节点的相对位置。 # numactl --hard...

2018-11-14 16:58:20 385 0

原创 系统监控 dashboard - netdata

OS:Ubuntu 16.04 一. 准备阶段 $ apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make git autoconf autoconf-archive autogen automake pkg-config curl 二...

2018-11-07 21:31:38 605 0

原创 gRPC c++

准备工作 Install grpc $ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc $ cd grpc $ git submodule update --init $ make &...

2018-10-31 21:37:51 1887 0

原创 TCMalloc

文章目录问题简介小对象分配划分管理分配大对象分配划分分配Span释放参考 内存分配的重要因素:速度。 不同 malloc 分配速度对比: malloc 耗时 减少锁争用 空间效率 ptmalloc2 300 ns 线程 arena 每个对象 4Bytes 头,大小四舍五入为 8 的...

2018-10-02 18:31:30 649 0

原创 go 设计模式(一)单例模式

go 的单例模式写法比较简单,可以通过sync.Once来辅助。 type Singleton struct { name string } var ( once sync.Once instance *Singleton ) func New() *Singl...

2018-09-27 11:16:35 332 0

原创 Mac 下 git 命令自动补全

一. 安装 bash-completion brew install bash-completion 安装成功后提示: ==&gt; Caveats Add the following line to your ~/.bash_profile: [ -f /usr/local/etc...

2018-09-27 01:13:02 915 0

原创 Golang 通过方法名调用方法

有这样一个结构体 Person,带有4个方法。 现在有个需求,想通过方法的名字调用对应的方法,想到的办法是将名字和对应方法建立 map 关系。 type Person struct { nape string age int } func (p *Person) SetName(nape ...

2018-09-20 20:14:41 4853 1

原创 Golang 通过 cgo 调用 C/C++ 静态库(二)

书接上回 C 调用 C++ 类 Golang 通过 cgo 调用 C/C++ 静态库(一) 如果想使用 golang 调用 C++ 代码该如何做? 我们知道,golang 无法直接调用 C++,但是可以调用 C,所以我们需要用 C 包装下 C++ 代码。 还是 C 调用 C++ 类 中 P...

2018-09-17 19:59:38 1925 2

原创 Golang 通过 cgo 调用 C/C++ 静态库(一)

hello.h #ifndef HELLO_H_ #define HELLO_H_ #ifdef __cplusplus extern "C" { #endif extern int hello(char *name, int age); #ifdef __cpluspl...

2018-09-17 19:21:08 8322 6

原创 C 调用 C++ 类

现在有个类Person,其中成员函数分别用于获取 name 和 age: - GetName() - GetAge() 我们希望可以在 C 代码中调用 C++ 类的方法。 person.h class Person { public: Person(std::string na...

2018-09-14 15:57:44 6827 0

原创 vim 提示 PANIC PANIC PANIC

写 go 程序的时候,突然发现自动提示时显示PANIC PANIC PANIC。起初以为是YouCompleteMe出了问题,检查了下排除这种可能。 最后网上搜索发现是gocode的问题。解决方法如下: gocode close &amp;&amp; go get -u git...

2018-09-09 00:03:08 273 0

原创 invalid use of non-static member function

现在有一个 Object 类,它有两个方法: Recv 负责接收数据,并传递给 Process Process 负责处理数据 我们希望这个类接收完数据后启动线程去处理,不阻塞后面的其他业务逻辑。 class Object { public: void Recv() { ...

2018-09-06 18:26:07 15148 0

原创 Golang 闭包

为了加速数据处理,往往我们会选择goroutines并行处理。 values := []string{"c++", "golang", "python"} for _, val := range values { go func...

2018-09-06 11:51:13 110 0

原创 C++ 使用 curl 发送 json 数据请求

用到的库: curl nlohmann/json 假设现在 Client 想要获取 Person 喜欢的语言,需要发送 Person 的个人信息到 Server,Server 根据用户姓名返回他喜欢的语言。 struct Book { std::string name; }; st...

2018-09-06 07:49:20 2334 0

原创 Golang http 开启 gzip

一. 测试代码 1.1. http 开启 gzip 数据大小对比 1.2. http 开启 gzip benchmark 对比 参考 一. 测试代码 package gzip import ( "compress/gzip" "...

2018-08-27 08:25:37 3757 0

翻译 TCP 拥塞控制

文档翻译自 https://tools.ietf.org/html/rfc5681 摘要 本文档定义了 TCP 的四种拥塞控制算法:慢启动,拥塞避免,快速重传和快速恢复。 此外,文档还规定了 TCP 在相对较长的空闲时段之后应如何开始传输,以及讨论各种确认生成方法。RFC 2581 已...

2018-08-02 10:47:21 1139 0

翻译 可靠的 UDP 协议

可靠 UDP 协议 译自 https://tools.ietf.org/html/draft-ietf-sigtran-reliable-udp-00 摘要 此 Internet 草案讨论了可靠UDP(RUDP)。RUDP 基于 RFC 1151 和 908。RUDP 在 UDP...

2018-07-24 23:43:07 1517 0

原创 Golang 通过代码执行命令

有时需要通过代码执行一些系统命令来获取信息,golang 提供exec.Command来实现这一目的。 shtest.go package main import ( "fmt" "os/exec" "strings&...

2018-04-24 20:27:42 5649 0

原创 Golang panic 打印堆栈信息

一. 缘起 程序进程后台运行 monitor 监控程序负责拉起程序 当因为逻辑问题导致后台进程挂掉时,不容易发现程序曾经挂过。 golang 可以通过 recover 捕获 error,并将 panic 时的堆栈打印到日志来定位问题。 $ tree panictest panictes...

2018-04-24 00:55:05 6420 0

原创 Golang 序列化方式及对比

Golang 序列化的方式: Binary Gob JSON Protobuf 一. Binary // OK type Message struct { Id uint64 Size uint64 } // Wrong /*type Message str...

2018-04-18 14:02:24 11479 3

原创 Python redis.ttl 返回 None

今天在 Python 中使用 redis 遇到一个奇怪的问题。

2017-12-07 12:02:04 1826 4

原创 random shuffle

数组洗牌实现// random_shuffle.cpp#include <iostream> #include <vector> #include <ctime>void random_shuffle(std::vector<int>& v)...

2017-12-06 10:28:02 274 0

原创 l2fwd 测试

环境如下: Ubuntu 16.04 cpu 4 core Intel Corporation 82545EM Gigabit Ethernet Controller * 2个 dpdk-17.02.1 提示: 测试需要root权限 一. dpdk 环境搭建1.1. 编译 dpdkcd dpdk

2017-11-03 11:34:24 1289 0

翻译 libmaxminddb

libmaxminddb - 用于处理 MaxMind 数据库文件的库

2017-10-18 21:32:52 2099 0

原创 lua tcp socket read timed out

线上机器在晚高峰 20:00 ~ 00:00 点之间 CPU 负载很高,且 nginx 的 error.log 日志中有大量类似如下内容:2017/10/16 22:19:48 [error] 16583#0: *137334081 lua tcp socket read timed out, c...

2017-10-17 12:53:56 7057 0

原创 Grafana Test Failed Network Error: Bad Gateway(502)

一. 问题 问题描述: Grafana 添加Data Sources Test 时失败,显示Network Error: Bad Gateway(502)

2017-09-13 19:58:00 9060 9

翻译 怎样设置 Docker 监控

本文转自 https://www.brianchristner.io/how-to-setup-docker-monitoring/ 作者:Brian Christner Brian’s spent a large portion of his career in the casino in...

2017-09-03 15:56:35 1913 0

原创 使用 tcpcopy 线上导流及回放

有时项目上线前需要模拟线上流量进行压测或者验证功能,或者从线上导流到测试环境,排查问题,使用 tcpcopy 可以帮你完成这些目的。https://github.com/session-replay-tools/tcpcopy

2017-09-01 18:10:48 4307 7

原创 redis expire key 过期不删除

1. 问题描述今天使用 redis 遇到个奇怪的问题,key 设置过期时间后,到期后并没有删除。

2017-08-28 21:20:59 7328 5

原创 Intel VTune Amplifier XE 使用

VTune是 Intel 一个比较强大的性能分析软件。下载地址:intel-vtune-amplifier-xe

2017-08-10 13:19:37 6083 0

翻译 用 TestPMD 测试 DPDK 性能和功能

此文转自Testing DPDK Performance and Features with TestPMD 作者简介:Pablo de Lara Guarch 是英特尔网络软件工程师,主要关注DPDK的数据平面函数和库的开发,其贡献包括哈希算法增强和新的加解密设备驱动。此外,他还维护了DPD...

2017-08-05 17:41:25 3739 1

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