理解进程与线程的基本概念及其差异
最编程
2024-02-09 13:26:09
...
进程和线程的定义和区别
1、进程定义
进程:是具有一定独立功能的程序关于某个数据集合上的一次进行活动,是系统进行资源分配和调度的一个独立单位。
2、线程定义
线程:是进程的一个实体,是cpu调度和分派的基本单位,他是比进程更小的能够独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源。一个线程可以创建和撤销拎一个线程。
区别:
1、一个线程只能属于一个进程,而一个进程可以拥有多个线程。
2、线程是进程工作的最新单位。
3、一个进程会分配一个地址空间,进程与进程之间不共享地址空间。即不共享内存。
4、同一个进行下的不同的多个线程,共享父进程的地址空间。
5、线程在执行过程中,需要协助同步。不同进程的线程间要利用消息通信的办法实现同步。
6、线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
进程的优点:
1、每个进程互相独立,不影响主程序的稳定性,子进程崩溃不影响其他进程。
2、通过增加CPU,就可以扩充性能。
3、可以尽量减少线程加锁与解锁的影响,极大的提高了性能。
进程的缺点:
1、逻辑控制复杂,需要和主程序交互。
2、多进程调度开销大。
线程的优点:
1、程序逻辑和控制方式简单。
2、所有线程可以直接共享内存和变量等。
3、线程方式消耗的总资源比进程方式少。
线程的缺点:
1、每个线程和主程序共用地址空间,最大内存地址受限。
2、线程之间的同步和加锁不易控制。
3、一个线程的崩溃可能影响到整个程序的稳定性。
•进程(process): 狭义定义:进程就是一段程序的执行过程。 广义定义:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。他是操作系统动态执行的基本单元,在传统的操作系统中,进程即是基本的分配单元,也是基本的执行单元。 1)进程是一个实体,每个进程都有自己的地址空间,一般情况下,包含文本区域、数据区域、堆栈 2)进程是执行中的程序,程序是一个没有生命的实体,只有处理器赋予程序生命时,他才能成为一个活动的实体,我们称之为进程 3)进程本身不会运行,是线程的容器。线程不能单独执行,必须组成进程 4)一个程序至少有一个进程,一个进程至少有一个线程 5)对于操作系统来讲,一个任务就是一个进程,比如打开一个浏览器就是启动一个浏览器进程。打开一个记事本就是启动一个记事本进程,打开2个记事本就是启动2个记事本进程 6)有些进程还不止同时做一件事情。比如打开word,他可以同时进行打字、打印、拼音检查等等,在一个进程内部,要同时干多件事情。 进程状态: 1)就绪:获取出CPU外的所有资源、只要处理器分配资源就可以马上执行 2)运行:获得处理器分配的资源,程序开始执行 3)阻塞:当程序条件不够的时候,需要等待提交满足的时候才能执行。 •线程: 1)一个进程中至少有一个线程,不然就没有存在的意义
2)在一个进程内部,要同时干多件事情,就需要同时运行多个子任务,我们把进程内的这些子任务叫做线程
3)多线程就是为了同步完成多项任务(在单个程序中同时运行多个线程完成不同的任务和工作),不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率
4)一个简单的比喻,多线程就像是火车上的每节车厢,而进程就是火车
5)线程是程序执行流的最小单元。一个标准的线程由当前的线程ID、当前指令指针、寄存器和堆栈组成
6)同一个进程中的多个线程之间可以并发执行
线程状态:
1)就绪:指线程具备运行的所有条件,逻辑上可以运行,在等待处理机
2)运行:指线程占用处理机正在运行
3)阻塞:线程在等待一个事件,逻辑上不可执行
如果我们要同时执行多个任务怎么办?
1)启动多个进程,每个进程虽然只有一个线程,但是多个进程可以一块执行多个任务
2)启动一个进程,在一个进程内启动多个线程,这样多个线程也可以一块执行多个任务
多任务:
1)一边浏览网页、一边听歌、一边看电影;这就是多任务。
下一篇: 25个优秀的页脚设计示例
推荐阅读
-
Java 类加载器的作用 - 简介:类加载器是 Java™ 中一个非常重要的概念。类加载器负责将 Java 类的字节码加载到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模型、加载类的具体过程和线程上下文类加载器等。然后介绍了如何开发自己的类加载器,最后介绍了类加载器在 Web 容器和 OSGi™ 中的应用。 类加载器是 Java 语言的一项创新,也是 Java 语言广受欢迎的重要原因之一。它允许将 Java 类动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 开始出现,最初是为了满足 Java Applets 的需求而开发的,Java Applets 需要从远程位置下载 Java 类文件并在浏览器中执行。现在,类加载器已广泛应用于网络容器和 OSGi。一般来说,Java 应用程序的开发人员不需要直接与类加载器交互;Java 虚拟机的默认行为足以应对大多数情况。但是,如果遇到需要与类加载器交互的情况,而您又不太了解类加载器的机制,就很容易花费大量时间调试异常,如 ClassNotFoundException 和 NoClassDefFoundError。本文将详细介绍 Java 的类加载器,帮助读者深入理解 Java 语言中的这一重要概念。下面先介绍一些基本概念。 类加载器的基本概念 顾名思义,类加载器用于将 Java 类加载到 Java 虚拟机中。一般来说,Java 虚拟机以如下方式使用 Java 类:Java 源程序(.java 文件)经 Java 编译器编译后转换为 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码并将其转换为 java.lang 实例。每个实例都用来表示一个 Java 类。通过该实例的 newInstance 方法创建该类的对象。实际情况可能更加复杂,例如,Java 字节代码可能是由工具动态生成或通过网络下载的。 基本上,所有类加载器都是 java.lang.ClassLoader 类的实例。下面将详细介绍这个 Java 类。 java.lang.ClassLoader 类简介 java.lang.ClassLoader 类的基本职责是根据给定类的名称为其查找或生成相应的字节码,然后根据这些字节码定义一个 Java 类,即 java.lang.Class 类的实例。除此之外,ClassLoader 还负责加载 Java 应用程序所需的资源,如图像文件和配置文件。不过,本文只讨论它加载类的功能。为了履行加载类的职责,ClassLoader 提供了许多方法,其中比较重要的方法如表 1 所示。下文将详细介绍这些方法。 表 1.与加载类相关的 ClassLoader 方法
-
理解基础:ARM处理器、单片机(如STM32与51)及其开发板的概论、差异与关联性
-
详解Windows核心机制与实战笔记(第四部分): Windows下的进程与线程概念——深入理解进程
-
深入理解Java基础:探索进程与线程-2 - 详解线程的五种工作状态与切换机制
-
理解Android中的应用进程与后台线程操作
-
理解进程与线程的不同之处及各自的优缺点
-
理解操作系统中的进程与线程概念
-
理解进程与线程:深入比较两者的工作原理
-
理解进程、线程与应用程序间的互动关联
-
理解进程、轻量级进程、内核线程与用户线程之间的差异及关联