2024年9月23日

摘要: 优化Go数据包传输协议:性能基准测试与分析 场景:在局域网内,需要将多个机器网卡上抓到的数据包同步到一个机器上。 原有方案:tcpdump -w 写入文件,然后定时调用 rsync 进行同步。 改造方案:使用 Go 重写这个抓包逻辑及同步逻辑,直接将抓到的包通过网络发送至服务端,由服务端写入,这样就 阅读全文
posted @ 2024-09-23 17:21 文一路挖坑侠 阅读(222) 评论(0) 推荐(0) 编辑

2024年7月15日

摘要: 重构服务的一些想法 最近对一个服务进行了大重构(不仅仅是代码的重构,还有构建、部署和单元测试等),之前很多实践的经验都应用上了,实践下来效果比较满意。 模块设计 需要明确服务的核心功能 执行时机(被谁驱动) 执行内容 和非核心功能的关系 从模块话的角度看,这三个部分其实都可以独立实现,这样更利于单元 阅读全文
posted @ 2024-07-15 14:12 文一路挖坑侠 阅读(409) 评论(0) 推荐(0) 编辑

2024年7月4日

摘要: Go 使用原始套接字捕获网卡流量 Go 捕获网卡流量使用最多的库为 github.com/google/gopacket,需要依赖 libpcap 导致必须开启 CGO 才能够进行编译。 为了减少对环境的依赖可以使用原始套接字捕获网卡流量,然后使用 gopacket 的协议解析功能,这样就省去了解析 阅读全文
posted @ 2024-07-04 09:45 文一路挖坑侠 阅读(290) 评论(0) 推荐(0) 编辑

2024年7月3日

摘要: Go 如何对多个网络命令空间中的端口进行监听 需求为 对多个命名空间内的端口进行监听和代理。 刚开始对 netns 的理解不够深刻,以为必须存在一个新的线程然后调用 setns(2) 切换过去,如果有新的 netns 那么需要再新建一个线程切换过去使用,这样带来的问题就是线程数量和 netns 的数 阅读全文
posted @ 2024-07-03 18:04 文一路挖坑侠 阅读(196) 评论(0) 推荐(0) 编辑

2024年5月28日

摘要: 智能指针一些实现分析 提供值传递但是指针语义的功能。通过指针占用并且对管理对象,在离开作用域时释放该对象。 在使用上还有另外一个很好用的功能,精简了代码复杂度,管理的对象类可以省略以下的函数 默认构造函数 复制构造函数 复制赋值函数 比如有一个类 Fd 用于管理 fd ,并且拥有 fd 的所有权,所 阅读全文
posted @ 2024-05-28 18:04 文一路挖坑侠 阅读(201) 评论(0) 推荐(1) 编辑

2024年5月23日

摘要: 迭代器的一些简单理解 使用迭代器最方便的地方就是和算法库结合,对于实现只需要聚焦于算法,而不用过多考虑数据结构的实现。 举一个常见的的例子,std::copy_n 用作于范围元素的复制,适配于各个容器类型,并且演化出了 back_inserter/front_inserter/inserter 这类 阅读全文
posted @ 2024-05-23 12:00 文一路挖坑侠 阅读(198) 评论(0) 推荐(0) 编辑

2024年5月21日

摘要: 虚函数是一种成员函数,其行为可以在派生类中被覆盖,支持动态调用派发。 使用示例代码如下: extern "C" { // 避免 operator<< 多次调用,简化汇编代码 void println(const char *s) { std::cout << s << std::endl; } } 阅读全文
posted @ 2024-05-21 15:01 文一路挖坑侠 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 本文为对不同场景下的构造函数调用进行跟踪。 构造函数 默认情况下,在 C++ 之后至少存在六个函数 默认构造/析构函数,复制构造/复制赋值,移动构造/移动赋值。以下代码观测发生调用的场景 #include <iostream> struct Foo { Foo() : fd(0) { std::co 阅读全文
posted @ 2024-05-21 15:00 文一路挖坑侠 阅读(20) 评论(0) 推荐(0) 编辑

2024年2月29日

摘要: 如何使用 perf 分析 splice 中 pipe 的容量变化 这个文章为了填上一篇文章的坑的,跟踪内核函数本来是准备使用 ebpf 的,但是涉及到了低内核版本,只能使用 kprobe 了。 恰好,在搜索东西的时候又看到了 perf,可以使用 perf probe 来完成对内核函数的跟踪,使用相对 阅读全文
posted @ 2024-02-29 19:21 文一路挖坑侠 阅读(135) 评论(0) 推荐(3) 编辑

2024年2月26日

摘要: 记一次 splice 导致 io.Copy 阻塞的排查过程 简而言之,net.TCPConn 的 ReadFrom 零拷贝实现 splice 在 1.21.0 - 1.21.4 删除了 SPLICE_F_NONBLOCK 参数,导致在 CentOS7.9(内核版本 3.10.0.0) 上 splic 阅读全文
posted @ 2024-02-26 12:26 文一路挖坑侠 阅读(328) 评论(0) 推荐(2) 编辑

导航