Compare commits
6 Commits
71be32559b
...
22f13d0429
Author | SHA1 | Date |
---|---|---|
Guide | 22f13d0429 | |
Guide | 62a6a45d05 | |
Guide | 588f3818fd | |
Zzr-rr | be55c433c0 | |
firgk | 16275c8271 | |
TedLau | e54ce07e8c |
|
@ -239,7 +239,7 @@ Resilience4j 不仅提供限流,还提供了熔断、负载保护、自动重
|
|||
|
||||
分布式限流常见的方案:
|
||||
|
||||
- **借助中间件架限流**:可以借助 Sentinel 或者使用 Redis 来自己实现对应的限流逻辑。
|
||||
- **借助中间件框架限流**:可以借助 Sentinel 或者使用 Redis 来自己实现对应的限流逻辑。
|
||||
- **网关层限流**:比较常用的一种方案,直接在网关层把限流给安排上了。不过,通常网关层限流通常也需要借助到中间件/框架。就比如 Spring Cloud Gateway 的分布式限流实现`RedisRateLimiter`就是基于 Redis+Lua 来实现的,再比如 Spring Cloud Gateway 还可以整合 Sentinel 来做限流。
|
||||
|
||||
如果你要基于 Redis 来手动实现限流逻辑的话,建议配合 Lua 脚本来做。
|
||||
|
|
|
@ -328,7 +328,7 @@ private void rehash(HashEntry<K,V> node) {
|
|||
HashEntry<K,V> e = oldTable[i];
|
||||
if (e != null) {
|
||||
HashEntry<K,V> next = e.next;
|
||||
// 计算新的位置,新的位置只可能是不便或者是老的位置+老的容量。
|
||||
// 计算新的位置,新的位置只可能是不变或者是老的位置+老的容量。
|
||||
int idx = e.hash & sizeMask;
|
||||
if (next == null) // Single node on list
|
||||
// 如果当前位置还不是链表,只是一个元素,直接赋值
|
||||
|
@ -337,7 +337,7 @@ private void rehash(HashEntry<K,V> node) {
|
|||
// 如果是链表了
|
||||
HashEntry<K,V> lastRun = e;
|
||||
int lastIdx = idx;
|
||||
// 新的位置只可能是不便或者是老的位置+老的容量。
|
||||
// 新的位置只可能是不变或者是老的位置+老的容量。
|
||||
// 遍历结束后,lastRun 后面的元素位置都是相同的
|
||||
for (HashEntry<K,V> last = next; last != null; last = last.next) {
|
||||
int k = last.hash & sizeMask;
|
||||
|
|
|
@ -228,7 +228,7 @@ new 一个 `Thread`,线程进入了新建状态。调用 `start()`方法,会
|
|||
再深入到计算机底层来探讨:
|
||||
|
||||
- **单核时代**:在单核时代多线程主要是为了提高单进程利用 CPU 和 IO 系统的效率。 假设只运行了一个 Java 进程的情况,当我们请求 IO 的时候,如果 Java 进程中只有一个线程,此线程被 IO 阻塞则整个进程被阻塞。CPU 和 IO 设备只有一个在运行,那么可以简单地说系统整体效率只有 50%。当使用多线程的时候,一个线程被 IO 阻塞,其他线程还可以继续使用 CPU。从而提高了 Java 进程利用系统资源的整体效率。
|
||||
- **多核时代**: 多核时代多线程主要是为了提高进程利用多核 CPU 的能力。举个例子:假如我们要计算一个复杂的任务,我们只用一个线程的话,不论系统有几个 CPU 核心,都只会有一个 CPU 核心被利用到。而创建多个线程,这些线程可以被映射到底层多个 CPU 上执行,在任务中的多个线程没有资源竞争的情况下,任务执行的效率会有显著性的提高,约等于(单核时执行时间/CPU 核心数)。
|
||||
- **多核时代**: 多核时代多线程主要是为了提高进程利用多核 CPU 的能力。举个例子:假如我们要计算一个复杂的任务,我们只用一个线程的话,不论系统有几个 CPU 核心,都只会有一个 CPU 核心被利用到。而创建多个线程,这些线程可以被映射到底层多个 CPU 核心上执行,在任务中的多个线程没有资源竞争的情况下,任务执行的效率会有显著性的提高,约等于(单核时执行时间/CPU 核心数)。
|
||||
|
||||
### 使用多线程可能带来什么问题?
|
||||
|
||||
|
|
Loading…
Reference in New Issue