[JavaEE初阶] 进程和线程的区别和联系

1.什么是进程

进程是计算机中正在运行的程序的实例,包含程序代码、数据和系统资源(如内存、CPU时间)的集合。

打开资源管理器,我们就可以看到此时此刻运行在计算机上面的进程。

然而,进程是一个相对而言比较重的概念,进程的创建和销毁的开销比较大,对于我们每个人的计算机来说,可能觉得我打开和关闭一个进程是几秒钟的事情,并没有感觉到开销很大,但是对于服务器来说就不一样了。什么是服务器呢?打个比方,服务器就像餐馆,而我们的客户端就像是来餐馆吃饭的客人。客户端对服务器发出请求,而服务器就会响应客户端发出的请求。就好比你去餐馆发出吃饭的请求,而餐馆就会响应你的请求来做饭。

在90年代的时候,每个客户端向服务器发出请求,服务器就会提供一个进程为客户端进行服务。但随着时代的发展,计算机逐渐走入千家万户,客户端对服务器的请求越来越频繁,而进程创建和销毁开销大的缺点被逐渐放大。为了解决这个问题,我们引入了线程(Thread),可以简单理解为轻量级进程,即创建和销毁开销更小的进程。

2.什么是线程

线程是操作系统能够调度的最小执行单位,属于同一进程的多个线程共享内存和资源,但各自拥有独立的执行路径。

每个进程可以看做成一个要执行的任务,而每个线程也是一个要执行的任务,即运行的一段代码指令。我们可以简单地认为进程是大任务,而线程则是大任务中细分的小任务。

3. 进程和线程的区别

进程是操作系统资源分配的基本单位,而线程则是CPU上调度执行的基本单位。

首先谈谈进程是操作系统资源分配的基本单位。操作系统的资源主要包括CPU、内存、硬盘资源、网络带宽等。进程的创建和销毁需要申请和释放资源,这是开销很大的操作。而线程则会共享这些资源,只有在第一个线程创建的时候会和进程一起申请资源,后续创建线程直接用申请的资源就行,当所有线程销毁时,进程也销毁,然后释放资源。

再来说线程则是CPU上调度执行的基本单位。CPU就好比舞台,每个线程就是演员,每个线程都有上CPU的机会。比如说进程里面有线程a、b、c,有可能a去CPU核心1上执行,b去CPU核心2上执行,c去CPU核心3上执行,这就是并行。也有可能线程a、b、c都在同一个核心上来回切换执行,这就是并发。也有可能a、b在一个核心上来回切换,c在另外一个核心上执行。这些线程的调度执行都是由操作系统随机调度的,我们程序员无法感知和干预。

4.进程和线程的联系

进程包含线程,每个进程中都会包含一个或者多个线程。在Windows的任务管理器中,我们看不到进程内部的线程,但可以借助VS的调试器、Windbg等其他调试工具来看到线程。

相关推荐
ID_18007905473几秒前
日本乐天商品详情API接口的请求构造与参数说明
开发语言·python·pandas
派大鑫wink8 分钟前
【Day34】Servlet 进阶:会话管理(Cookie vs Session)
java·开发语言·学习方法
多米Domi01112 分钟前
0x3f 第35天 电脑硬盘坏了 +二叉树直径,将有序数组转换为二叉搜索树
java·数据结构·python·算法·leetcode·链表
猫天意21 分钟前
【深度学习小课堂】| torch | 升维打击还是原位拼接?深度解码 PyTorch 中 stack 与 cat 的几何奥义
开发语言·人工智能·pytorch·深度学习·神经网络·yolo·机器学习
zqmattack33 分钟前
SQL优化与索引策略实战指南
java·数据库·sql
crossaspeed35 分钟前
Java-线程池(八股)
java·开发语言
带刺的坐椅41 分钟前
又一个项级的 Java Multi Agent 开源项目
java·ai·agent·solon·智能体
Voyager_41 小时前
StringRedisTemplate 和 RedisTemplate 的区别是什么?
java·spring boot
杏花春雨江南1 小时前
JavaWeb企业级项目实战:从SSH到SSM演进 + MQ/Redis/ES高可用架构落地全复盘(实战干货+避坑指南)
java·jvm·spring
UR的出不克1 小时前
使用 Python 爬取 Bilibili 弹幕数据并导出 Excel
java·python·excel