参见https://interview.huihut.com/#/?id=%e8%bf%9b%e7%a8%8b%e4%b9%8b%e9%97%b4%e7%9a%84%e9%80%9a%e4%bf%a1%e6%96%b9%e5%bc%8f%e4%bb%a5%e5%8f%8a%e4%bc%98%e7%bc%ba%e7%82%b9
对于有线程系统:
- 进程是资源分配的独立单位
- 线程是资源调度的独立单位
对于无线程系统:
- 进程是资源调度、分配的独立单位。
进程之间的通信方式以及优缺点
- 管道(PIPE)
- 信号量(semaphore)
- 信号(signal)
- 消息队列(message queue)
- 共享内存(shared memory)
- 套接字(socket)
线程之间的通信方式 - 锁机制:
互斥锁/量(mutex):提供了以排他方式防止数据结构被并发修改的方法。
读写锁(reader-writer lock):允许多个线程同时读共享数据,而对写操作是互斥的。
自旋锁(spin lock)与互斥锁类似,都是为了保护共享资源。互斥锁是当资源被占用,申请者进入睡眠状态;而自旋锁则循环检测保持者是否已经释放锁。
条件变量(condition):可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。 - 信号量机制(Semaphore):
无名线程信号量
命名线程信号量 - 信号机制(Signal):类似进程间的信号处理
- 屏障(barrier):屏障允许每个线程等待,直到所有的合作线程都达到某一点,然后从该点继续执行。
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制
进程之间私有和共享的资源
私有:地址空间、堆、全局变量、栈、寄存器
共享:代码段,公共数据,进程目录,进程 ID
线程之间私有和共享的资源
私有:线程栈,寄存器,程序计数器
共享:堆,地址空间,全局变量,静态变量
多进程与多线程间的对比、优劣与选择