[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等其他调试工具来看到线程。

相关推荐
峥无3 小时前
C++11 深度详解:现代 C++ 基石全梳理
开发语言·c++·笔记
阿米亚波3 小时前
【C++ STL】std::unordered_multimap
开发语言·数据结构·c++·笔记·stl
名字还没想好☜3 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
SomeB1oody3 小时前
【RustyML入门】1.0. 快速上手
开发语言·后端·机器学习·rust·教程
圆山猫3 小时前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v
狗凯之家源码网4 小时前
短剧系统搭建实战:源码功能与商业变现效果全景展示
开发语言·php
caishenzhibiao4 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#
史呆芬4 小时前
分布式事务实战:微服务跨服务数据一致性解决方案
java·后端·spring cloud
IT界的老黄牛4 小时前
限流命中后该怎么办:直接丢、阻塞等待、延迟重投三种姿势的取舍
java·rocketmq·redisson·令牌桶·削峰·分布式限流
易筋紫容5 小时前
创建型模式:对象的诞生艺术
开发语言·前端·javascript