进程与线程,信号量与互斥量的区别

来源:互联网 发布:2016网络小说知乎50 编辑:程序博客网 时间:2024/06/08 17:19

什么是进程?

进程是一个程序正在执行的实例。每个这样的实例都有自己的地址空间和执行状态。
进程有一个PID(Process ID,进程标识),用以区分各个不同的进程。内核记录进程的PID与状态,并根据这些信息来分配系统资源(如内存等)。
当内核产生一个新的PID,生成对应的用于管理的数据结构,并为运行程序代码分配了必要的资源,一个新的进程就产生了。

什么是线程?

线程是进程的一个实体,是CPU调度和分派的基本单位。它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属于一个进程的其他的线程共享进程拥有的全部资源。

进程与线程的区别

进程和线程的主要区别在于它们是不同的操作系统资源管理方式

  1. 进程有独立的地址空间。
    线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间。

  2. 线程的划分尺度小于进程,使得多线程程序的并发性高

  3. 进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

  4. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

  5. 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。
    但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

  6. 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

线程优缺点

1. 和进程相比,它是一种非常”节俭”的多任务操作方式。在linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。
2. 运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需时间也远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个线程开销的30倍左右。
3. 线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其他线程所用,这不仅快捷,而且方便
4. 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上
5. 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序才会利于理解和修改。
6. 多线程的程序没有多进程的程序健壮。

互斥量与信号量的区别

  1. 互斥量用于线程的互斥。
    信号量用于线程的同步。

     这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。

     互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它 性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

     同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

  2. 互斥量值只能为0/1。
    信号量值可以为非负整数。

     也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量时,也可以完成一个资源的互斥访问。

  3. 互斥量的加锁和解锁必须由同一线程分别对应使用。
    信号量可以由一个线程释放,另一个线程得到。

原创粉丝点击