Java多线程之基本概念

原创 2016年05月31日 16:21:49

什么是进程(Process)

几乎所有OS都支持进程概念,进程是具有一定独立功能的程序,关于某个数据集合上的一次运行活动,是系统资源分配和调度的一个独立运行单位。

程序是静态的概念,进程是动态的概念。

程序是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体,当一个程序进入内存运行时,就变成进程进程是程序在某个数据集上的执行,是一个动态实体(进程本身不会运行,是线程的容器)

进程因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。

若干进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或不同步(平行)的方式独立运行。进程为现今分时系统的基本运作单位。

一个程序可能对应若干进程,可以是一个程序多次执行.
一个进程可以包含一个或多个线程。
一个进程至少要包含一个线程(一个线程必须有一个父进程)。

进程的三个特征

  • 独立性
    进程是系统中独立存在的实体,有自己独立的资源,私有的地址空间。无进程本身允许,一个用户进程不可以直接访问其他进程的地址空间

  • 动态性
    程序是静态指令集合,进程是正在系统中活动的指令集合。进程加入了时间概念,具有自己的生命周期和各个状态,程序没有。

  • 并发性
    多个进程可以在单个CPU上并发执行,多个进程间不会互相影响,切分时间片

什么是线程(Thread)

从资源调度角度看,我们知道程序执行的过程,伴随着许多次CPU资源、内存资源、硬盘资源、网络资源和其他I/O资源的分配调度。这些硬件资源需要操作系统管理调度,而操作系统能够进行运算调度的最小单位,就是线程。

从程序运行的角度看,一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程

线程本身不能运行,它只能用于程序中。

说明:

  • 线程是程序内的顺序执行流,只能使用分配给程序(进程)的资源和环境,可以有自己堆栈,程序计数器,和局部变量。
  • 由于多个线程共享父进程的全部资源,因此,需确保线程不会妨碍同一进程里的其他线程

并发性(concurrency)与并行性(parallel)

并行:同一时刻,有多条指令在多个处理器上同时执行(多核CPU)
并发:同一时刻,只有一个指令执行,但多个进程指令被快速轮换执行,使得宏观上具有多个进程同时执行的效果(切分时间片)

现代操作系统都支持多进程的并发,具体实现细节上可能因为硬件和操作系统的不同而采用不同的策略,常用:

  • 共用式的多任务操作策略

  • 抢占式多任务操作策略

多线程

多线程之于进程的理解,可以类比多进程之于操作系统。多线程指在单个程序中可以同时运行多个不同的线程执行不同的任务。

线程在程序中是独立、并发的执行流,与分隔的进程相比,进程中线程之间的间隔程度要小。它们共享内存、文件句柄其他每个进程应有的状态。

线程的划分尺度小于进程,使得多线程程序的并发性高。进程在执行过程中有独立的内存单元,多个线程共享这个内存,从而提高了程序的运行效率

线程比进程有更高的性能,

因为同一个进程中的线程有共性: 共享一个进程的虚拟空间,

共享的环境包括: 进程代码段,进程的公有数据等。利用这些共享的数据,线程很容易实现通信。

操作系统创建一个进程时,需要分配独立的内存,并分配大量相关的资源;但创建线程就简单地多,因此,使用多线程实现并发比多进程实现并发要性能高。

总结起来,多线程的优势:

  • 进程间不能共享内存,但线程间共享内存很容易。
  • 创建线程的代价比进程要小得多,使用多线程实现多任务并发效率高
  • Java内置多线程功能支持,不是单纯地作为底层OS的调度方式,简化了多线程编程

Java线程模型

  Java多线程的优点就在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序的其他部分。
  多线程允许活的循环在每一帧间隙中沉睡一秒而不暂停整个系统。

线程组

  所有线程都隶属于一个线程组。那可以是一个默认线程组,也可以是一个创建线程时明确指定的组。
 
  在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。
  若创建多个线程而不指定一个组,它们就会与创建它的线程属于同一个组。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS多线程之GCD——基本概念与队列(Dispatch Queue)

GCD(Grand Central Dispatch)介绍,创建管理队列,调度队列任务,长久运行

Java多线程基础--01之 基本概念

0. 本文目录1. 概念多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Ob...

【3】Java并发编程:多线程基本概念

Java并发编程一直是开发学习中的重点和难点,难在于许多的基本概念不是短时间内就容易理解。下面就Java并发编程中的涉及多线程的基本概念做一个总结:1、TPS(Transactions Per Sec...

Java多线程系列--“基础篇”01之 基本概念

多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(...

java多线程系列----------- 基本概念释疑

线程和线程对象,并发与并行

Java多线程系列--“基础篇”01之 基本概念

多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(...

java多线程基本概念与简单实用

概述 程序:Program,是一个静态的概念 进程:Process,是一个动态的概念 进程是程序的一次动态执行过程, 占用特定的地址空间。每个进程都是独立的,由3部分组成cpu,data,code 缺...

第九章 Java多线程机制 01_线程的基本概念

鱼欲遇雨:每日都学习一点,持之以恒,天道酬勤!不能用电脑时,提前补上!(2012.9.2) 本章内容 1   线程的基本概念 2   线程的创建和启动 3   线程的调度和...

Java多线程的基本概念及意义

线程依赖于进程而存在。 单进程的计算机只能做一件事,而现在都可以做多件事情,支持多进程,可以在一个时间段内执行多个任务。 提高CPU的使用率

Java 多线程 基本概念

前言介绍多线程基本概念1. 并行和并发并行:多个CPU实例后者多台机器同时执行处理逻辑,是真正的同时 并发:通过CPU调度算法,让用户看上去同时执行,实际上从CPU层面不是真正的同时(操作系统将CP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)