进程与线程的区别 进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。 在指令运行过程中还需要用到磁盘、网络等设备。 进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器 等),也有的程序只能启动一个实例 2022-01-24 操作系统
RabbitMQ消息幂等性问题 什么是幂等性在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同 HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。幂等性属于语义范畴,正如编译器只能帮助检查语法错误一样,HTTP规范也没有办法通过消息格式等语法手段来定义它。 简之:一个请求,不管重复来多少次,结果是不会改变的。 消费者在消费 MQ 中的消息时,MQ 已把消息发送给消费者,消费者在给 M 2022-01-24 RabbitMQ
RabbitMQ补偿机制与@RabbitListener注解原理 补偿机制RabbitMQ 默认情况下,如果消费者程序出现异常的情况下,会自动实现补偿(重试)机制 即队列服务器发送补偿请求 @RabbitListener原理@RabbitListener 底层使用 AOP 进行拦截 如果程序没有抛出异常,则会自动提交事务 如果程序捕捉到异常信息,会自动实现补偿机制,该消息会缓存到 RabbitMQ服务端中,一直重试到不跑出异常为止 补偿机制一直重复显然是会占 2022-01-24 RabbitMQ
RabbitMQ实现分布式事务 原理采用最终一致性原理 也就是说过程中可能会产生不一致,但是最终会保持一致 要素RabbitMQ解决分布式事务需要保证以下三要素 一、确认生产者一定要将数据发送到 MQ服务器中 采用 MQ 消息确认机制 二、MQ消费者消息能够正确消费消息 采用手动 ACK 模式,同时也要注意重试幂等性问题 三、保证第一个事务先执行 采用补偿机制,创建一个消费者进行监听第一个事务,如果第一个事务没有执行成功 2022-01-24 RabbitMQ
线程的生命周期 线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。 新建:就是刚使用new()方法,new出来的线程; 就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行; 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线程的操作和功能; 阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了 2022-01-24 操作系统
常见方法 12本文参考了码友 Nyima 的学习笔记https://nyimac.gitee.io/2020/06/08/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/ 2022-01-24 Java 并发编程
内存模型 什么是JMM1234JMM 即 Java Memory Model,它定义了主存(共享内存)、工作内存(线程私有)抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。 JMM主要体现在以下几个方面原子性1保证指令不会受到线程上下文切换的影响 引例1234567891011121314151617181920212223242526public class Atomici 2022-01-23 JVM
内存结构 程序计数器线程私有 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的 字节码的行号指示器。 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处 理、线程恢复等基础功能都需要依赖这个计数器来完成。 Java虚拟机栈线程私有 虚拟机栈描述的是Java方法执行的线 2022-01-23 JVM
类加载机制 类加载的时机在对象的创建过程中,完成了检查阶段 加载 (Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化 (Initialization) 使用(Using) 卸载(Unloading) 其中验证、准备、解析三个部分统称为连接(Linking) 其中加载、验证、准备、解析、初始化和卸载这五个阶段的顺序是确定的,类 2022-01-23 JVM
垃圾收集 对象已死?引用计数算法123很多教科书判断对象是否存活的算法是这样的:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 优点1引用计数算法(Reference Counting)虽然占用了一些额外的内存空间来进行计数,但它的原理简单,判定效率也很高,在大多数情况下它都是一个不错的算法。 缺点1这个看 2022-01-23 JVM