首页 > 代码库 > 进程与线程的区别

进程与线程的区别

时间:2014.06.25

地点:基地

-------------------------------------------------------------------------

一、简述

  进程Process和线程Thread是操作系统的基本概念,抽象而重要。以下从几个方面来分析进程和线程的区别。

-------------------------------------------------------------------------

二、分析

   进程可认为是程序执行时的一个实例,是系统进行资源分配的独立实体每个进程拥有独立的地址空间,所以一个进程无法直接访问另一个进程的变量和数据结构。如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:共享存储系统,消息传递系统,管道通信系统等。


   一个进程可以拥有多个线程,每个线程使用其所属的栈空间,线程与进程最主要的区别是:同一个进程内的多个线程会共享部分状态,即多个线程可以读写同一块内存,换句话说就是进程的内存空间是共享的,每个线程都可以使用这些共享内存,当然,这其中也有某些共享内存在线程之间虽然共享,但各线程需互斥或满足一定条件才能访问。于是就有了互斥锁,防止对个线程同时读写某一块内存区域。还有些内存只能供给固定数目的线程使用,好比一个房间定义只能容纳n个人,解决的办法是在门口挂n把钥匙,每个进去时就取一把,出来时把钥匙放回,一旦后面有人想进去而钥匙架已空,就得在门口排队等待,这就是信号量,用来保证多个线程互不冲突,互斥锁是信号量的一种特殊情况(n=1),因此完全可用后者代替前置,但互斥锁简单高效,在必须保证资源独占的场景下,我们采用互斥锁。,而一个进程是无法直接访问另一个进程的内存的。同时,每个线程还拥有自己的寄存器和栈,其他线程可以读写这些栈内存。

线程是进程的一个特定执行路径,当一个线程修改了进程中的资源时,其兄弟线程可以立即看到这种变化。

-------------------------------------------------------------------------

三、总结

1.进程是系统进行资源分配的基本单位,有独立的内存地址空间;线程是CPU调度的基本单位,没有单独的地址空间,有独立的栈,局部变量,寄存器和程序计数器等。
2.创建进程的开销大,包括创建虚拟地址空间等需要大量的系统资源;创建线程的开销小,基本上只有一个内核对象和一个堆栈。
3.一个进程无法直接访问另一个进程的资源;同一个进程内的多个线程共享进程的资源
4.进程的切换开销大,线程的切换开销下;进程间通信开销大,线程间通信开销小。
5.线程属于进程,不能独立执行,每个进程至少有一个线程,即主线程。