1. 限制 总并发数(如 数据库连接池、线程池)
2. 限制 瞬时并发数(如 nginx 的 limit_conn 模块,来限制 瞬时并发连接数)
3. 限制 时间窗内的平均速率(如 Guava 的 RateLimiter、nginx 的 limit_req 模块,限制每秒的平均速率)
4. 限制 远程接 调速率
5. 限制 MQ 的消费速率
6. 可以根据 络连接数、络流、CPU 或 内存负载 等来限流
10.ConcurrentHashMap使原
1、作机制(分思想):它引个“分段锁”的概念,具体可以解为把个的Map拆分成N个的segment,根据key.hashCode()
来决定把key放到哪个HashTable中。可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。
2、应:当读>写时使,适合做缓存,在程序启动时初始化,之后可以被多个线程访问;
3、hash冲突:
1、简介:HashMap中调hashCode()法来计算hashCode。由于在Java中两个同的对象可能有样的hashCode,所以同的键可
能有样hashCode,从导致冲突的产。
2、hash冲突解决:使平衡树来代替链表,当同hash中的元素数超过特定的值会由链表切换到平衡树
4、锁读:ConcurrentHashMap之所以有较好的并发性是因为ConcurrentHashMap是锁读和加锁写,并且分段锁(是在所有的
entry上加锁,是在部分entry上加锁);
读之前会先判断count(jdk1.6),其中的count是被volatile修饰的(当变被volatile修饰后,每次改该变的时候会将改结果写到
系统主内存中,多处的缓存致性,其他处会发现的缓存对应的内存地址被修改,就会将处的缓存设置为失效,并强制
从系统主内存获取最新的数据。),故可以实现锁读。
11.解决map的并发问题案
HashMap是线程安全的;Hashtable线程安全,但效率低,因为是Hashtable是使synchronized的,所有线程竞争同把锁;
ConcurrentHashMap仅线程安全且效率,因为它包含个segment数组,将数据分段存储,给每段数据配把锁,也就是所谓的锁分段技
术。
12.么是协程,以及实现要点
1、产者/消费者模式是性能的实现:
1.涉及到同步锁。
2.涉及到线程阻塞状态和可运状态之间的切换。
3.涉及到线程上下的切换。
2、协成定义:协程,英Coroutines,是种线程加轻级的存在。正如个进程可以拥有多个线程样,个线程也可以拥
有多个协程。最重要的是,协程是被操作系统内核所管,完全是由程序所控制(也就是在户态执)。
这样带来的好处就是性能得到很的提升,会像线程切换那样消耗资源。