Java基础:线程与进程的区别
2020-02-26 本文已影响0人
书虫大王X
一、线程与进程的基本概念:
进程:
- 进程:资源分配的最小单位,它是一个动态的概念,是竞争计算机系统资源(CPU、内存、IO等)的基本单位,是并发执行的程序在之心过程中分配和管理资源的基本单位。
- 传统的进程有两个基本属性:可拥有资源的独立单位,可独立调度和分配的基本单位。
线程:
- 处理器的基本单位,是比进程更小的独立运行的基本单位,是程序执行的最小单位,线程也称为轻量级进程。是CPU调度和分配的基本单位。
二、两者的区别与联系:
联系:
- 一个程序至少一个进程,一个进程至少一个线程。
区别:
- 进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元
- 同一个进程中可以包括多个线程,并且线程共享整个进程的资源,一个进程至少包括一个线程。
- 线程是轻量级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的。
- 线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源。
- 地址空间与资源:同一个进程内的线程共享此进程的地址空间与资源,而进程之间的存储空间与资源是相互独立的。
注意:
- 使用多线程的条件:要求处理效率高,彼此之间频繁切换。
- 使用多进程的条件:对资源的管理和保护要求高,不限制开销和效率。
- 进程之间切换效率比较低,但是对资源的保护度高;线程的特点则反之。
三、死锁:
- 死锁是进程中常见的错误。死锁:两个或以上的进程互相都要求使用对方已经占有的资源而导致无法继续运行的现象。例:
当线程A持有独占锁a,并尝试去获取独占锁b的同时,线程B持有独占锁b,并尝试获取独占锁a的情况下,就会发生AB两个线程由于互相持有对方需要的锁,而发生的阻塞现象,这就产生了我们所说的死锁。
- 产生死锁的四个必要条件:
(1)互斥条件:进程所控制的资源一次只能一个进程使用,两个或以上进程使用就会发生死锁。
(2)环路条件:当发生死锁时,在进程资源中必须构成环路,其中每个进程占有了下一个进程申请的一个或多个资源。
(3)请求保持条件:零星的请求资源,及已获得部分资源又请求资源被堵塞的现象。
(4)不可剥夺条件:进程已获得的资源在未使用完之前不能被剥夺,只有在使用完时才能被释放。