线程与进程;并行与并发

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Strive_0902/article/details/82777038

请详述操作系统中的线程的基本概念、以及线程的基本状态

什么是线程

一个线程是进程的一个顺序执行流。同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷小,因此,线程也被称为轻负荷进程。一个进程中可以包含多个线程。

进程与线程的区别

1 进程拥有独立的堆栈空间和数据段,奢侈,系统开销大,是资源分配的最小单位,不同进程的地址空间在逻辑上时相互独立的。

2 线程有独立的堆栈空间,但是共享数据段,代码段,进程用户ID,文件描述符,切换速度快,效率高,是程序执行的最小单元,处理器调度的基本单元,线程有四种状态:运行、就绪、挂起和结束。线程是轻量级的进程

3 一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

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

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

并发原理

并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。这种方式我们称之为并发(Concurrent)。

并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

区别:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。

线程状态

扫描二维码关注公众号,回复: 3311107 查看本文章

1.新建

用new语句创建的线程对象处于新建状态,此时它和其他java对象一样,仅被分配了内存。

2.等待

当线程在new之后,并且在调用start方法前,线程处于等待状态。

3.就绪

当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态。处于这个状态的线程位于Java虚拟机的可运行池中,等待cpu的使用权。

4.运行状态

处于这个状态的线程占用CPU,执行程序代码。在并发运行环境中,如果计算机只有一个CPU,那么任何时刻只会有一个线程处于这个状态。

只有处于就绪状态的线程才有机会转到运行状态。

5.阻塞状态

阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才会有机会获得运行状态。

阻塞状态分为三种:

1、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

2、同步阻塞:运行的线程在获取对象同步锁时,若该同步锁被别的线程占用,则JVM会把线程放入锁池中。

3、其他阻塞:运行的线程执行Sleep()方法,或者发出I/O请求时,JVM会把线程设为阻塞状态。当Sleep()状态超时、或者I/O处理完毕时,线程重新转入就绪状态。

6.死亡状态

当线程执行完run()方法中的代码,或者遇到了未捕获的异常,就会退出run()方法,此时就进入死亡状态,该线程结束生命周期。

进程的交互

根据进程之间互相之间知道对方存在的程度,对进程间的交互方式进行分类。

  • 进程之间互相不知道对方的存在:这是一些独立的进程,他们不会一起工作。尽管这些进程之间不会一起工作,但操作系统需要直到他们之间对资源的竞争情况。
  • 进程间接知道对方的存在:这些进程不需要知道互相的进程id,但他们共享某些资源,如:i/o缓冲区。这类进程在共享同一个对象时会表现出合作行为。
  • 进程直接知道对方的存在:这些进程可直接通过进程id进行通信,以合作完成某些活动。

进程间的 资源竞争 
当并发进程竞争使用同一资源时,之间会发生冲突。我们把这些情况描述为:两个或更多进程在它们的执行过程中需要访问一个资源,每个进程并不知道其他进程的存在,且每个进程也不受其他进程的影响。 
竞争进程之间没有任何信息交换,但一个进程的执行可能会影响到竞争进程的行为。特别是当两个进程都期望访问同一个资源时,如果操作系统把这个资源分配给一个进程,那么另一个进程就必须等待,一种极端情况是:被阻塞的进程永远不能访问这个资源,因此该进程永远不能成功运行结束。

竞争进程面临三个控制问题:

  • 互斥:假设两个或更多进程需要访问一个不可共享的资源,如打印机。
  • 临界资源:在执行过程中,每个进程都会给该i/o设备发命令,接受状态信息,发送数据和接收数据。这类资源称为临界资源。
  • 临界区:使用临界资源的那部分程序称为程序的临界区。

进程间通过共享合作 
进程间在互相并不确切知道对方的情况下进行交互。例如:多个进程可能访问一个共享变量,进程可能使用并修改共享变量而不涉及其他进程,但却知道其他进程也可能访问同一个数据。因此这些进程必须合作,以确保它们共享的数据得到正确管理。控制机制必须确保共享数据的完整性。

进程间通过通信合作(进程间的通信) 
当今从通过通信进行合作时,各个进程都与其他进程进行连接。通信提供同步和协调各种活动的方法。

进程同步

多道程序系统中进程是并发执行的,这些进程之间存在着不同的制约关系,为了协调进程之间的相互制约关系,就需要实现进程的同步。互斥是同步的一种特殊情况。

同步:一个进程到达了某些点后,除非另一个进程已完成了某些操作,否则就不得不停下来等待这些结束,这就是进程的同步。

同步机制遵循规则:

  1. 空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态 ,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源。
  2. 忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥和访问。
  3. 有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。
  4. 让权等待:当今从不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。

猜你喜欢

转载自blog.csdn.net/Strive_0902/article/details/82777038