自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 Netty - 什么是Reactor模式

引用一下Doug Lea大师在文章Reactor模式由Reactor线程、Handlers处理器两大角色组成,两大角色的职责分别如下:Reactor线程的职责:负责响应IO事件,并且分发到Handlers处理器。Handlers处理器的职责:非阻塞的执行业务处理逻辑。优点:响应快,虽然同一反应器线程本身是同步的,但是不会被单个连接的IO操作所阻塞。编程相对简单,最大限度避免了复杂的多线程同步,也避免了多线程各个进程之间切换的开销。

2025-11-23 23:31:07 662

原创 Kafka - 4 Kafka的副本同步机制

副本同步机制是分布式系统中确保数据一致性和高可用性的核心机制,通过主副本(Leader)与从副本(Follower)的协同工作,实现数据的实时复制和故障自动转移。在Kafka中,每一个分区中的消息都会有一个唯一的编号,这个编号被称为“偏移量”。Kafka的消费者可以通过offset来获取到自己当前的消费位置。高水位:通过标识了一个特定的消息偏移量来管理消费者的进度和保证数据的可靠性。offset总共有两种提交方式,一般比较推荐使用手动提交的方式。高水位的作用定义消息可见性。

2025-11-16 22:58:10 1027 1

原创 Kafka -3 Kafka是如何保证消息会被至少消费一次的

不要使用 producer.send(msg),而要使用 producer.send(mag, callback)。一定要使用带有回调通知的 send 方法。设置 acks = -1。acks 是 Producer 的一个参数,代表了对 “已提交” 消息的定义。acks 一共有三种表现形式,分别为:1、0、-1,分别代表:需要得到 Leader 成功收到数据并确认、不等待 Broker 的同步、需要得到所有 Follower 的确认。设置 retries 为一个较大的值。

2025-11-12 21:27:22 777

原创 番外 - 何为零拷贝

由于CPU和IO速度的差异问题,产生了DMA技术,通过DMA搬运来减少CPU的等待时间。传统的IOread+write方式会产生2次DMA拷贝+2次CPU拷贝,同时有4次上下文切换。而通过mmap+write方式则产生2次DMA拷贝+1次CPU拷贝,4次上下文切换,通过内存映射减少了一次CPU拷贝,可以减少内存使用,适合大文件的传输。sendfile方式是新增的一个系统调用函数,产生2次DMA拷贝+1次CPU拷贝,但是只有2次上下文切换。

2025-11-09 11:34:12 1013

原创 Kafka-2 Kafka的特点

Kafka在数据处理与数据分发方面表现相比于其余几个更为出色,如果我们在处理大量数据时,需要较高的性能与吞吐量的时候,我们可以选用Kafka。Kafka,ActiveMQ,RabbitMQ,RocketMQ都是常见的消息中间件,主要的用途是一致的,但是他们之间也是有着一些细小的区别。通过每隔一定的消息来建立一个索引,这样构建成了稀疏索引,从而减少了索引的大小,提高了查找特定消息的效率。生产者可以发送异步消息,无需等待每个消息的确认,这在一定程度上大幅度提高了吞吐量。

2025-11-08 21:46:05 900

原创 Kafka-1 基本概念

什么是Kafka,我们可以用Kafka做什么

2025-11-06 22:11:53 727 1

原创 Spring

在传统的程序设计中,应用程序代码通常控制着对象的创建和管理。例如,一个对象需要依赖其他对象,那么他会直接new出一个新对象,这样的设计模式通常被称为“控制流程”。在IOC中,控制关系发生了反转,控制权被转移到Spring容器中,容器负责创建和管理对象,并且在需要的时候将它们注入到应用程序中。当我们有了Spring的IOC之后,对象由容器创建并管理,我们只需要在使用的时候从容器中获取就行了。跟IOC一样,AOP也指的是一种思想,AOP是面向不同切面,一个切面可以横跨多个类和对象去操作。

2025-09-15 22:52:23 890

原创 Kafka如何保证高可用

在集群中,每个分区都可以有多个副本,这些副本中包含了一个Leader和多个Follower,只有Leader才能处理生产者和消费者的请求,而Follower只是Leader的备份,用于提供数据的冗余备份和容错能力。如果Leader发生故障,Kafka集群会自动将Follower提升为新的Leader。kafka是一个多分区、多副本且基于zookeeper协调的分布式消息系统。也是一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。

2025-09-04 22:53:57 581

原创 JVM - 内存模型

JVM内存模型包括:程序计数器、本地方法栈、虚拟机堆(线程)、线程栈、方法区。程序计数器、线程栈、本地方法栈是每个线程所独有的。

2025-07-31 23:05:03 986

原创 JVM-3 Young GC 和 Full GC 的触发条件

YoungGC与FullGC触发条件

2025-07-27 23:14:44 417

