归档
善良比聪明更重要
06
21
Linux 动态链接与静态链接 Linux 动态链接与静态链接
库是写好的、可复用的代码。现实中每个程序都要依赖很多底层库,不可能从零开始。本质上库是一种可执行代码的二进制形式,可被操作系统载入内存执行。库有两种:静态库(.a/.lib)和动态库(.so/.dll)——Windows 上是 .lib/.
2020-06-21
15
C++ 死锁排查:Shell + GDB 定位 C++ 死锁排查:Shell + GDB 定位
在 Linux 环境下进行 C++ 编程时,多线程能显著提升程序的并发处理能力,让程序在面对复杂任务时表现得更加高效。但多线程编程并非一帆风顺,死锁问题就像隐藏在暗处的”杀手”,随时可能让程序陷入僵局。 想象一下,你的程序原本运行得好好的,
2020-06-15
09
一道经典 fork 面试题 一道经典 fork 面试题
这是一道关于 Unix fork() 系统调用的经典面试题:每一轮 fork 产生的新进程数量等于当前正在运行的进程数量。题目问——下面这个程序一共输出多少个 -? #include <stdio.h> #include <sy
2020-06-09
03
循环引用:用 shared_ptr 还是 weak_ptr? 循环引用:用 shared_ptr 还是 weak_ptr?
一、回顾循环引用问题当两个对象通过 shared_ptr 相互引用时,会产生循环引用问题,导致内存泄漏。因为这两个对象的引用计数永远不会变为 0,即使它们在程序的其他部分已经不被使用了。 典型循环引用: #include <memor
2020-06-03
05
28
fork 的开销与争议 fork 的开销与争议
fork 是一个拥有 50 年历史的系统调用,也是一个传奇。一个程序员可以永远不用 read/write,也可以不懂 mmap,但必须懂 fork。fork 没有参数、如此简单,是 UNIX 哲学的布道者们的首选,被写进了几乎每一本操作系统
2020-05-28
16
Linux clone 系统调用:fork 的变体 Linux clone 系统调用:fork 的变体
继传统 UNIX fork 之后,本文介绍 fork 在 Linux 内核中的变体——clone 系统调用的精妙之处。 理解 fork 的原始意义,还是要回到 Melvin Conway 提出 fork 思想的论文 A Multiproce
2020-05-16
04
04
28
22
Linux 进程与内存管理 Linux 进程与内存管理
在讨论 Linux 的性能问题时,我们常常会遇到这样一些问题: Linux 能否满足硬实时的需求? 多核环境下多线程如何执行? 系统的内存究竟耗到哪里去了? 我写的应用程序究竟耗了多少内存? 什么是内存泄漏?如何判定内存是否真的泄漏? C
2020-04-22
10
Linux 进程管理面试题精讲 Linux 进程管理面试题精讲
题目一:进程有哪几种状态(生命周期)?平时学的是五种状态:新建、就绪、运行、阻塞、终止。但在 Linux 里能查看到的更加详细,下面命令的 STAT 列就展示了进程状态: $ ps -aux 状态有很多种,看首字母即可,其余不必太在意:
2020-04-10
03
29
Linux 进程与线程模型 Linux 进程与线程模型
UNIX 的传统倾向于把一个任务交给一个进程全权受理。但一个任务内部往往不止一个执行流——就像公司里所有人做同一件事,每个人只负责一部分,粒度减小后各事情可以同时进行,同时大家又共享着所有资源。于是就有了线程:线程就是共享资源的不同的执行流
2020-03-29
17
Linux 僵尸进程的产生与处理 Linux 僵尸进程的产生与处理
可能很少有人意识到,一个进程调用 exit 之后,它并非马上就消失,而是留下一个称为僵尸进程(Zombie)的数据结构。在 Linux 进程的几种状态中,僵尸进程非常特殊:它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅
2020-03-17
3 / 4