小吴同学
善良比聪明更重要
Linux 动态链接与静态链接 Linux 动态链接与静态链接
库是写好的、可复用的代码。现实中每个程序都要依赖很多底层库,不可能从零开始。本质上库是一种可执行代码的二进制形式,可被操作系统载入内存执行。库有两种:静态库(.a/.lib)和动态库(.so/.dll)——Windows 上是 .lib/.
2020-06-21
C++ 死锁排查:Shell + GDB 定位 C++ 死锁排查:Shell + GDB 定位
在 Linux 环境下进行 C++ 编程时,多线程能显著提升程序的并发处理能力,让程序在面对复杂任务时表现得更加高效。但多线程编程并非一帆风顺,死锁问题就像隐藏在暗处的”杀手”,随时可能让程序陷入僵局。 想象一下,你的程序原本运行得好好的,
2020-06-15
一道经典 fork 面试题 一道经典 fork 面试题
这是一道关于 Unix fork() 系统调用的经典面试题:每一轮 fork 产生的新进程数量等于当前正在运行的进程数量。题目问——下面这个程序一共输出多少个 -? #include <stdio.h> #include <sy
2020-06-09
循环引用:用 shared_ptr 还是 weak_ptr? 循环引用:用 shared_ptr 还是 weak_ptr?
一、回顾循环引用问题当两个对象通过 shared_ptr 相互引用时,会产生循环引用问题,导致内存泄漏。因为这两个对象的引用计数永远不会变为 0,即使它们在程序的其他部分已经不被使用了。 典型循环引用: #include <memor
2020-06-03
fork 的开销与争议 fork 的开销与争议
fork 是一个拥有 50 年历史的系统调用,也是一个传奇。一个程序员可以永远不用 read/write,也可以不懂 mmap,但必须懂 fork。fork 没有参数、如此简单,是 UNIX 哲学的布道者们的首选,被写进了几乎每一本操作系统
2020-05-28
Linux clone 系统调用:fork 的变体 Linux clone 系统调用:fork 的变体
继传统 UNIX fork 之后,本文介绍 fork 在 Linux 内核中的变体——clone 系统调用的精妙之处。 理解 fork 的原始意义,还是要回到 Melvin Conway 提出 fork 思想的论文 A Multiproce
2020-05-16
fork 思想起源:从 Conway 论文说起 fork 思想起源:从 Conway 论文说起
fork 的思想比 UNIX 早出现几年,大约是 1963 年,比 UNIX 在 PDP-7 上的第一个版本早了 6 年。1963 年,计算机科学家 Melvin Conway 写下论文 A Multiprocessor System De
2020-05-04
enable_shared_from_this 的使用场景 enable_shared_from_this 的使用场景
enable_shared_from_this 是一个模板类,定义于头文件 <memory>,其原型为: template< class T > class enable_shared_from_this; 作用std::
2020-04-28
Linux 进程与内存管理 Linux 进程与内存管理
在讨论 Linux 的性能问题时,我们常常会遇到这样一些问题: Linux 能否满足硬实时的需求? 多核环境下多线程如何执行? 系统的内存究竟耗到哪里去了? 我写的应用程序究竟耗了多少内存? 什么是内存泄漏?如何判定内存是否真的泄漏? C
2020-04-22
TCP为什么需要TIME_WAIT TCP为什么需要TIME_WAIT
问题背景下图所示的状态机展示了通信双方建立 TCP 连接之后的状态转换过程(图片来源: tcpipguide.com)。 通信双方主动发起关闭连接的一端,存在 TIME_WAIT 状态,被动接受关闭连接的一端,会进入 CLOSE_WAIT
2020-04-16
Linux 进程管理面试题精讲 Linux 进程管理面试题精讲
题目一:进程有哪几种状态(生命周期)?平时学的是五种状态:新建、就绪、运行、阻塞、终止。但在 Linux 里能查看到的更加详细,下面命令的 STAT 列就展示了进程状态: $ ps -aux 状态有很多种,看首字母即可,其余不必太在意:
2020-04-10
深入解析 gRPC 的重连机制 深入解析 gRPC 的重连机制
gRPC 的重连机制是确保客户端在连接断开后能够自动重新连接到服务器的一种机制,对于分布式系统和微服务架构中的高可用性和容错性至关重要。 什么是 gRPC 重连机制gRPC 重连机制是指在客户端与服务器之间的连接断开后,客户端自动尝试重新建
2020-04-02
5 / 10