当前位置: 首页 > ai >正文

并发基础|进程与线程

进程基础

什么是进程?

为了实现并发的功能,引入了进程的概念。 ​ 为了实现并发,需要引入多程序的环境,但是多程序的环境会造成一些单程序时不存在的问题,比如程序的之间没有了封闭性,程序不可以连续的执行,由于没有封闭性和连续性(隔离性和安全性),也就失去程序再现的能力。为了解决这些问题,需要进一步的修改操作系统,为达到隔离性与安全性的要求的集合,就称之为进程,进程就是为了解决这些问题而提出的概念。

名词解释:

程序:静态的,一个指令集合 进程:动态的,一个程序的执行过程;

进程=PCB+程序段+数据段

eg:在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程

线程基础

进程还是没有完美解决并发的需求,需要引入线程进一步解决并发出现的上下文切换损耗,引入线程后,使用相近的资源的程序可以使用线程进行开发,因为如果使用进程进行开发,程序切换带来的开销是很大的,这些开销主要是上下文切换。因此可以说是为了减少进程切换带来的花销(主要是上下文切换),引入了线程的概念。而同时也会带来其他的问题,例如死锁、数据一致性(竞争条件)等。 (竞争条件:多个线程访问共享数据(资源),并且尝试改变这些数据(资源)时,它们之间对于该资源的操作顺序会影响最终结果的正确性。)

什么是线程?

为了减少进程切换(上下文切换)带来的效率损耗,引入了线程这个概念。线程是进程的一个实现,不占有资源,但是可以执行相应的代码指令。有点类似于工程机械公司——老板拥有所有资源,即挖机、修理机械、保养设备等,挖机师傅负责干活,公司有多种挖机,大挖机、小挖机、长臂挖机、水挖机,每次遇到什么问题,不用换专门的公司,只需要换一个挖机师傅就可以了,挖机师傅从老板那里取干活用的挖机(调用进程资源),这样一来,省了招标的流程了,直接内部解决问题。 ​ 线程是轻量级的进程,不拥有资源,线程间切换付出的时空开销小,对于java而言,线程共享堆与方法区,而pc寄存器、虚拟机栈和本地方法栈都是私有的。

名词解释:
上下文切换

Javaguide的回答有问题,上下文不涉及栈信息,上下文指的是cpu周边的那些寄存器(硬件)里面的信息,计组里面的内容了,上下文切换就是要保存那些寄存器(程序计数器、处理器状态寄存器等等一系列寄存器的信息)到内存,然后再从内存把之前保存的,另一个线程的上下文拿过来放到cpu里面,让这些寄存器获得这个线程的信息,然后跑起来。这样一来,就达到切换线程的目的了。

什么时候切换上下文? 切换线程的时候切换上下文,进程什么时候会切换?如下:

  1. 主动让出 CPU,比如调用了 sleep(), wait() 等。

  2. 时间片用完,因为操作系统要防止一个线程或者进程长时间占用 CPU 导致其他线程或者进程饿死。

  3. 调用了阻塞类型的系统中断,比如请求 IO,线程被阻塞。

  4. 被终止或结束运行

并发与并行的区别?

并行是一系列任务在同一时间同时执行;

并发是一系列任务在同一时间段内轮番执行。

同步与异步的区别?

首先要涉及到一个叫做调用的概念,在执行的过程中,执行一条指令,这条指令不是简单的指令,而是指向另一个程序的接口,通过这个指令会出发另一个程序的执行,并得到返回结果(返回值,有或者没有)。

  • 同步 : 发出一个调用之后,在没有得到结果之前, 该调用就不可以返回,一直等待。

  • 异步 :调用在发出之后,不用等待返回结果,该调用直接返回。

http://www.xdnf.cn/news/9142.html

相关文章:

  • 使用NSIS 和 VNISEdit 打包 electron 程序为 exe 向导式安装包
  • 制药行业数字化转型:从挑战到智能化落地的实践路径
  • 嵌入式学习Day28
  • FreeRTOS——事件标志组
  • Java 权威方案:彻底修复 OPTIONS 方法安全漏洞(附企业级案例与测试指南)
  • 今日行情明日机会——20250526
  • 固态硬盘不识别或掉盘如何解决?——以Kingston FURY Renegade G5为例
  • Qwen-Agent的使用示例-天气查询(function calling)
  • 电子电路原理第十七章(线性运算放大器电路的应用)
  • 【登录优化】redis删除旧token
  • AI测试进入智能体时代:AutoGen 、 Coze、CrewAI 谁主沉浮?
  • C++ STL map multimap 查找操作详解
  • 2025-5-26Vue3快速上手
  • Nginx location匹配模式详解
  • 解锁 MCP 中的 JSON-RPC:跨平台通信的奥秘
  • nfs下载镜像报错File lookup fail,TTTTTTTTTTTTTTT,内核 6.11.0降到5.15.0
  • JAVA面试复习知识点
  • 【沉浸式解决问题】基于泛型递归,Java中实体类基类开启MybatisPlus的ActiveRecord模式
  • PID控制学习(位置式,增量式,算法优化,多环串级PID)
  • LitCTF 2025 Robbie Wanna Revenge
  • 并发的产生及对应的解决方案之实例举证
  • Java 中经常犯的错误
  • 2025年5月26日第一轮
  • 【springboot项目部署】打包部署
  • 矩阵链乘法问题
  • vae 视频截图 复习 gans和vae的原理区别
  • JVM垃圾回收器详细介绍
  • 注解的使用和自定义
  • Composer 常规操作说明与问题处理
  • 【部署】读取制度类txt文件导入dify的父子分段知识库