摘要: https://www.ibm.com/docs/en/aix/7.2?topic=io-direct-vs-normal-cached https://www.ibm.com/docs/en/aix/7.2?topic=io-benefits-direct https://xiaolincodin 阅读全文
posted @ 2024-07-31 14:38 hellozhangjz 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 段错误定位 原因是昨天遇到一个BUG,复现概率很小,一直复现了一下午,后来google发现可以用execinfo.h里的backtrace函数及信号处理机制, 来让程序在发生段错误时自动打印调用堆栈。最后终于复现出来了两次,用这个函数也定位到了出错位置,是多线程下的一个同步问题。 之前遇到的BUG基 阅读全文
posted @ 2024-07-09 09:32 hellozhangjz 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 看了这篇文章 Linux中的进程栈和线程栈 说主线程生成的子线程的 stack 区是用 mmap 系统调用映射到进程的堆区。于是实践验证一下,代码如下。 void* threadFunction(void* args) { int a = 10; // 线程的局部变量 cout <<"&a : " 阅读全文
posted @ 2024-05-21 21:13 hellozhangjz 阅读(3) 评论(0) 推荐(0) 编辑
摘要: #include <stdlib.h> #include <ucontext.h> #include <stdio.h> int main() { ucontext_t uc; int a = 2, b = 3; getcontext(&uc); printf("asdafa"); int k = 阅读全文
posted @ 2024-04-22 10:39 hellozhangjz 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 先打印出某个地址,然后阻塞(getchar())进程,查一下进程的 id,然后执行Linux 命令pmap {pid} 查看进程的空间布局(MAC 使用vmmap {pid}),将之前打印的地址对应到某一段。 using namespace std; #define FUCK(x) cout << 阅读全文
posted @ 2024-04-15 14:20 hellozhangjz 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 调用过程 call f :将当前指令(call)的下一条指令地址压栈,然后跳转到 f 函数。 f 函数初始化:将 rbp 压栈(保存调用者的 rbp),为了返回 main 函数时 rbp 寄存器指向正确的位置。将 rsp 赋值给 rbp,这是 f 函数的栈底。 返回过程 f 过程完了之后。 pop 阅读全文
posted @ 2024-04-01 20:22 hellozhangjz 阅读(10) 评论(0) 推荐(0) 编辑
摘要: ikcp_input 先从下层协议将数据读出来,并将对应的包头信息解析出来,根据不同的包头命令进入不同的处理逻辑。 int ikcp_input(ikcpcb *kcp, const char *data, long size) { IUINT32 prev_una = kcp->snd_una; 阅读全文
posted @ 2024-03-15 20:41 hellozhangjz 阅读(138) 评论(0) 推荐(0) 编辑
摘要: KCP 协议是一种可靠的传输协议,对比 TCP 取消了累计确认(延迟 ACK)、减小 RTO增长速度、选择性重传而非全部重传。通过用流量换取低时延。 KCP 中最重要的两个数据结构IKCPCB和IKCPSEG,一个IKCPCB对应一个 KCP 连接,通过这个结构体维护发送缓存、接收缓存、超时重传时间 阅读全文
posted @ 2024-03-15 15:28 hellozhangjz 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 主键索引:表的主键为 B+Tree 的 key。 二级索引:二级索引的 value 是表的主键,这样做的好处是 B+Tree 的节点小,可以一次放入更多节点到内存,减少 IO 次数。缺点是需要回表:通过二级索引查到的主键,再去主键索引查需要的信息。 聚簇索引:索引结构和数据一起存放的索引,InnoD 阅读全文
posted @ 2024-03-08 10:56 hellozhangjz 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 1、互斥量 可以确保同一时间只有一个线程访问临界区,防止出现竞态条件。 2、原子操作 std::atomic<int> mutex(1); 对原子变量的操作是线程安全的。 3、读写锁 std::shared_mutex mutex; // 读者:共享锁定 mutex.lock_shared(); m 阅读全文
posted @ 2024-03-07 19:55 hellozhangjz 阅读(100) 评论(0) 推荐(0) 编辑