一、概念术语
进程:进程通常是程序、应用的同义词。不过,用户所看到的一个单独的应用事实上可能还会有一系列的协作进程(cooperating processes
),例如Linux上就可以通过fork创建一个进程副本。最简单的情况下,一个应用就是一个进程。大部分Java虚拟机的实现都是作为单进程运行的,但是我们也可以通过ProcessBuilder来创建附加的进程。
线程:线程有时又称之为轻量级进程
。但是创建一个线程要消耗的资源通常比创建进程少的多。一个进程内的多个线程会共享进程的资源,同时也会有自己私有的资源。线程必须存在于进程中,每个进程至少要有一个线程作为程序的入口,称之为主线程。
并发:在单核CPU的计算机上,即使操作系统支持多任务同时运行,但事实上在任一时刻,只有一个进程中的一个线程在运行,因为一个CPU同一时刻只能处理一个指令。看起来在同时执行的多个任务其实是抢占式的重叠交替执行,这就是并发。
并行:在多核CPU的计算机上,每个CPU核心可以在同一时刻同时执行不同的指令,从而能够实现并行的多线程执行模型。
二、Java与线程
一个进程内可以创建的线程个数不但受到不同操作系统使用的线程模型
限制,还要受到系统资源比如内存大小的限制,因为每个线程都有自己的栈内存空间。当然对于Java进程创建的线程,栈内存空间主要是受到JVM可以使用的内存大小的影响,而不是操作系统的总内存。
Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制,JVM线程跟内核线程有一一对应的关系。这样做的好处是什么?线程的调度完全交给了操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度。
三、多线程的优点与代价
多线程可以为程序设计带来如下优势:
* 资源利用率更高
例如,通过磁盘或者网络IO进行文件/内容检索之后进行特定的处理中,由于磁盘/网络IO操作需要等待相对长的时间,而CPU在这段时间是处于空闲状态,其深层次的原因是对于IO操作(这里主要指磁盘IO),往往是通过硬件直接存取器(DMA)来执行的,也就是说,CPU只需要发送一个指令给DMA去执行对应的IO操作即可,指令发送是一瞬间的事,发送完成CPU就可以干其他的事了。如果采用多线程的方式,那么就可以使CPU在等待的过程中去处理其他可以被处理的逻辑,从而对CPU的利用率大大提高。
* 程序响应更快
在桌面应用类似的C/S程序设计中,往往用户提交的耗时任务不需要立即返回,但是用户界面不能够一直处于等待的不可用状态,用户可以在这段时间进行其它操作,当耗时任务完成之后主动通知给用户,这种多线程的设计方式为用户提供了更快更优雅的体验。
多线程不仅为程序设计带来了好处,同时又相应的需要付出一些代价:
* 程序设计更复杂
多线程的并发程序设计中如果涉及到共享数据的访问,如何防止并发访问导致共享数据的混乱将是非常困难以及使程序设计更复杂的因素。
* 多线程的上下文切换开销
当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针 等,最后才开始执行。这种切换称为“上下文切换”(“context switch
”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。上下文切换并不廉价。如果没有必要,应该减少上下文切换的发生。
* 线程栈空间增加了内存资源消耗
每一个线程启动后,进程也要给线程分配一定的内存,让其来保存自己的私有数据。JVM划分给每个线程的内存区域称之为线程栈内存
。默认情况下,栈内存的大小1M。也就是说,你每多启动一个线程,至少要多消耗1M的内存资源。
相关推荐
#### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中,线程是一种轻量级的进程,...
#### 一、线程基础知识概述 线程是操作系统能够进行运算调度的最小单位,它是进程的一部分。简单来说,一个进程可以拥有多个线程,这些线程共享进程的资源(如内存),但每个线程都有自己的独立栈空间和寄存器状态...
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程、I/O流、网络编程、反射技术、设计模式以及JVM等核心概念。以下是对这些知识点的详细说明: 一、...
理解进程与线程的基础知识对于开发高效稳定的嵌入式应用程序至关重要。 #### 进程基础 **定义:** 进程是一个程序的实例,即一个正在运行的程序就是一个进程。每个进程都有自己的独立的虚拟地址空间,以确保进程间...
### JAVA多线程基础知识详解 #### 一、Java多线程概述 在计算机科学中,**多线程**是一种能够使程序内部同时执行多个任务的技术。这种技术在现代软件开发中至关重要,尤其是在需要处理大量计算任务或者需要进行...
### Java线程基础详解 #### 一、线程概述 **1.1 什么是线程?** 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。在Java中,线程是程序执行流的最小单元,一个标准的...
二、基础概念 1. 线程状态图 线程有多种状态,包括新建(New)、可运行(Runnable)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)。这些状态之间的转换反映了线程生命周期...
.NET线程详解基础篇主要涉及了...以上只是对.NET线程基础篇的简要概述,实际编程中,还需要深入理解线程的状态转换、线程优先级、死锁预防、线程同步的各种模式(如ReaderWriterLockSlim)以及线程安全的数据结构等。
#### 二、线程基础知识 - **线程定义**: 在计算机科学中,线程是指程序执行流的一个单元,是操作系统调度的基本单位。 - **线程与进程的区别**: - 进程: 是一个正在运行的应用程序的实例,具有独立的内存空间。 - ...
### 鸿蒙原生应用开发-ArkTS语言基础类库概述 #### 一、引言 随着HarmonyOS(鸿蒙操作系统)的发展与普及,越来越多的开发者...通过对这些基础知识的深入了解,开发者可以更加熟练地使用ArkTS进行HarmonyOS应用开发。
Java基础知识 第01章_Java语言概述(共50页).pptx Java基础知识 第02章_Java基本语法1(共99页).pptx Java基础知识 第02章_Java基本语法2(共48页).pptx Java基础知识 第03章_面向对象编程(共100页).pptx Java基础知识 ...
《Java核心技术·卷1:基础知识(原书第9版)》共14章。第1章概述了Java语言与其他程序设计语言不同的性能;第2章讲解了如何下载和安装JDK及本书的程序示例;第3章介绍了变量、循环和简单的函数;第4章讲解了类和...
1. Java多线程基础知识:文件内容提到“Thread.start()”,表明文档从最基本的Java多线程编程开始讲解。Java中的多线程是通过继承Thread类和实现Runnable接口来创建的,每个线程都必须通过start()方法来启动,该方法...
标题所指的知识点是“多线程编程的入门教程”,这意味着本文档是为那些刚接触多线程编程的初学者提供的基础教学材料。通过这个标题,我们可以推断文档内容会从最基础的多线程概念讲起,逐渐过渡到实际编程技巧和例子...
#### 一、线程基础概述 - **定义与特点**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。Java是首个在语言级别明确支持线程特性的主流编程语言。线程具有以下特点: -...
- **Linux系统下的多线程编程入门**:适合初学者了解Linux环境下的多线程编程基础知识,包括线程的生命周期、同步机制等。 - **嵌入式Linux多线程编程**:专门针对嵌入式系统的特点介绍了多线程编程的技术要点,包括...
### 多线程开发基础知识与核心概念 #### 一、多线程开发概述 多线程编程是指在程序中创建多个线程来并发执行任务的一种技术。这种技术能够充分利用现代多核处理器的能力,提高应用程序的运行效率。多线程开发在软件...
#### 一、多线程基础介绍 **定义多线程术语** - **线程**: 进程中的一个执行单元,是进程内的轻量级子进程。 - **进程**: 系统进行资源分配和调度的基本单位。 - **并发性**: 多个任务在同一时间间隔内同时运行。 ...