原创 三色标记算法&什么是STW

再重新标记后,垃圾回收器会执行清除操作,将未标记为可达对象的对象进行回收,从而释放内存看空间。同时,垃圾回收器也会将所有未被标记的对象标记为白色。在Java中,当需要进行垃圾回收时,垃圾回收器就需要停止程序的所有线程,这样可以安全的识别和回收不再使用的对象,这个过程我们称之为STW。三色标记算法是一种JVM中垃圾标记的算法,他可以减少JVM在GC过程中的STW时长,他是CMS,G1等垃圾收集器中的主要使用的标记算法。在三色标记算法之前,JVM中垃圾对象的标记主要采用可达性分析算法以及引用计数法。

2025-07-27 22:34:16 369

原创 JVM-2 垃圾回收器

G1是CMS的改进版,解决了CMS内存碎片,更多内存空间等问题。G1是一个先进的垃圾收集器,他可以提高系统的吞吐量,降低停顿的频率,并且可以有效管理大型堆,在JDK9之后,G!优点:1、并发 2、低停顿。

2025-07-27 17:40:02 758

原创 JVM-1 垃圾回收算法

首先将内存划分为两个区域,新建的对象都放在其中一块的内存上,当快满的时候,就将标记出来的存活对象放到另一块内存区域中,清除掉第一块中的垃圾,如果再来新的对象被创建则会在第一块内存中,当内存满了之后循环上述操作。标记清除算法是最简单和最干脆的一种垃圾回收算法,他的执行流程是:当JVM中识别出来内存中的垃圾后,直接将其清除掉,这样做的缺点就是会导致内存空间的不连续,产生很多内存碎片。标记:此阶段与标记-清除算法是一模一样的,通过遍历GC Roots,然后将存活的对象全部标记。

2025-07-22 23:19:13 1039

原创 ConcurrentHashMap

ConcurrentHashMap 是 Java 并发包 java.util.concurrent 中的一个类,用于实现线程安全的哈希表。在 Java 5 中被引入,它是 Hashtable 和使用同步包装的 HashMap 的一个有效替代品,尤其是在并发环境下需要高性能的哈希表时。ConcurrentHashMap 是一个线程安全的哈希表实现,它允许并发读写操作,并且不需要对整个表进行锁定。

2025-07-17 16:17:27 883

原创 【HashMap】

HashMap简单概括

2025-07-16 18:51:46 2047

原创 【Java并发】

接口中的方法用来检查执行是否完成、等待完成和得到执行的结果。当执行完成后,只能通过get()方法得到结果,get方法会阻塞直到结果准备好,如果需要取消,需要调用cancel()方法。FutureTask是Future接口的一个实现,他实现了一个可以提交给Executor 执行的任务,并且可以检查任务的执行状态和获取任务的执行结果。并发:在操作系统中指一个时间段有几个程序都处于已启动运行到完毕之间,且这几个程序都是在一个处理机上运行的。线程数的设定需要根据程序的需求和运行环境来决定,没有一个固定的最佳值。

2025-07-09 23:31:30 1973

原创 【CAS】

volatile Compare And Swap(CAS)是一项乐观锁技术,先比较再替换。CAS操作包含三个值-----内存位置(V)、预期原值(A)与新值(B)。在进行并发修改的时候,会先比较AV中的值是否相等,如果相等就会把值替换成B,否则就不做任何操作。当多个线程尝试使用CAS同时更新同一个变量时,只有一个线程可以更新变量的值,其他的线程都会失败,失败的线程不会被挂起,而是被通知这次更新失败,可以再次进行尝试。

2025-07-07 23:24:20 613

原创 AQS&&

volatile AQS(AbstractQueueSynchronizer,抽象队列同步器)是Java并发编程中的重要组件,是ReentrantLock、读写锁等并发工具的基础,除此之外,我我们还可以基于AQS定制我们所需要的同步器。

2025-07-07 00:09:18 705

原创 volatile

volatile 通常被比喻为“轻量级” synchronized,也是并发编程中的一个关键字,volatile是一个变量修饰符,只用来修饰变量。无法修饰方法及代码块等。主要用于保证多线程环境下的共享变量的可见性和一致性,不能保证原子性。

2025-07-03 23:57:35 1503

原创 synchronized的锁(bushi)

synchronized

2025-06-23 23:18:37 724

原创 synchronized实现

对象的所有方法都被“互斥”的执行。把Monitor当成只有一把“钥匙”的锁,任何一个线程进入任何一个方法都需要获得这把“钥匙”,离开时需要把钥匙归还回来通常提供singal机制:允许正持有“钥匙”的线程暂时不要这把“钥匙”了,当某个条件变量为真成立后,当前进程可以“通知”正在等待这个条件变量的线程让他去重新得到这把钥匙。

2025-06-17 00:50:17 901

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除