Skip to content

Commit fb6b6d6

Browse files
20240908
1 parent 2e0b82c commit fb6b6d6

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

_posts/2022-06-21-java.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -245,20 +245,26 @@ Garbage First(G1)收集器:
245245
246246
![](https://raw.githubusercontent.com/CompetitiveLin/ImageHostingService/picgo/imgs/202305111608659.png)
247247

248-
Java IO:
249-
- 阻塞/非阻塞,如果方法不能立即返回,需要等待,线程会阻塞
250-
- 同步/异步,如果能开启新的线程,则叫异步,多线程是实现异步的一种方式。
248+
# Java IO
249+
1. BIO:同步阻塞IO,使用方便,但并发处理能力低
250+
2. NIO:同步非阻塞IO,适用于连接数目多且连接比较短(轻操作)的架构
251+
3. AIO:异步非阻塞IO,适用于连接数目多且连接比较长(重操作)的架构
252+
253+
- 阻塞/非阻塞,是对同一个线程来说。关注的是程序在等待调用结果(消息,返回值)时的状态。阻塞调用是指调用结果返回之前,当前线程会被挂起。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
254+
- 同步/异步,针对调用者与被调用者,它们是线程之间的关系。同步操作,调用者需要等待被调用者返回结果,才会进行下一步操作;异步操作,调用者不需要等待被调用者返回调用,即可进行下一步操作,被调用者通常依靠事件、回调等机制来通知调用者结果
255+
256+
251257

252258
NIO vs IO:
253-
- IO是面向流的,NIO是面向缓冲区的
259+
- IO是面向字节流的,NIO是面向缓冲区的
254260
- IO流是阻塞的,NIO流是不阻塞的
255261
- 选择器:Java NIO的选择器允许一个单独的线程来监视多个输入通道
256262

257263
IO多路复用(事件驱动):**一个线程不断轮询多个socket的状态**,只有当socket真正有读写状态时,借用当前线程或者使用线程池额外启动线程,调用实际的IO读写操作。
258264

259265
Java NIO:
260266
- 实际上也是一种多路复用的IO。
261-
- 三大核心部分:Channel(通道) ,Buffer(缓冲区), Selector(选择器),Channel 负责传输, Buffer 负责存取数据
267+
- 三大核心部分:Channel(通道) ,Buffer(缓冲区), Selector(选择器),Channel 负责传输(类比成铁路), Buffer 负责存取数据(类比成载着货物的火车)
262268
- Channel是双向的,数据总是从通道读到缓冲区或者从缓冲区中写入通道内。
263269
- 额外一个Selector线程,用于监听多个通道(Channel)的事件(比如:连接打开,数据到达),如果由事件发生,则获取事件并对每个事件进行相应的响应处理。
264270

_posts/2023-08-25-kafka-vs-rocketmq.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,17 @@ Kafka:topic 从几十到几百个时候,吞吐量会大幅度下降。原理
219219

220220
主写主读,不支持读写分离
221221

222+
### Producer 负载均衡
223+
224+
当 key 不存在时,会从当前存活的分区中轮询;当 key 存在时,发送给哈希后的指定分区。
225+
226+
### Consumer 负载均衡
227+
228+
Kafka 中主题订阅者的基本单位是消费者组,每个分区只能由消费者组中的一个消费者进行消费,多个消费者组之间对于分区的消费互不影响。共有[三个分区分配器](https://blog.huohaodong.com/blog/how-kafka-design-loadbalance)
229+
1. RangeAssignor(默认)
230+
2. RoundRobinAssignor
231+
3. StickyAssignor
232+
222233

223234
## RocketMQ 负载策略
224235

0 commit comments

Comments
 (0)