From 9c35b5981c70f3fc2c04d6e62b8f37819e236f17 Mon Sep 17 00:00:00 2001 From: CompetitiveLin Date: Sat, 19 Oct 2024 12:43:41 +0800 Subject: [PATCH] 20241019 --- _posts/2023-07-06-redis.md | 2 ++ _posts/2023-08-25-kafka-vs-rocketmq.md | 6 +++++- _posts/2024-02-27-go.md | 8 +++----- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/_posts/2023-07-06-redis.md b/_posts/2023-07-06-redis.md index 1cf71e26f..1c25aa29d 100644 --- a/_posts/2023-07-06-redis.md +++ b/_posts/2023-07-06-redis.md @@ -180,6 +180,8 @@ redis 4.0 后部分命令开始使用多线程。 4. master快照发送完后开始向slave发送缓冲区的写命令,slave接收命令并执行,完成复制初始化 5. 此后master每次执行一个写命令都会同步发送给slave,同时也会写入**复制积压缓冲区**,保持master与slave之间数据的一致性,如果主从之间断开连接,那么重连后会根据该缓冲区中的偏移量将断开连接这段时间的数据修改写入从节点。 +主从异步复制,因此有可能存在数据不一致的情况。 + ### 请求转发 主从模式下,服务端并不做转发处理。而要实现读写分离的功能,需要客户端自行处理了。比如要自行定位master节点,然后将写请求发送过去,读请求则可以做负载均衡处理。 diff --git a/_posts/2023-08-25-kafka-vs-rocketmq.md b/_posts/2023-08-25-kafka-vs-rocketmq.md index 9c709d59c..013abadac 100644 --- a/_posts/2023-08-25-kafka-vs-rocketmq.md +++ b/_posts/2023-08-25-kafka-vs-rocketmq.md @@ -375,5 +375,9 @@ Controller 用于在 ZK 的帮助下管理和协调整个 Kafka 集群。集群 2. 消费重复消费:提交的偏移量**小于**消费者处理的最后一个信息的偏移量 +## Rebalance 触发时机 +总体来说是消费者和partition的对应关系发生了变化 - +1. 消费者组内的消费者数量发生了变化 +2. 消费者组内的主题分区数发生了变化 +3. 消费者组订阅的主题发生了变化 diff --git a/_posts/2024-02-27-go.md b/_posts/2024-02-27-go.md index 9635bc716..f0cec5433 100644 --- a/_posts/2024-02-27-go.md +++ b/_posts/2024-02-27-go.md @@ -258,13 +258,11 @@ func main() { ## 协程/线程/进程的区别 -- 进程:是具有一定独立功能的程序,是系统资源分配和调度的最小单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。 - -- 线程:是进程的一个实体,是内核态,而且是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。 - -- 协程:是一种用户态的轻量级线程,调度完全是由用户来控制的拥有自己的寄存器上下文和栈。调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。一个线程可以有多个协程,线程、进程都是同步机制,但协程是异步 +- 进程:是具有一定独立功能的程序,是系统资源分配和调度的最小单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。适合计算密集型的任务,考虑可以使用多核 CPU,使用多进程。 +- 线程:是进程的一个实体,是内核态,而且是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。适合 I/O 密集型,且 I/O 请求比较快的任务。 +- 协程:是一种用户态的轻量级线程,拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。或者说,协程能保留上一次调用时的状态。并且协程的默认占用内存远比其他语言的线程要少。goroutine:2KB(官方),线程:8MB(参考网络)。适合 I/O 密集型,且 I/O 请求比较耗时的任务。 ## Go 和 Java 的区别