导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:359
阅读量:1984092
访问量:240317
至今:
×
博文->>搜索结果(耗时0.133秒) 博文列表>>
Tags : 高并发,JVM,调优,vivo 发表时间: 2021-10-28 23:44:19
作者:vivo互联网技术团队LiGuanyun、JessicaChen一、背景2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验。通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图:可以看出,在观察周期里:平均每10分钟YoungGC次数66次,峰值为470次;平均每10分钟FullGC次数0.25次,峰值5次;可见FullGC非常频繁,YoungGC在特定的时段也比较频繁,存在较大的优化空间。由于对GC停顿的优化是降低接口的P99时延一个有效的手段,所以决定对该核心服务进行JVM调优。二、优化目标接口P99时延降
类别:JVM | 阅读(425)| 回复(0)| (0) 阅读全文>>
Tags : Actor, Goroutine,并发 发表时间: 2018-01-04 23:07:45
本文基于我在2月27日Gopher北京聚会演讲整理而成,进行了一些补充以及调整。投稿给《高可用架构》公众号首发。聊这个话题之前,先梳理下两个概念,几乎所有讲并发的文章都要先讲这两个概念:并发(concurrency)并发的关注点在于任务切分。举例来说,你是一个创业公司的CEO,开始只有你一个人,你一人分饰多角,一会做产品规划,一会写代码,一会见客户,虽然你不能见客户的同时写代码,但由于你切分了任务,分配了时间片,表现出来好像是多个
类别:并发 | 阅读(1661)| 回复(0)| (0) 阅读全文>>
Tags : 高性能,java,高并发锁 发表时间: 2016-03-16 20:11:24
提高系统并发吞吐能力是构建高性能服务的重点和难点。通常review代码时看到synchronized是我都会想一想,这个地方可不可以优化。使用synchronized使得并发的线程变成顺序执行,对系统并发吞吐能力有极大影响,我的博文http://maoyidao.iteye.com/blog/1149015介绍了可以从理论上估算系统并发处理能力的方法。那么对于必须使用synchronized的业务场景,这里提供几个小技巧,帮助大家减小锁粒度,提高系统并发能力。初级技巧-乐观锁乐观锁适合这样的场景:读不会冲突,写会冲突。同时读的频率远大于写。以下面的代码为例,悲观锁的实现:Java代码publi
类别:架构 | 阅读(1465)| 回复(0)| (0) 阅读全文>>
Tags : 并发,线程池 发表时间: 2016-02-20 13:09:47
这几篇博客,一直在谈线程,设想一下这个场景,如果并发的线程很多,然而每个线程如果执行的时间很多的话,这样的话,就会大量的降低系统的效率。这时候就可以采用线程池的操作,来缓存我们并发操作的线程。而对于java中的线程池,大家需要理解好ThreadPoolExecutor、AbstractExecutorService、ExecutorService和Executor这几个类之间的关系即可。通过看上面的这个关系图,可以知道,最核心的一个类是ThreadPoolExecutor,我们下面来具体的看一下这个类的操作。ThreadPoolExecutor类提供了四个构造函数,如下所示<spanst
类别:编程开发 | 阅读(1287)| 回复(0)| (0) 阅读全文>>
Tags : Java,并发,线程池 发表时间: 2016-01-18 22:20:01
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:  如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。  那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?  在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolExecutor类中的方法讲起,然后再讲述它的实现原理,接着给出了它的使用示例,最后讨论了一下如何合理配置线程池的大小。  以
类别:并发 | 阅读(1290)| 回复(0)| (0) 阅读全文>>
Tags : 生产者消费者模式,并发 发表时间: 2015-10-05 09:59:28
在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。为什么要使用生产者和消费者模式在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这种生产消费能力不均衡的问题,所以便有了生产者和消费者模式。什么是生产者消费者模式生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接
类别:并发 | 阅读(1238)| 回复(0)| (0) 阅读全文>>
Tags : CopyOnWrite,并发 发表时间: 2015-10-03 23:04:59
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。什么是CopyOnWrite容器CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前
类别:并发 | 阅读(1343)| 回复(0)| (0) 阅读全文>>
Tags : Fork/Join框架,并发 发表时间: 2015-10-02 10:03:43
1.什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+。。+10000,可以分割成10个子任务,每个子任务分别对1000个数进行求和,最终汇总这10个子任务的结果。Fork/Join的运行流程图如下:(图丢失...地址:http://infoqstatic.com/re
类别:并发 | 阅读(1245)| 回复(0)| (0) 阅读全文>>
Tags : 原子操作,并发 发表时间: 2015-09-26 22:55:36
1引言原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomicoperation)意为”不可被中断的一个或一系列操作”。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。2术语定义术语名称英文解释缓存行Cacheline缓存的最小操作单位比较并交换CompareandSwapCAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。CPU流水线CPUpipelineCPU流水线的工作方式就象工业生产上的装配流水
类别:并发 | 阅读(1136)| 回复(0)| (0) 阅读全文>>
Tags : 并发,线程池 发表时间: 2015-09-21 22:56:32
1.引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。2.线程池的使用线程池的创建我们可以通过ThreadPoolExecutor来创建一个线程池。1newThreadPoolExecutor(corePoolSize,maximumPoolSize,2keepAliv
类别:并发 | 阅读(1299)| 回复(0)| (0) 阅读全文>>