【Java多线程】对进程与线程的理解

简介: 【Java多线程】对进程与线程的理解

1、进程/任务(Process/Task)

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。


描述进程的是:PCB


组织进程的是:链表


2、进程控制块抽象(PCB Process Control Block)

进程是应用程序被调用时的一个状态,一个进程对应一个PCB,PCB是管理进程的,一个应用程序可以有多个进程。


2.1、PCB重要属性

PID,进程的标识符

内存指针,描述进程使用的内存、指令/代码、数据的位置

文件描述符表,进程使用的硬盘的相关信息

2.2、PCB中支持进程调度的一些属性

状态

       用于描述这个进程当前的状态,能够通过状态得知此时是否方便去cpu上执行。


       例如:当某个进程通过Scanner等待用户输入内容时,此时如果用户还未输入内容,该进程就已经去cpu上执行并等待接收用户输入了,如果用户一直不输入,该进程就会一直占用cpu,导致其他进程无法调用执行cpu。


       而有了状态描述,就可以避免让这种进程在还未能执行时的“堵塞状态”,不去占用cpu,等到方便执行时(即用户输入完成后),给出一个“就绪状态”,此时就证明可以该进程可以去cpu上执行。


优先级

       多个进程等待系统调度,这就需要有优先级。用于表示各个进程之间的优先级。


       例如:打游戏时,游戏和微信qq的优先级,想必也知道游戏的优先级更高。


记账信息

       统计每个进程占据cpu的时间,可以根据统计结果进一步调整调度的策略。


上下文

       PCB中的数据结构,支撑进程调度的重要属性,保存进程运行过程中的中间状态到内存中。通过上下文可以做到相当于游戏中的存档和读档操作。


3、 内存分配 —— 内存管理(Memory Manage)

核心结论:每个进程的内存是相互独立、互不干涉的。这是为了保证系统的稳定性,例如某个进程代码出现bug(内存读写越界),那么该bug只会影响自己,不会影响其他进程。


但是也有例外,虽然说进程之间相互独立,但是有的时候需要多个进程相互配合完成某个工作。


记忆:每个人的房子相互独立,但是公园都是大家的公共空间,这两者是不冲突的。


4、线程(Thread)

进程频繁的创建和销毁时,会有非常大的开销,主要体现在资源的申请和释放上。为了解决这一问题,就引入了【线程】这个概念,相当于细分了进程。


线程也可以称为“轻量级进程”,在进程的基础上做出了改进。


保持了独立调度执行,同时又省去了“申请资源”“释放资源”带来的额外开销。


5、进程和线程的总结

进程是包含线程的,每个进程至少有一个线程存在,即主线程。

进程和进程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间(所以资源开销少,但会影响其他线程)。

没有线程这个概念之前,进程是系统分配资源的最小单位,也是系统调度执行的最小单位。

有线程这个概念之后,进程是系统分配资源的最小单位,线程是系统调度执行的最小单位。

一个进程挂了一般不会影响到其他进程,但是一个线程挂了, 可能把同进程内的其他线程一起带走(整个进程崩溃)。


正因为线程之间共用同一块内存空间,因此某个线程出现bug时,可能会影响到其他线程。

如何正确处理这些问题,是使用线程的一个难点。


附上一个生动的理解图:


目录
相关文章
|
7月前
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
1083 2
|
7月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
387 1
|
7月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
362 1
|
10月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
10月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
418 0
|
11月前
|
调度 开发工具 Android开发
【HarmonyOS Next】鸿蒙应用进程和线程详解
进程的定义: 进程是系统进行资源分配的基本单位,是操作系统结构的基础。 在鸿蒙系统中,一个应用下会有三类进程:
412 0
|
安全 Java 调度
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(上)
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(上)
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(上)
|
消息中间件 Java
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(下)
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(下)
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结(下)
|
8月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
348 0

热门文章

最新文章