Java 高并发相关--多线程基础概念

转载 2016年08月31日 10:52:51

进程&线程的相关概念

进程的定义 from 百度百科
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
狭义定义:进程是正在运行的程序的实例。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
总结 :
1) 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。
2) 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

线程的定义 from 百度百科
线程,有时被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
特点 :
1) 轻型实体
线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。
线程的实体包括程序、数据和TCB。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。而线程的动态特性由线程控制块TCB(Thread Control Block)描述。TCB包括以下信息:
(1)线程状态。
(2)当线程不运行时,被保存的现场资源。
(3)一组执行堆栈。
(4)存放每个线程的局部变量主存区。
(5)访问同一个进程中的主存和其它资源。
用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。
2) 独立调度和分派的基本单位
在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)
3) 可并发执行
在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。
4) 共享进程资源
在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核

线程与进程的区别
1)地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
3)调度和切换:线程上下文切换比进程上下文切换要快得多。
4)在多线程OS中,进程不是一个可执行的实体。

守护线程
守护线程是特殊的线程,一般用于在后台为其他线程提供服务,守护线程会在非守护线程都结束时自动终止。

多线程的安全问题
线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线程之间的隔离程度要小,它与父进程的其它线程共享父进程所拥有的全部资源,包括内存、文件句柄和其它每个进程应有的状态。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。当数个线程对同一资源进行修改时,会导致意料之外的结果。
例:
假设有一个共用的变量名为list的ArrayList ,有两个线程A和B,A执行的是list.get(list.size()-1),B执行的是list.remove(list.size()-1),运行前list里有10个元素。
A线程先运行,list.size()-1得到的结果是9,正打算get(9)的时候 CPU 调度线程A暂停,线程 B 得到运行的机会并开始运行, list.remove(list.size()-1)把list中的索引为9的元素删除了。
其后A线程获得CPU调度,继续运行get(9),但此时9 = list.size(),索引为9的元素不存在,将会抛出IndexOutOfBoundsException 。

Java高并发编程之第一阶段,多线程基础深入浅出

汪文君高并发编程第一阶段01讲-课程大纲及主要内容介绍 汪文君高并发编程第一阶段02讲-简单介绍什么是线程 汪文君高并发编程第一阶段03讲-创建并启动线程 汪文君高并发编程第一阶段04讲-线程生命周期...

[高并发Java 二] 多线程基础

1. 什么是线程 线程是进程内的执行单元 某个进程当中都有若干个线程。 线程是进程内的执行单元。 使用线程的原因是,进程的切换是非常重量级的操作,非常消耗资源。如果使用多进程,那么并发数相...

高并发Java 二 多线程基础

1. 什么是线程线程是进程内的执行单元某个进程当中都有若干个线程。使用线程的原因是,进程的切换是非常重量级的操作,非常消耗资源。如果使用多进程,那么并发数相对来说不会很高。而线程是更细小的调度单元,更...

JAVA高并发学习笔记(二) 多线程基础

线程是进程(程序在计算机上的一次执行活动)内的执行单元 进程是以独立于其他进程的方式运行的,进程间是互相隔离的。一个进程无法直接访问另一个进程的数据。进程的资源诸如内存和CPU时间片都是由操作系统来...

多线程相关的一些基础概念:同步、异步、并发、并行

多线程相关的一些基础概念整理。包括:并发,并行,同步,异步,线程,进程...

Java基础学习总结(104)——多线程、并发、工具类相关的面试题

线程的概念 线程是程序执行的最小单位,也是操作系统调度和分派CPU的最小单元,是进程中的一个实体,是进程中的实际运作单位。可以在一个进程中启动多个线程来完成不同的任务,这些线程共享该进程拥有的资源。...

java多线程一些相关概念

同步和异步:同步方法调用开始后,需等到本次调用有结果才继续往后执行;异步调用发生后,调用者无需等待返回,继续后续执行。举个例子你出去打篮球先到楼下小卖部买瓶水,老板店里现在没货,要去别的地方取,这个时...

Java 多线程 线程安全相关概念

前言本篇文章介绍一些多线程的相关的深入概念。理解后对于线程的安全性会有更深的理解。先说一个格言,摘自Java核心技术: 如果向一个变量写入值,而这个变量接下来可能会被另一个线程读取;或者一个变量读值...

epoll多线程高并发服务器代码

  • 2013年09月22日 11:48
  • 10KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 高并发相关--多线程基础概念
举报原因:
原因补充:

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