Skip to content

Commit

Permalink
20241203
Browse files Browse the repository at this point in the history
  • Loading branch information
CompetitiveLin committed Dec 3, 2024
1 parent 0f7edc7 commit 6692342
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 12 deletions.
25 changes: 20 additions & 5 deletions _posts/2022-06-21-java.md
Original file line number Diff line number Diff line change
Expand Up @@ -313,8 +313,8 @@ Java NIO:

### synchronized

1. 修饰普通方法/静态方法:通过 monitorenter 和 monitorexit 指令实现同步
2. 修饰代码块:通过 ACC_SYNCHRONIZED 标记符实现同步
1. 修饰普通方法/静态方法:通过 Access flags 的标记符实现同步
2. 修饰代码块:通过 monitorenter 和 monitorexit 指令实现同步

底层都是通过对象头里 Mark Word 指向的对象监听器(Monitor)实现的,再底层是操作系统的互斥量(mutex)实现的

Expand Down Expand Up @@ -578,11 +578,26 @@ ReentrantLock:继承了Lock类,两者都是可重入锁、悲观锁、独占
2. 共享式。ReentrantWriteLock 和 CountDownLatch 是共享锁模式。CountDownLatch 会将任务分成 N 个子任务,初始化 state = N,每个子线程完成任务后会减一,直到为零。


Contract接口模式,结合feign实现
- contract 用于暴露接口
- service 用于实现接口
## 锁消除

指Java虚拟机在即时编译时,通过对运行上下的扫描,消除那些不可能存在共享资源竞争的锁。锁消除可以节约无意义的请求锁时间。

## 锁粗化

一直对某个对象反复加锁和解锁,频繁地进行互斥同步操作也会引起不必要的性能消耗。如果虚拟机检测到有一系列操作都是对某个对象反复加锁和解锁,会将加锁同步的范围粗化到整个操作序列的外部。

```
//==== 粗化前 ===
for(int i=0;i<n;i++){
synchronized(lock){
}
}
//==== 粗化后 ===
synchronized(lock){
for(int i=0;i<n;i++){
}
}
```

接口和抽象类的区别:

Expand Down
15 changes: 8 additions & 7 deletions _posts/2023-07-06-redis.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,17 @@ Redis 7之后使用 Listpack(紧凑列表) 数据结构代替 Ziplist。

# 单线程与多线程

redis 4.0 后部分命令开始使用多线程。

为什么使用单线程?
- Redis 的瓶颈是内存和带宽,而不是 CPU。


为什么又引入了多线程?
- redis 4.0 开始使用多线程惰性删除。
- redis 6.0 中多线程的实现主要集中在网络 I/O 处理上。采用了混合多线程模型,即在网络 I/O 处理阶段使用多线程。只能执行同时读或同时写

在命令执行阶段仍然采用单线程。这种设计既保留了单线程模型的简单性和一致性优势,又充分利用了多线程的并行处理能力。


[什么是多路IO复用](https://juejin.cn/post/7015927248100261901):一个服务端进程可以同时处理多个客户端连接。用于AOF持久化任务和处理客户端请求。其实现函数有:
- select:数据结构是bitmap,采用轮询,限制连接数为1024个(最大文件描述符数量)
- poll:数据结构是数组,解决了select的个数限制,但依旧是轮询
Expand All @@ -166,11 +172,6 @@ redis 4.0 后部分命令开始使用多线程。




为什么 Redis 又支持多线程了?
- 使用多线程仅在部分非阻塞的删除操作上面,通过多线程非阻塞释放内存,减少对主线程的阻塞,提高执行效率。


# 高可用(主从,哨兵,集群)
## 主从模式
主节点可以读、写,从节点只能读
Expand Down

0 comments on commit 6692342

Please sign in to comment.