多进程与多线程
多进程
1. Context 上下文 切换开销
- 页表目录项更新
- 寄存器中的数据
- 切换 kernel status stack (内核态栈)
- Flush
TLB
- L1 ~ L3 的 cache indirectly expired (disabled). Directly access memory.
2. 进程的共享空间
- 进程不共享栈空间, 每个 Process 都有 independent virtual address space (独立的虚拟地址空间)
- 共享内存
3. 进程的三种状态:
- 就绪 Ready
- 运行 Running
- 阻塞 Blocking
pipe
, fifo
管道 (Linux native support)
- Memory Share
- Message Queue
- Signal (开销小,但传递的信息简单)
- Semaphore (信号量)
- Socket (常用)
5. 僵尸进程
- 子进程先结束,父进程没有回收掉子进程的资源,显示为
zoobie
Process
6. 孤儿进程
- 父进程先结束,子进程仍然存活, 将由系统的 init 进程负责回收相关资源
多线程
1. 线程间同步
- 互斥锁
- 读写锁
- 条件变量
condition_variable
- 信号量
- 自旋锁(avoid 进程或线程的 context 切换开销)
2. 线程共享的资源
- 文件描述符 (
fd
内核管理)
PID
和 PGID
- 同进程的内存地址空间:
.text
代码段
.data
数据段
.bss
未初始化数据段
- 堆区
- 全局变量
- 静态变量
- 每种信号的 handler (处理方式)
- 进程的当前目录
cwd
3. 线程独享的资源
- 线程的 stack
- 寄存器的值
- 线程ID
TID
- 错误返回的
errno
变量
- 线程信号屏蔽字
- 线程优先级