Java笔记---易混淆的概念(二:线程、进程、任务)

一、前言

在《Java编程思想》并发编程一章学习中,遇到3个概念,也就是线程、进程和任务。对这几个概念的理解比较模糊,因此花了点时间,查了下关于这几个概念的信息,总算是理解了。

二、概念区分

咱就按一一介绍下这些个概念。

2.1 进程

  1. 常常被定义为运行中的程序。
  2. 按Java编程思想上的概念来说,进程是运行在它自己的地址空间内的自包容的程序
  3. 一个程序可以有多个启动进程。
  4. 一个程序至少有一个进程,一个进程至少有一个线程
  5. 在OS中,把进程作为资源分配的基本单位


从图可以看到,以Chrome浏览器为例,一个Chrome浏览器程序就启动了多个进程,从资源管理器就可以看到进程各自的PID。记住进程可以是来自各种程序、系统和应用程序的单独进程,也可以是来自被分解为很多进程的应用或程序

2.2 线程

  1. 轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元
  2. 在OS中,把线程作为独立运行和独立调度的基本单位
  3. 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源
  4. 线程存在于进程之中,一个进程有若干个线程
  5. 线程可以驱动任务

2.3 任务

任务是这三个概念中最抽象的。记住:任务 ≠ 进程 ≠ 线程。那么任务是什么?

  1. 它是一个一般性的术语,指由软件完成的一个活动。
  2. 一个任务既可以是一个进程, 也可以是一个线程。

所以,多任务 ≠ 多进程 ≠ 多线程,三者抽象的级别根本就不一样。

三、进程与线程的区别

3.1 独立性

  1. 对于进程:各进程是独立的,各自拥有内存空间,一个进程所拥有的数据和变量只属于它自己
  2. 对于线程:同一进程中的多个线程之间是共享同一块内存空间,共享相同的代码和全局数据(但每个线程各有其自己的堆栈,由于堆栈是每个线程一个,因此局部变量对每一线程来说是私有的

3.2 是否可独立执行

进程可以独立运行,但线程不能够独立执行。为什么呢?
原因:进程拥有完备的数据空间和代码空间,而线程比进程更小,基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,因此线程必须必须依存在应用程序中。

一定要记住:虽然OS把线程作为独立运行和独立调度的基本单位,但是实际上线程并不能独立运行

3.3 上下文切换效率

线程上下文切换速度比进程上下文切换要快得多

你可能感兴趣的:(java,线程,并发,进程,任务)