Linux 进程与线程概念解析

时间:2021-03-12 14:53:27
  • 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程.现在,多线程技术已经被许多操作系统所支持,包括Windows/NT、Linux。

  • 进程:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元;
    进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。
    从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。

  • Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。
    也就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发生异常,它也不会影响到系统中的其他进程。
  • Linux中的进程包含3个段,分别为“数据段”、“代码段”和“堆栈段”。
    “数据段”存放的是全局变量、常数以及动态数据分配的数据空间;
    “代码段”存放的是程序代码的数据。
    “堆栈段”存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。

  • 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
    一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
    进程——资源分配的最小单位,线程——程序执行的最小单位”
    进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
    线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

  • 进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。
    **为什么有了进程,还要引入线程呢?
    使用多线程到底有哪些好处?**

  • 运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需的时间也远远小于进程间切换所需要的时间.据统计,一个进程的开销大约是一个线程开销的30倍左右。

  • 使用多线程的理由之二是:
    线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。

  • 除了以上所说的优点外,多线程程序作为一种多任务、并发的工作方式,有如下优点:
    使多CPU系统更加有效.操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上.
    改善程序结构.一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改.

  • Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用libpthread.a