线程与进程
线程 | 进程 |
---|---|
CPU调度的最小单位 | 系统资源分配的最小单位 |
线程属于进程,依赖进程存在 | 进程可以拥有多个线程,最少有一个线程存在 |
多个线程共享进程的内存空间,每个进程拥有自己的栈段,又称运行时段,用来存放临时变量和局部变量 | 进程拥有独立的内存空间 |
创建线程的系统开销小 | 创建进程系统开销大 |
同一进程的多个线程具有相同的地址空间,使它们之间的同步和通信的实现,也变得比较容易 | 进程间通信IPC |
线程开销小,切换速度快,但是编程调试相对复杂。 | 进程编译调试简单可靠性高,但是创建销毁开销大。 |
某一个线程挂掉导致整个进程挂掉 | 进程间不会相互影响 |
适用于多核 | 适用于多核,多机分布 |
进程间通信:管道、系统IPC(消息队列,信号量,信号,共享内存)套接字
线程间通信:
临界区:通过多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问;
互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
信号量semphare:为了控制具有有限数量的用户资源而设计的,它允许多个线程在同一时刻访问同一个资源,但一般需要限制同一时刻访问此资源的最大线程数目。
事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。