目录
什么是线程死锁(Deadlock)?如何避免或检测线程死锁?
如何使用 pthread 库实现线程池(Thread Pool)?
如何使用条件变量(Condition Variables)进行线程同步?
如何通过 pthread_cond_wait 和 pthread_cond_signal 实现线程间通信?
如何管理线程的状态和资源?如何防止线程泄漏(Thread Leaks)?
什么是命名管道(Named Pipe)?如何使用它进行进程间通信?
Linux 中的信号机制是什么?如何在进程间发送和接收信号?
select、poll、epoll 的区别和应用场景是什么?
什么是僵尸进程(Zombie Process)?如何避免或清理它?
什么是孤儿进程(Orphan Process)?它是如何产生的?
进程间通信(IPC)有哪些方式?简述每种方式的特点和使用场景。
进程的时间片(Time Slice)是什么?它是如何影响调度的?
Linux 中如何控制进程的 CPU 亲和力(CPU Affinity)?
什么是进程的调度类(Scheduling Class)?如何查看进程的调度类?
什么是进程的 fork 和 exec 系统调用?它们的作用是什么?
如何使用 nice 和 renice 命令调整进程的优先级?
进程切换和线程切换的开销分别体现在哪些方面,为什么线程切换开销更小?
如何在 Linux 中使用 pthread 库创建和管理线程?
什么是线程的竞争条件(Race Condition)?如何避免它?
进程是什么?
进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和调度的基本单位。
从资源角度看,进程拥有独立的内存空间,包括代码段、数据段、堆和栈。代码段存放程序的可执行代码,数据段存储全局变量和静态变量,堆用于动态内存分配,栈则用于函数调用的局部变量存储以及函数调用的上下文信息。例如,当运行一个文本编辑器进程时,它的代码段包含了编辑器软件的所有执行指令,数据段可能有默认的字体、字号等设置相关的数据,堆会在用户打开新文件等操作时动态分配内存来存储文件内容,栈用于处理函数调用,像保存打开文件这个操作对应的函数调用的局部变量等。
进程在操作系统中有自己的状态,如就绪、运行、阻塞等。就绪状态表示进程已经准备好运行,只要 CPU 时间片分配到它就可以执行;运行状态就是进程正在占用 CPU 执行指令;阻塞状态是指进程在等待某些事件完成,比如等待 I/O 操作完成,像等待从硬盘读取文件内容或者等待网络数据传输完成。
操作系统通过进程控制块(PCB)来管理进程,PCB 包含了进程的标识符、状态、优先级、程序计数器、内存