线程与进程区别

1.什么是进程

我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统(操作系统主要的就是内核)是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。

        进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用

程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述

进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息

是进程存在的唯一标志

进程具有的特征:

动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;

并发性:任何进程都可以同其他进行一起并发执行;

独立性:进程是系统进行资源分配和调度的一个独立单位;

结构性:进程由程序,数据和进程控制块三部分组成


2.什么是线程

在早期的操作系统中并没有线程的概念,进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。任务调度采用的是时间片

轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。

  后来,随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程序的要求了。于是就发明

了线程,线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或

多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组

成。而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。




区别

(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
(4)二者均可并发执行.

每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。

使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。

如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换,更多的线程需要更多的内存空间,线程的中止需要考虑其对程序运行的影响。通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。

总结:进程是所有线程的集合,每一个线程是进程中的一条执行路径。


更多相关文章

  1. 多线程学习(二) 多线程创建4种方式
  2. Java线程池-当任务渐增时的处理-各个参数的含义
  3. 多线程基础必要知识点!看了学习多线程事半功倍
  4. 多线程三分钟就可以入个门了!
  5. 记一次应用线程被阻塞的问题排查
  6. 异步获取线程计算的结果-Future
  7. Redis为什么又引入了多线程?作者也逃不过“真香定理”?
  8. 详解第三种创建线程的方式-Callable接口
  9. java线程相关面试题(第一版)

随机推荐

  1. EasyLoader(简单加载)实例
  2. bootstrap-multiselect 多选实例代码
  3. 详解可选参数和命名参数实例
  4. 分享一个IoC入门教程实例
  5. [转]Composite Keys With WebApi OData
  6. 总结EF通用数据层封装类实例详解
  7. [转]Support Composite Key in ASP.NET W
  8. 学习ASP.NET Core 2遇到的问题分享
  9. 使用ConcurrentDictionary多线程同步字典
  10. 浅谈WPF之Binding表达式